glVertexAttribPointer 和 stride 参数要求

glVertexAttribPointer and stride parameter requirements

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

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

这个错误没有出现在我测试过的任何其他移动设备上,也没有出现在我的 Windows 计算机 运行 常规 OpenGL 上.

我的猜测是步幅必须是四个字节的倍数,但我似乎找不到任何文档来验证这一点。

有人知道步幅参数是否有设备特定要求吗?

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

规范要求的步幅是否对齐到 4 个字节?编号

是否有硬件能够有效满足该要求?是的,正如 Vulkan 有此要求这一事实所证明的那样。所以你应该避免未对齐的数据。