如果我有这样的碎片着色器:
#version 450
#define MAX_NUM_LIGHTS 10
#define NUM_CASCADES 6
uniform sampler2D depthMap[NUM_CASCADES][MAX_NUM_LIGHTS];
...如何通过c++程序通过glUniform...向着色器发送值?如果我只是:
#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或:arrays.txt
发布于 2018-05-14 13:47:12
OpenGL中的数组就像结构数组一样工作。这意味着每个数组都有一个单独的统一位置,因此有一个单独的名称。但是,一旦您深入到基本类型的数组中,它就像一个常规的基本类型数组:您可以向该数组的第一个位置注入大量的值。
在您的例子中,您有6套制服,通过"depthMap“和"depthMap5”命名为“depthMap5”。其中每一个都是一个10元素数组。
https://stackoverflow.com/questions/50328276
复制相似问题