C++ 如何在cpp代码中访问着色器的结构变量?
我在着色器文件中定义了一个结构:C++ 如何在cpp代码中访问着色器的结构变量?,c++,opengl,struct,glsl,C++,Opengl,Struct,Glsl,我在着色器文件中定义了一个结构: struct data_t{ float value; float baz[3]; } 然后我在同一着色器中声明了一个统一变量: uniform data_t data; 我的问题是,如何从cpp代码中为变量提供值 我尝试了和的解决方案,即访问方式如下: glGetUniformLocation(program, "data.value") layout (std140) uniform data_t{ float valu
struct data_t{
float value;
float baz[3];
}
然后我在同一着色器中声明了一个统一变量:
uniform data_t data;
我的问题是,如何从cpp代码中为变量提供值
我尝试了和的解决方案,即访问方式如下:
glGetUniformLocation(program, "data.value")
layout (std140) uniform data_t{
float value;
float baz[3];
}data;
它应该能用,但不行,我一直都是-1
我还尝试使用UBO,似乎只有在我声明如下时UBO才有效:
glGetUniformLocation(program, "data.value")
layout (std140) uniform data_t{
float value;
float baz[3];
}data;
那么,我应该如何准确地向他们提供来自cpp的值呢?这有帮助吗:?@xaxxon谢谢,但我肯定我没有为多个制服使用相同的名称,我确实尝试使用glUniform*更改值,但在此之前我需要获得制服的位置,对吗?这就是我要问的,我一直得到-1的位置。在你继续阅读之前,你可能想在你的书桌上放一些柔软的东西<代码>“data.value”@xaxxon对不起,这是一个打字错误…glGetUniformLocation中的-1通常意味着由于未使用统一,着色器优化器将其删除。确保着色器的结果在某种程度上取决于均匀性。