2016-09-06 2 views
0

OpenVDB를 사용하려고합니다 & 뷰어 저는 뷰어를 사용하여 openvdb 파일을보고 싶습니다. 일부 뷰어 함수는 OpenGL 함수를 사용하여 OpenGL 오류를 반환합니다.openvdb viewer & opengl

아래는 ovenvdb 뷰어 및 해당 오류 메시지의 실행입니다.

C:\Users\user\Documents\Visual Studio 2013\Projects\openvdb_test\Debug>openvdb_test.exe armadillo.vd 
b -i 
ls_armadillo (1276 x 1519 x 1160 voxels) 
Glew init (Windows) 
INFO vertex sizes 2934312 
INFO sizeof(GLfloat) 4 
error genvertexbuffer 1281 
openvdb_test.exe: Error: Unable to upload vertex buffer data 

C:\Users\user\Documents\Visual Studio 2013\Projects\openvdb_test\Debug> 

그리고 이것은 오류 메시지를 보여주는 openvdb 뷰어의 RenderModules에있는 기능입니다. 디버깅을 위해 몇 줄을 추가했습니다.

BufferObject::genVertexBuffer(const std::vector<GLfloat>& v) 
{ 
    if (glIsBuffer(mVertexBuffer) == GL_TRUE) glDeleteBuffers(1, &mVertexBuffer); 

    glGenBuffers(1, &mVertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer); 
    if (glIsBuffer(mVertexBuffer) == GL_FALSE) throw "Error: Unable to create vertex buffer"; 
    printf("INFO vertex sizes %d \n", v.size()); 
    printf("INFO sizeof(GLfloat) %d \n", sizeof(GLfloat)); 
    int size = sizeof(GLfloat) * v.size(); 
    glBufferData(GL_ARRAY_BUFFER, size, &v[0], GL_STATIC_DRAW); 
    GLenum err=glGetError(); 
    if (GL_NO_ERROR != err) 
    { 
     printf("error genvertexbuffer %d\n", err); 
     throw "Error: Unable to upload vertex buffer data"; 
    } 

    glBindBuffer(GL_ARRAY_BUFFER, 0); 
} 

저는 OpenGL 오류 # 1281이 잘못된 크기 값이라는 것을 알고 있습니다. 그러나 꼭지점의 크기는 음수 값이 아니며 다른 args도 나에게 잘 들립니다.

나는 무엇인가 놓쳤는가?

+2

이전 OpenGL 호출의 오류 값이 표시 될 수 있습니다. OpenGL 오류 "스택". 누적되었을 수있는 모든 오류를 검색하기 위해'GL_NO_ERROR'를 반환 할 때까지 루프에서'glGetError'를 호출해야합니다 (예, 사람들이 nitpick을 가지거나, 이전 OpenGL 버전의 클라이언트/서버 아키텍처 때문이거나, 그렇지 않은 경우 ; 어느 쪽이든 루프에서 호출해야합니다). 또한 이전에 glGetError를 호출해야합니다. oyu가 버퍼 이름 생성 또는 바인딩을 알고있는 경우 실패했을 수 있습니다. – datenwolf

답변

1

은 그냥 정점 색상 실패 나에게

do { 
    glIsBuffer(mVertexBuffer); 
} while (glGetError() != GL_NO_ERROR); 

에 의해

if (glIsBuffer(mVertexBuffer) == GL_FALSE) throw "Error: Unable to create vertex buffer"; 

을 변경, 지금은 작동합니다.

+0

처음에는 대답 해 주셔서 감사합니다. 불행히도,이 질문은 오랜 옛날에 작성되었습니다, 나는 openvdb 사용을 중단했습니다. 그래서 당신의 솔루션을 시도 할 수 없습니다. 그러나 일부 다른 사람들에게는 삭제하지 않고 그대로 두었습니다. – eclipse0922