Текстура исчезает на 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.