我正在閱讀關於OpenGL和OpenGLES的教程,我對在這兩個API中使用函數glVertexAttribPointer
有點困惑。OpenGL和OpenGLES中的glVertexAttribPointer
在OpenGL教程這個函數使用最後一個參數的數值偏移量(通過強制轉換爲常量GLVoid *),我假設頂點直接取自當前的數組緩衝區。
glVertexAttribPointer(vs_position, 2, GL_FLOAT, GL_TRUE, 5 * sizeof(GLfloat), (const GLvoid*) (3*sizeof(GLfloat)));
在OpenGLES直接教程的最後一個參數指向代表頂點的結構:
GLFloat vertices[] = {...definition};
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
我無法理解這兩個函數是如何工作的。他們完全不同的功能?
完美的解釋!謝謝。 - 你從哪裏得到這些信息?我找不到有關這方面的文件。 - 你說OpenGL3.1而不使用內存客戶端對OpenGLEs 2.0也有效? – MatterGoal 2013-03-13 09:10:19
@MatterGoal:一般來說,應用程序總是使用客戶端內存或緩衝區對象。所以沒有人需要談論它們之間的差異。大部分的桌面OpenGL文檔都轉向了核心配置文件行爲,所以它也不會談論它。但是它正好在[GL ES的手冊頁](http://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttribPointer.xml)中。請閱讀說明的第二段。 – 2013-03-13 09:15:03
@MatterGoal:它也在[這個答案](http://stackoverflow.com/a/5402762/734069)中解釋了相關的問題。 – 2013-03-13 09:17:00