gpt4 book ai didi

c++ - 基于uniform int在GLSL中声明数组

转载 作者:行者123 更新时间:2023-11-28 06:15:07 33 4
gpt4 key购买 nike

在我编写的程序中,我必须生成多个光源并将其传递给着色器。由于此数字是在着色器外部定义的,因此我想通过 uniform int 传递它并使用它来声明数组大小。

uniform int numLights;
uniform vec4 ambientColor;
uniform vec4 specularColor;
uniform vec3 diffuseColor[numLights];
uniform vec3 vLightPosition[numLights];

但是,我现在遇到了很多错误:

enter image description here

我做不到吗?问题是,我正在考虑更改预定义灯光数量的可能性,并忘记更新着色器,例如。我试图阻止这种情况发生。

最佳答案

GLSL 遵循 C 规则,数组大小必须在编译时已知。

GLSL 有一个预处理器,但除了源代码之外无法提供预处理器值。因此,您需要生成合适的 #define 语句作为字符串,并将它们提供给 glShaderSource,然后再为该着色器提供源 - 调用 glShaderSource 在编译之前累积传递给它们的所有文本,这样就相当于在源文件中添加额外的字符串前缀。

每次更改灯的数量时,您都需要重新编译,而不仅仅是提供 uniform 。

关于c++ - 基于uniform int在GLSL中声明数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465498/

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