gpt4 book ai didi

iphone - 将变量传递给 OpenGL GLSL 着色器

转载 作者:行者123 更新时间:2023-12-03 18:14:37 25 4
gpt4 key购买 nike

我正在编写一个 iPhone 应用程序,它使用 GLSL 着色器对纹理执行转换,但我遇到一点困难是将变量传递给我的 GLSL 着色器。

我了解到着色器可以读取 OpenGL 状态的一部分(并且我只需要对此变量进行只读访问),但我不确定这种交换是如何发生的。

简而言之,我试图获取在片段着色器外部创建的浮点值,以便片段着色器可以访问它(无论是传入着色器还是从着色器内部读取)。

感谢您提供的任何帮助/指示,非常感谢!

最佳答案

一种选择是通过统一变量传递信息。

之后

glUseProgram(myShaderProgram);

你可以使用

GLint myUniformLocation = glGetUniformLocation(myShaderProgram, "myUniform");

例如

glUniform1f(myUniformLocation, /* some floating point value here */);

在顶点或片段着色器中,您需要添加以下声明:

uniform float myUniform;

就是这样,在着色器中,您现在可以访问(只读)之前通过 glUniform1f 传递的值。

当然,统一变量可以是任何有效的 GLSL 类型,包括复杂类型,例如作为数组、结构体或矩阵。 OpenGL 提供了带有常用后缀的 glUniform 函数,适合每种类型。例如,要分配给 vec3 类型的变量,可以使用glUniform3fglUniform3fv

注意:在着色器执行期间(即在 glBegin/glEnd block 中)无法修改该值。它是只读的,并且对于处理的每个片段/顶点都是相同的。

还有一些使用制服的教程,您可以通过谷歌搜索“glsl制服变量”找到它们。

关于iphone - 将变量传递给 OpenGL GLSL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226578/

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