gpt4 book ai didi

opengl - 如何将常量数据发送到着色器?

转载 作者:行者123 更新时间:2023-12-05 06:42:09 25 4
gpt4 key购买 nike

我想将 const int 变量从 CPU 端发送到着色器,以便我可以方便地在着色器中初始化数组。

但是如果使用通常的 glUniform1ui(programm, N) 发送,着色器编译器会说 N 必须是常量。

#version 450 core
uniform const int N;
int myArray[N];

void main() {
//...
}

这可能吗?如果是,解决方法是什么?

p.s.我知道这与统一变量的定义无关,统一变量的定义阐明了每个着色器执行的统一是不可变的

最佳答案

常量顾名思义就是常量,不能通过 glUniform 方法之一从外部更改,它不是统一的。

如果要更改常量值,则必须重新编译孔着色器并更改之前的着色器文本。

示例(伪代码)

GLchar** shaderSources = new GLChar*[3];
shaderSources[0] = "#version 450 core\n";
shaderSources[1] = "#define ARRAY_LENGTH 5\n";
shaderSources[2] = myShaderCode;
glShaderSource(shader, 2, shaderSources, LENGTH_OF_EACH(shaderSources, 2));

着色器:

int myArray[ARRAY_LENGTH];
void main()
{
for (int i = 0; i < ARRAY_LENGTH; i++) myArray[i] ....;
}

另一种方法是使用纹理(或 SSBO)而不是数组,并获取纹理的值而不在值之间进行插值。

关于opengl - 如何将常量数据发送到着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38281731/

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