Я запускаю несколько учебных пособий по OpenGL. Я начал с учебника по Durian на C, и он отлично работает. Я хочу перенести его на Java + JOGL (я буду разрабатывать для Android, поэтому я хочу изучать OpenGL под Java) и получаю сообщение об ошибке при настройке текстур.
Код:
final int[] gl_textures = new int[1];
gl.glGenTextures(1, gl_textures, 0);
int gl_texture = gl_textures[0];
gl.glBindTexture(GL2.GL_TEXTURE_2D, gl_texture );
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE);
// no error before this
gl.glTexImage2D( gl_texture,
0,
GL2.GL_RGB8,
image.getWidth(),
image.getHeight(),
0,
GL2.GL_BGR,
GL2.GL_UNSIGNED_BYTE,
image.getPixelBuffer()
);
// invalid enumerant here
Любая подсказка, что может быть не так?
Я работаю с OpenGL 2.1 (я знаю, старый, но хорошо изучать OpenGL ES). Как я уже сказал, код учебника C работает нормально.
Редактировать
Вот код для рендеринга. Полную версию можно найти здесь
private void render( GLAutoDrawable drawable ) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glUseProgram(m_program);
gl.glUniform1f( m_uniform_fade_factor, (float)(0.5) );
gl.glActiveTexture(GL2.GL_TEXTURE0);
gl.glBindTexture( GL2.GL_TEXTURE_2D, m_textures[0] );
gl.glUniform1i( m_uniform_textures[0], 0);
gl.glActiveTexture(GL2.GL_TEXTURE1);
gl.glBindTexture(GL2.GL_TEXTURE_2D, m_textures[1] );
gl.glUniform1i( m_uniform_textures[1], 1 );
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, m_vertex_buffer );
gl.glVertexAttribPointer(
m_attribute_position,
2,
GL2.GL_FLOAT,
false,
sizeof_float * 2,
0
);
gl.glEnableVertexAttribArray( m_attribute_position );
gl.glBindBuffer( GL2.GL_ELEMENT_ARRAY_BUFFER, m_element_buffer );
gl.glDrawElements(
GL2.GL_TRIANGLE_STRIP,
4,
GL2.GL_UNSIGNED_SHORT,
0);
gl.glDisableVertexAttribArray( m_attribute_position );
gl.glFlush();
drawable.swapBuffers();
checkGLError(gl);
}