Текстура исчезает на OSX - GL_TEXTURE_2D JOGL Затмение Java

У меня есть некоторые проблемы с рисованием текстур в Eclipse.

Когда я запускаю Java-приложение и когда всплывающее окно появляется, я вижу текстуру (красные квадраты от png.) Несколько миллисекунд, после чего все становится черным.

Я получил этот код, и он отлично работает на всех компьютерах моих одноклассников, но не на моем Macbook Pro 2012. Запустите JRE 1.8.

Изменили библиотеку jogl на библиотеки для Mac OSX, и я не получаю никаких ошибок при отладке. Я вижу, что в функции drawQuad что-то не так, и если я удаляю строку gl.glEnable(GL.GL_TEXTURE_2D), все рисует, но без текстур, как вы, наверное, поняли, только белый.

Так кто-нибудь знает, в чем может быть проблема? Или есть какие-то известные ошибки в osx с GL_TEXTURE_2D? Как я уже писал, приложение отлично работает на других ПК.

Вот класс, я думаю, где проблема:

private Texture texture;

void loadResources() throws GLException, IOException {
    if (texture == null)
        texture = TextureIO.newTexture(new File("3.png"), false);
}

void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
    GL2 gl = drawable.getGL().getGL2();
    GLU glu = new GLU();

    gl.glMatrixMode(GL_PROJECTION);
    gl.glLoadIdentity(); // reset
    glu.gluOrtho2D (0.0, w, h, 0);  // define drawing area

    gl.glMatrixMode(GL_MODELVIEW);
    gl.glLoadIdentity(); // reset

}

void drawQuad(GLAutoDrawable drawable, float x, float y, float w, float h) {
    GL2 gl = drawable.getGL().getGL2();

    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE0, texture.getTarget());
    gl.glBegin(GL2.GL_QUADS);
    gl.glColor3f(1, 1, 1);
    gl.glTexCoord2f(1, 1);
    gl.glVertex2f(x,      y);
    gl.glTexCoord2f(1, 1);
    gl.glVertex2f(x + w, y);
    gl.glTexCoord2f(1, 0);
    gl.glVertex2f(x + w, y + h);
    gl.glTexCoord2f(0, 0);
    gl.glVertex2f(x,      y + h);

    gl.glEnd();

}

public void clearScreen(GLAutoDrawable drawable) {
    GL2 gl = drawable.getGL().getGL2();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
}

Просто оставьте сообщение, если вам нужно больше кода.

1 ответ

Согласно здесь, glBindTexture не допускается между glBegin и glEnd. Вы проверяли на ошибки OpenGL? Это должно сгенерировать GL_INVALID_OPERATION.

Изменить: Согласно тому же здесь, первый параметр glBindTexture (target) не может быть GL.GL_TEXTURE0. Это должно было сгенерировать ошибку GL_INVALID_ENUM.

Другие вопросы по тегам