gpt4 book ai didi

c++ - 用于数组数组的 opengl glUniform (ARB_arrays_of_arrays)

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:41 25 4
gpt4 key购买 nike

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

#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

最佳答案

OpenGL 中数组的数组就像结构数组一样工作。这意味着数组的每个数组都有一个单独的统一位置,因此有一个单独的名称。然而,一旦你深入到一个基本类型数组,它就像一个普通的基本类型数组:你可以将很多值倒入该数组的第一个位置。

在您的例子中,您有 6 个制服,分别命名为“depthMap[0]”到“depthMap[5]”。其中每一个都是一个 10 元素数组。

关于c++ - 用于数组数组的 opengl glUniform (ARB_arrays_of_arrays),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50328276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com