2012-10-13 4 views
2

잘 작동하는 다음 코드를 사용하여 인터리브 된 vbo를 렌더링합니다. 내가 glColorPointer의 포인터 paramater이 GLubyte를 사용하도록 변경하면GLubyte와 GL_UNSIGNED_BYTE 사이에 차이점이 있습니까?

glVertexPointer(3, GL_FLOAT, sizeof(InterleavedVertexData), (GLvoid*)((char*)0)); 
    glNormalPointer(GL_FLOAT, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+3*sizeof(GLfloat))); 
    glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+6*sizeof(GL_UNSIGNED_BYTE))); 

내가 화면에 렌더링 아무것도 표시되지 않는 이유는 무엇입니까? 내 구조체에서 GLubyte로 색상을 정의하고있다.

glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(InterleavedVertexData), (GLvoid*)((char*)0+6*sizeof(GLubyte))); 

답변

10

GLubyte은 유형입니다. GL_UNSIGNED_BYTE은 포인터에 GLubyte을 전달한다는 의미로 사용되는 정수 상수입니다.

sizeof(GLubyte)은 항상 정의에 따라 1입니다. sizeof(GL_UNSIGNED_BYTE)은 일반적으로 정수 상수이고 시스템의 정수 크기가 무엇이든간에 크기가 있으므로 4 또는 8을 반환합니다.

2

GL_UNSIGNED_BYTE은 기호 상수이고 GLubyte은 유형입니다. GLubyte는 보통 unsigned char의 typedef로 구현됩니다. gl.h을보고이를 확인할 수 있습니다.

전달할 데이터 유형을 지정하고 GLubyte을 사용하여 데이터 크기를 계산하려면 OpenGL 메서드 내에서 GL_UNSIGNED_BYTE을 사용해야합니다.

+0

'GLubyte'는'unsigned char'의 typedef로 정의되지 않았습니다. 그것은 일반적인 암시이지만, OpenGL은 새로운 타입을 이유에 추가했습니다. 그것은 unsigned char보다 의미 있고 의미가 있습니다. C/C++는 타입의 크기면에서 꽤 편하다. OpenGL은 그렇지 않다. – KillianDS

+0

GLuby가 정확히이 방법을 정의하기 때문에 XCode에서 언급 한 gl.h를 보았습니까? typedef unsigned char GLubyte; – tiguero

+0

모든 구현의 gl.h는 단지 구현이며 실제로 GLubyte가 무엇인지 정의하는 스펙입니다. 예를 들어 특정 플랫폼에서 char이 기본적으로 UTF-16을 활성화하는 데 2 ​​바이트라고 가정하면 올바른 typedef가 아니며 다른 구현됩니다. – KillianDS

관련 문제