我正在开发的 OpenGL / GLES 应用程序上出现一个奇怪的错误。在特定设备( Samsung Galaxy S8 )上,如果将stride参数设置为 18 个字节,似乎glVertexAttribPointer
会导致乱码。如果我向每个组件添加两个字节的填充(总共 20 个字节),这些杂乱无章的东西就会消失。
请注意,无论如何都不会触发glGetError
。
此错误在我测试过的任何其他移动设备上都不会发生,在运行常规 OpenGL 的Windows计算机上也不会发生。
我的猜测是,跨度必须是四个字节的倍数,但是我似乎找不到任何证明这一点的文档。
有人知道stride参数是否对设备有特定要求吗?
(这18个字节由三个 float32 和三个 int16_t = 3 * 4bytes + 3 * 2字节组成)
答案 0 :(得分:2)
规范要求的跨度 是否对齐为4个字节?不。
是否存在实际上有效满足此要求的硬件?是的,Vulkan具有此要求这一事实证明了这一点。因此,您应该避免数据未对齐。