首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数组的opengl glUniform (ARB_arrays_of_arrays)

用于数组的opengl glUniform (ARB_arrays_of_arrays)
EN

Stack Overflow用户
提问于 2018-05-14 10:36:44
回答 1查看 456关注 0票数 1

如果我有这样的碎片着色器:

代码语言:javascript
复制
#version 450

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

...

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

代码语言:javascript
复制
#define MAX_NUM_LIGHTS 10

uniform sampler2D depthMap[MAX_NUM_LIGHTS];
...

我会这样做:

代码语言:javascript
复制
...
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-14 13:47:12

OpenGL中的数组就像结构数组一样工作。这意味着每个数组都有一个单独的统一位置,因此有一个单独的名称。但是,一旦您深入到基本类型的数组中,它就像一个常规的基本类型数组:您可以向该数组的第一个位置注入大量的值。

在您的例子中,您有6套制服,通过"depthMap“和"depthMap5”命名为“depthMap5”。其中每一个都是一个10元素数组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50328276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档