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 有此要求这一事实所证明的那样。所以你应该避免未对齐的数据。
我在开发的 OpenGL/GLES 应用程序上遇到了一个奇怪的错误。在某个设备上(Samsung Galaxy S8),如果步幅参数设置为 18 字节,似乎 glVertexAttribPointer
会导致乱码。如果我向每个组件添加两个字节的填充(总共 20 个字节),那么乱码就会消失。
请注意,无论如何都不会触发 glGetError
。
这个错误没有出现在我测试过的任何其他移动设备上,也没有出现在我的 Windows 计算机 运行 常规 OpenGL 上.
我的猜测是步幅必须是四个字节的倍数,但我似乎找不到任何文档来验证这一点。
有人知道步幅参数是否有设备特定要求吗?
(18个字节由三个float32后跟三个int16_t = 3*4bytes + 3*2 bytes )
规范要求的步幅是否对齐到 4 个字节?编号
是否有硬件能够有效满足该要求?是的,正如 Vulkan 有此要求这一事实所证明的那样。所以你应该避免未对齐的数据。