2016-09-01 2 views
1

이 코드는 레거시 OpenGL 3.0에서 정상적으로 작동하지만 포워드 호환 모드 (설치시 4.1 및 3.3)에서는 실패합니다. 필자는 하드웨어와 소프트웨어 구현을 테스트했습니다. OpenGL 컨텍스트를 얻으려면 SDL을 사용하고 일부 기능을 찾으려면 GLEW를 사용합니다. 아래 코드를 내 코드에 추가하면 문제가 발생합니다.OpenGL 3.0 glVertexAttribPointer : 레거시 작동, 포워드 호환 (코어)이 없음

SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG); 

코드의 문제가있는 부분은

glBindBuffer(GL_ARRAY_BUFFER, glb.vbo); 
glBufferData(
    GL_ARRAY_BUFFER, 
    size * sizeof(GLfloat), 
    input, 
    GL_DYNAMIC_DRAW 
); 
test_gl_errors(); /* GL_NO_ERROR */ 

glUseProgram(glb.program); 
glEnableVertexAttribArray(glb.vert_array); 
glEnableVertexAttribArray(glb.colour_array); /* I use this later. */ 

test_gl_errors(); /* GL_NO_ERROR */ 
glVertexAttribPointer(
    glb.vert_array, 
    2, 
    GL_FLOAT, 
    GL_FALSE, 
    5 * sizeof(GLfloat), 
    0 
); 
test_gl_errors(); /* GL_INVALID_OPERATION */ 
내가 더 많은 코드를 추가 할

을 glVertexAttribPointer하는 전화이지만, 물건을 많이가있다. 아래 링크에서 정보를 읽는 것이 도움이되지 않았습니다. 어떤 제안? https://www.opengl.org/sdk/docs/man/html/glVertexAttribPointer.xhtml


내 OpenGL을 설정 :

  • AMD 카보 베르데에 갈륨 0.4 (DRM 2.45.0/4.7.2-1-CK, LLVM 3.8.1) llvmpipe에
  • 갈륨 0.4 (LLVM 3.8, 128 비트)
  • Mesa3D : 12.0.1
+0

전화 할 때 VAO 바운드가 있습니까? 이들은 핵심 프로파일에 필요합니다. –

+0

@RetoKoradi 코드를 더 추가했습니다. – Michas

+1

아직도 VAO가 보이지 않습니다. 이 전에는'glGenVertexArray()'와'glBindVertexArray()'가 있어야합니다. –

답변

1

작업 코드, 레토 Koradi 의견에 따라.

glBindVertexArray(GL_ARRAY_BUFFER, glb.vao); /* <-- NEW !!! */ 
glBindBuffer(GL_ARRAY_BUFFER, glb.vbo); 
glBufferData(
    GL_ARRAY_BUFFER, 
    size * sizeof(GLfloat), 
    input, 
    GL_DYNAMIC_DRAW 
); 

glUseProgram(glb.program); 
glEnableVertexAttribArray(glb.vert_array); 

glVertexAttribPointer(
    glb.vert_array, 
    2, 
    GL_FLOAT, 
    GL_FALSE, 
    5 * sizeof(GLfloat), 
    0 
); 
test_gl_errors(); /* GL_NO_ERROR */ 
관련 문제