glVertexAttribPointer和stride参数要求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了glVertexAttribPointer和stride参数要求相关的知识,希望对你有一定的参考价值。

我在开发的OpenGL / GLES应用程序上遇到了一个奇怪的错误。在某个设备(三​​星Galaxy S8)上,如果stride参数设置为18个字节,则glVertexAttribPointer似乎会导致乱码。如果我为每个组件添加两个字节的填充(总共20个字节),则jibberish消失。

请注意,无论如何都不会触发glGetError

我测试过的任何其他移动设备上都不会出现此错误,也不会在运行常规OpenGL的Windows计算机上发生此错误。

我的猜测是步幅需要是多个四个字节,但我似乎无法找到任何验证这一点的文档。

有谁知道stride参数是否有设备特定要求?

(18个字节由三个float32后跟三个int16_t = 3 * 4bytes + 3 * 2个字节组成)

答案

规范要求的步幅是否与4个字节对齐?没有。

有没有硬件有效地满足这个要求?是的,正如Vulkan有此要求所证明的那样。所以你应该避免错位的数据。

以上是关于glVertexAttribPointer和stride参数要求的主要内容,如果未能解决你的问题,请参考以下文章

GLES2.0 上的 VBO glDrawElements 和 glVertexAttribPointer 不显示任何内容

glVertexAttribPointer和stride参数要求

glVertexAttribPointer() - 啥时候应该调用它?

glVertexAttribPointer 出现 JOGL 错误

C++学习(三一零)glEnableVertexAttribArray和glVertexAttribPointer的顺序关系

openGL之API学习(一八八)glVertexAttribPointer和glVertexPointer