# JOGL 64 bit



## Sanix (14. Okt 2010)

Hallo,
Ich benutze JOGL unter einem 64Bit Windows 7. Teilweise muss ich das Fenster Resizen, damit das JOGL Canvas angezeigt wird. Das gleiche Applet läuft bei anderen Problemlos, wieder andere haben das gleiche Problem wie ich. Ist das ein bekannter Bug oder ein Programmierfehler?


----------



## Marco13 (14. Okt 2010)

Du kannst mal das bei New Features in Java 2D(TM) Technology beschriebene flag -Dsun.java2d.opengl auf true/false setzen, und schauen, ob das einen Unterschied macht (kann aber gut sein, dass sich die Menge der Leute, bei denen es dann funktioniert "invertiert" ...  )


----------



## Sanix (10. Nov 2010)

Danke so funktioniert es. Dafür verhält es sich sonst teilweise anders.


----------



## Guest2 (10. Nov 2010)

Moin,

nur um sicher zu gehen, verwendest Du den jogl Animator und ist dieser korrekt eingebunden? Also, z.B. in etwa wie hier?

Das Phänomen tritt nämlich auch schon mal auf, wenn versucht wird, jogl ohne Animator zu verwenden.

Gruß,
Fancy


----------



## Marco13 (10. Nov 2010)

Hm. Manchmal will man ja keinen Animator. Wenn man das Neuzeichnen nur von Hand selbst triggern will, sollte man ihn ja eigentlich nicht brauchen. Aber irgendwie haut's ihn dann machmal raus, dass man nur graue Flächen sieht, außer, wenn man neuzeichnet ... könnte das mit irgendwelchen GL-Swaps zusammenhängen ???:L


----------



## Guest2 (10. Nov 2010)

Könnte. Es könnte auch ein Timingproblem mit dem OpenGL Lock auf dem AWT Element sein. Aber da kann ich auch nur raten.

Interessant wäre, wie genau Du es versucht hast. Insbesondere welches display(), das aus dem GLEventListener oder das aus dem GLCanvas, aufgerufen wurde?

Spontan würde ich es etwa so schreiben:


```
package yc021;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.media.opengl.glu.GLU;
import javax.swing.SwingUtilities;


public class MTriangle implements GLEventListener {


    private float rot = 0;

    private GL2   gl;
    private GLU   glu;


    @Override
    public void init(final GLAutoDrawable drawable) {

        gl = drawable.getGL().getGL2();
        glu = new GLU();

        gl.setSwapInterval(1);

        gl.glEnable(GL.GL_DEPTH_TEST);

    }


    @Override
    public void display(final GLAutoDrawable drawable) {

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        gl.glLoadIdentity();
        gl.glRotatef(rot++, 0, 0, 1);

        gl.glColor3f(1.0f, 0.0f, 0.0f);
        gl.glBegin(GL.GL_TRIANGLES);
        gl.glVertex3f(-1.0f, -1.0f, -5.0f);
        gl.glVertex3f(+1.0f, -1.0f, -5.0f);
        gl.glVertex3f(+0.0f, +1.0f, -5.0f);
        gl.glEnd();

    }


    @Override
    public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, int height) {

        if (height <= 0)
            height = 1;

        gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, (float)width / (float)height, 1.0, 20.0);
        gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
        gl.glLoadIdentity();

    }


    @Override
    public void dispose(final GLAutoDrawable arg0) {

    }


    public static void main(final String[] args) throws InterruptedException, InvocationTargetException  {

        SwingUtilities.invokeAndWait(new Runnable() {


            private volatile boolean run = true;


            @Override
            public void run() {

                final MTriangle triangle = new MTriangle();
                final Frame frame = new Frame();
                final GLCanvas canvas = new GLCanvas();

                canvas.addGLEventListener(triangle);

                frame.add(canvas);
                frame.setSize(800, 600);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                final Thread animator = new Thread(new Runnable() {


                    @Override
                    public void run() {

                        while (run) {

                            canvas.display();

                            Thread.yield();

                        }

                    }
                });

                animator.start();


                frame.addWindowListener(new WindowAdapter() {


                    @Override
                    public void windowClosing(final WindowEvent e) {

                        run = false;

                        new Thread(new Runnable() {


                            @Override
                            public void run() {

                                try {

                                    animator.join();

                                } catch (final InterruptedException e) {

                                    Thread.currentThread().interrupt();

                                }

                                System.exit(0);

                            }

                        }).start();

                    }

                });

            }
        });
    }
}
```

Gruß,
Fancy


----------



## Sanix (11. Nov 2010)

Ja ist korrekt eingebunden. Wie gesagt, bei ein paar Studenten läuft das exakt gleiche Problem ohne diesen Bug oder was es auch ist. Beim resizen ist es dann teilweise grau, teilweise sieht man die Animation.


----------



## Xhris (20. Nov 2010)

Sanix hat gesagt.:


> Hallo,
> Ich benutze JOGL unter einem 64Bit Windows 7.



Hey, kannst du mir verraten wie hast du das in einem 64Bit OS zum laufen gebracht?
Google schon ewig rum. AMD 64 ERROR


----------

