我在开发的OpenGL / GLES应用程序上遇到了一个奇怪的错误。在某个设备(三星Galaxy S8)上,如果stride参数设置为18个字节,则glVertexAttribPointer
似乎会导致乱码。如果我为每个组件添加两个字节的填充(总共20个字节),则jibberish消失。
请注意,无论如何都不会触发glGetError
。
我测试过的任何其他移动设备上都不会出现此错误,也不会在运行常规OpenGL的Windows计算机上发生此错误。
我的猜测是步幅需要是多个四个字节,但我似乎无法找到任何验证这一点的文档。
有谁知道stride参数是否有设备特定要求?
(18个字节由三个float32后跟三个int16_t = 3 * 4bytes + 3 * 2个字节组成)
规范要求的步幅是否与4个字节对齐?没有。
有没有硬件有效地满足这个要求?是的,正如Vulkan有此要求所证明的那样。所以你应该避免错位的数据。