Chr*_*van 34 iphone opengl-es glsl
我正在编写一个iPhone应用程序,它使用GLSL着色器对纹理进行转换,但有一点,我有点困难的是将变量传递给我的GLSL着色器.
我已经读过,可以让着色器读取OpenGL状态的一部分(我只需要对此变量进行只读访问),但我不确定该交换是如何发生的.
简而言之,我试图获得在片段着色器之外创建的浮点值,以便片段着色器可以访问(无论是传入还是从着色器内部读取).
感谢您提供的任何帮助/指示,非常感谢!
Gre*_*g S 62
一种选择是通过统一变量传递信息.
后
glUseProgram(myShaderProgram);
Run Code Online (Sandbox Code Playgroud)
您可以使用
GLint myUniformLocation = glGetUniformLocation(myShaderProgram, "myUniform");
Run Code Online (Sandbox Code Playgroud)
例如
glUniform1f(myUniformLocation, /* some floating point value here */);
Run Code Online (Sandbox Code Playgroud)
在顶点或片段着色器中,需要添加以下声明:
uniform float myUniform;
Run Code Online (Sandbox Code Playgroud)
就是这样,在着色器中,您现在可以访问(只读)先前通过的值glUniform1f
.
当然,统一变量可以是任何有效的GLSL类型,包括复杂类型,例如数组,结构或矩阵.OpenGL提供了一个glUniform
具有通常后缀的函数,适用于每种类型.例如,要分配给类型的变量vec3
,可以使用glUniform3f
或glUniform3fv
.
注意:在执行着色器期间,即在glBegin
/ glEnd
块中,不能修改该值.它是只读的,对于处理的每个片段/顶点都是相同的.
还有一些使用制服的教程,你可以通过谷歌搜索"glsl uniform variable"找到它们.
我希望有所帮助.
归档时间: |
|
查看次数: |
18947 次 |
最近记录: |