C++ 数组的数组(ARB_数组中的数组)的opengl glUniform
如果我有一个片段着色器,看起来像这样:C++ 数组的数组(ARB_数组中的数组)的opengl glUniform,c++,c,opengl,C++,C,Opengl,如果我有一个片段着色器,看起来像这样: #version 450 #define MAX_NUM_LIGHTS 10 #define NUM_CASCADES 6 uniform sampler2D depthMap[NUM_CASCADES][MAX_NUM_LIGHTS]; ... < >我如何通过C++程序将值从 GLUTIONE…发送给着色器? 如果我有: #define MAX_NUM_LIGHTS 10 uniform sampler2D depthMap[MAX_NUM_L
#version 450
#define MAX_NUM_LIGHTS 10
#define NUM_CASCADES 6
uniform sampler2D depthMap[NUM_CASCADES][MAX_NUM_LIGHTS];
...
< >我如何通过C++程序将值从<代码> GLUTIONE…<代码>发送给着色器?
如果我有:
#define MAX_NUM_LIGHTS 10
uniform sampler2D depthMap[MAX_NUM_LIGHTS];
...
我想这样做:
...
GLint tmp[MAX_NUM_LIGHTS];
for(GLint i = 0; i<MAX_NUM_LIGHTS; i++)
{
tmp[i] = 2+i; // all textures up to GL_TEXTURE1 are already bound.
glActiveTexture(GL_TEXTURE2+i);
glBindTexture(GL_TEXTURE_2D, depthMapID[i]);
}
glUniform1iv(model.depthMap_UniformLocation, MAX_NUM_LIGHTS, tmp);
。。。
闪烁tmp[最大数量灯光];
对于(GLint i=0;iOpenGL中数组的工作方式类似于结构数组。这意味着每个数组都有一个单独的统一位置,因此有一个单独的名称。但是,一旦你开始研究基本类型的数组,它就像一个基本类型的常规数组:你可以将大量的值注入该数组的第一个位置。
在您的例子中,有6种制服,分别命名为“depthMap[0]”到“depthMap[5]”。每种制服都是一个10元素数组