我尝试将一些数据vec3和mat3绑定到带有Vulkan中描述符集的着色器。但数据变得错误。我必须使用vec4和mat4。着色器中的数据是正确的。为什么?
答案 0 :(得分:-1)
这不是Vulkan特定的问题。这是一个GLSL问题。 为了优化代码(对齐等),编译器更喜欢处理128字节数据块。 因此,实际上不可能处理mat3。
但是,如果要使用数组vec3(例如在统一缓冲区中),可以在统一块中编写vec3 array[32];
,但必须在CPU端对齐128个字节。所以,我建议你在CPU端使用类似的东西:
vec4 myVec3[32]
;并且您将它用作vec3,因为w坐标将永远不会在着色器中使用...
您可以获得更多信息: https://learnopengl.com/#!Advanced-OpenGL/Advanced-GLSL https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt