layout(row_major)不会影响结构

时间:2015-05-16 00:17:09

标签: opengl glsl

我最近发现了一个奇怪的问题。我希望我的所有矩阵都是行主,所以我在着色器中指定layout(row_major) uniform;一次。只要矩阵直接在统一块中声明,这就可以工作:

layout(row_major) uniform;
uniform Constants
{
    mat4 WorldViewProj; // Row-major - OK
}g_Constants;

但如果WorldViewProj是结构的成员,则它按列主要顺序存储:

layout(row_major) uniform;
strct Struct
{
    mat4 WorldViewProj;
};
uniform Constants
{
    Struct Str; // Now WorldViewProj is column-major!
}g_Constants;

另一方面,如果我在块声明之前另外指定layout(row_major),则矩阵存储正确:

layout(row_major) uniform;
layout(row_major) uniform Constants
{
    Struct Str; // WorldViewProj is row-major again
}g_Constants;

我只在NVidia H / W上看到这个问题,在Intel GPU上一切正常(我没试过AMD)。这是一个错误还是我再次错过了一些纠结的OpenGL规范?

0 个答案:

没有答案