c++ - 用于数组数组的 opengl glUniform (ARB_arrays_of_arrays)
问题描述
如果我有一个看起来像这样的片段着色器:
#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或:https://www .khronos.org/registry/OpenGL/extensions/ARB/ARB_arrays_of_arrays.txt
解决方案
OpenGL 中的数组数组就像结构数组一样工作。这意味着每个数组数组都有一个单独的统一位置,因此有一个单独的名称。然而,一旦你得到一个基本类型的数组,它就像一个普通的基本类型数组:你可以将大量的值放入该数组的第一个位置。
在您的情况下,您有 6 个制服,分别命名为“depthMap[0]”到“depthMap[5]”。每一个都是一个 10 元素的数组。
推荐阅读
- amazon-web-services - AWS NAT 网关
- reactjs - redux 与 nextjs 中的 getServerSideProps 连接
- python - NoSuchElementException in selenium while making Instagram bot
- php - 每创建 3 列后添加一个新行
- node.js - discord.js v13 TypeError:无法读取未定义的属性“createMessageCollector”
- android-jetpack-compose - jetpack compose navController popBackStack 多页
- python - Python解析用户输入的方式与CLI输入相同吗?
- python - How to tell exactly how much of an audio is left with python-vlc?
- css - How to make Image gallery Layout like Pexels.com?
- php - how to parse GNU Screen session list?