2012-03-12 5 views
0

OpenGL에서 일부 자습서를 실행 중입니다. 내가 C에서 Durian 자습서와 함께 시작하고 잘 작동합니다. Java + JOGL (Android 용으로 개발할 예정이므로 Java에서 OpenGL을 배우려고합니다)으로 포팅하고 텍스처를 설정할 때 오류가 발생합니다.glTexImage2D 이후의 "잘못된 열거 자"

코드는 다음과 같습니다 잘못 될 수있는

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


} 

답변

4

glTexImage2D 호출의 첫 번째 인수는 잘못된 것입니다. 거기에 텍스처 이름이 아닌 타겟을 놓습니다. GL2.GL_TEXTURE_2D으로 설정해야합니다.

+0

감사합니다. 간단한 실수입니다. 그래도 화면에 아무것도 표시되지 않습니다. ( –

+0

@JakubM. 제발 당신의 그림 코드를 보여주세요. – datenwolf

+0

@datenwolf : 여기 있습니다! 당신이 도울 수 있기를 바랍니다. 나는 swapBuffers와 glFlush를 사용하거나 사용하지 않고 시도했습니다. –

관련 문제