glTexImage2D之后的“无效枚举”

时间:2012-03-12 10:48:21

标签: opengl

我正在运行一些关于OpenGL的教程。我从C开始使用Durian教程,它运行正常。我想将它移植到Java + JOGL(我将为Android开发,所以我想在Java下学习OpenGL),并且在设置纹理时出现错误。

代码是:

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教程代码工作正常。

修改

这是渲染的代码。完整版can be found here

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);


}

1 个答案:

答案 0 :(得分:4)

glTexImage2D电话的第一个参数是错误的。在那里放置目标,而不是纹理名称。您必须将其设置为GL2.GL_TEXTURE_2D