Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在cpp代码中访问着色器的结构变量?_C++_Opengl_Struct_Glsl - Fatal编程技术网

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通常意味着由于未使用统一,着色器优化器将其删除。确保着色器的结果在某种程度上取决于均匀性。