Ger*_*eri 10 glsl fragment-shader opengl-es-2.0
短:
我可以定义每个着色器可以使用的函数吗?或者我必须为每个着色器定义它?
整个故事:
我想创建许多着色器,用于使用预定义的渐变斜坡着色输入片段(类似于这样 - http://www.thinkboxsoftware.com/storage/krakatoa-support-images/krakatoa15_kcm_densitybyage_gradientrampmap.png).
我想为每个着色器定义一个渐变渐变常数(一个vec4颜色样本数组,其中alpha值保持渐变位置,请参见上图中的Pos)
我需要一个函数,可以从给定的渐变斜坡返回特定纹理坐标位置的颜色样本.
因此,坡道必须每个着色器定义一次,并且功能应该界定一次性每个着色器可以放心地使用.
我有算法,问题是共享函数,并在GLSL中定义常量.
这可能吗?或者我必须将函数复制到每个着色器?至少有一些预编译选项吗?
Mār*_*iko 15
你可以像在C中那样做 - 你在头文件中声明函数并在公共C文件中定义它.
在GLSL中,您需要执行以下操作:
在一些着色器(字符串)中定义函数(让我们称之为COMMON):
float getCommonValue() { return 42; }
Run Code Online (Sandbox Code Playgroud)在你想使用这个函数的所有着色器中你只声明它并使用它(让我们称之为SHADER1):
float getCommonValue();
void main() { gl_Color = vec4(getCommonValue(), 0, 0, 0); }
Run Code Online (Sandbox Code Playgroud)在编译着色glCompileShader器时,只编译一次COMMON着色器并将着色器GLuint存储在某处
当您将程序与glLinkProgramSHADER1 链接时,您将使用glAttachShader两个着色器 - COMMON和SHADER1 附加到程序.因此,您将能够getCommonValue从一个着色器调用函数到另一个着色器.
您可以为不同的sahder程序(SHADER1,SHADER2,...)多次重用COMMON着色器GLuint值.
| 归档时间: |
|
| 查看次数: |
2529 次 |
| 最近记录: |