数组数组的opengl glUniform(ARB_arrays_of_arrays)

时间:2018-05-14 10:36:45

标签: c++ c opengl

如果我有一个看起来像这样的片段着色器:

#version 450

#define MAX_NUM_LIGHTS 10
#define NUM_CASCADES 6
uniform sampler2D depthMap[NUM_CASCADES][MAX_NUM_LIGHTS];

...

如何通过glUniform...将c ++程序中的值发送到着色器? 如果我只是:

#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);

glUniform1iv不适用于多维数组,我找不到适合此处的函数:https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glUniform.xml或:https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_arrays_of_arrays.txt

1 个答案:

答案 0 :(得分:3)

OpenGL中的数组数组就像结构数组一样。这意味着每个数组数组都具有单独的统一位置,因此具有单独的名称。但是,一旦你得到一个基本类型的数组,它就像一个基本类型的常规数组:你可以将很多值倒入该数组的第一个位置。

在你的情况下,你有6件制服,名为“depthMap [0]”到“depthMap [5]”。每个都是一个10元素阵列。