GLubyte和GL_UNSIGNED_BYTE之间有区别吗?

时间:2012-10-13 15:53:53

标签: objective-c opengl opengl-es

我使用以下代码渲染交错的vbo,效果很好。

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

当我更改glColorPointer的指针参数以使用 GLubyte 时,我看不到屏幕上呈现的任何内容?我在我的结构中也将颜色定义为GLubyte。

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

2 个答案:

答案 0 :(得分:11)

GLubyte是一种类型。 GL_UNSIGNED_BYTE是一个整数常量,通常用于表示您将在指针中传递GLubyte

根据定义,

sizeof(GLubyte)始终为1。取sizeof(GL_UNSIGNED_BYTE)通常会返回4或8,因为它是一个整数常量,并且具有系统整数大小的大小。

答案 1 :(得分:2)

GL_UNSIGNED_BYTE是符号const,而GLubyte是一种类型。 GLubyte通常被实现为unsigned char的typedef;您可以通过查看gl.h

来确认这一点

您应该在OpenGL方法中使用GL_UNSIGNED_BYTE来指定传递的数据类型,并使用GLubyte来计算数据大小。