glVertexAttribPointer和跨度参数要求

时间:2018-06-20 13:27:30

标签: opengl opengl-es samsung-galaxy stride

我正在开发的 OpenGL / GLES 应用程序上出现一个奇怪的错误。在特定设备( Samsung Galaxy S8 )上,如果将stride参数设置为 18 个字节,似乎glVertexAttribPointer会导致乱码。如果我向每个组件添加两个字节的填充(总共 20 个字节),这些杂乱无章的东西就会消失。

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

规范要求的跨度 是否对齐为4个字节?不。

是否存在实际上有效满足此要求的硬件?是的,Vulkan具有此要求这一事实证明了这一点。因此,您应该避免数据未对齐。