2012-10-13 237 views
2

我使用下面的代碼正常渲染交錯式vbo。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))); 

當我改變glColorPointer的指針paramater使用GLubyte我沒有看到呈現在屏幕上的東西嗎?我在我的結構中也將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來確認。

您應該在OpenGL方法中使用GL_UNSIGNED_BYTE來指定要傳遞的數據的類型,並使用GLubyte來計算數據的大小。

+0

'GLubyte'沒有被定義爲'unsigned char'的typedef。這是一個常見的實現,但OpenGL爲了某個原因添加了新類型,它具有另一個更具體的含義,而不是'unsigned char'。 C/C++在字體大小方面相當寬鬆,例如'OpenGL'不是。 – KillianDS

+0

你有沒有看過我在XCode中提到的gl.h,因爲GLubyte完全是這樣定義的:typedef unsigned char GLubyte;? – tiguero

+0

任何實現的gl.h都只是一個實現,它實際上是定義GLubyte的規範。例如,假設在某個平臺上char是2個字節以默認啓用UTF-16,那麼這將不是一個正確的typedef,並且這將會實現不同。 – KillianDS