gpt4 book ai didi

GLSL可重用/共享函数,共享常量(OpenGL ES 2.0)?

转载 作者:行者123 更新时间:2023-12-03 18:33:39 26 4
gpt4 key购买 nike

短的:

我可以定义每个着色器都可以使用的功能吗?
还是我必须为每个着色器定义它?

整个故事:

  • 我想创建许多着色器,以使用预定义的渐变坡度为输入片段着色(类似于http://www.thinkboxsoftware.com/storage/krakatoa-support-images/krakatoa15_kcm_densitybyage_gradientrampmap.png)。
  • 我想为每个着色器定义一个渐变渐变常量(一系列vec4颜色样本,其中alpha值保留渐变位置,请参见上图中的Pos)
  • 而且我需要一个函数,它可以从给定的渐变坡度返回特定纹理坐标位置的颜色样本。

  • 因此,需要为每个着色器定义一次斜坡,由 定义渐变,并且应同时为每个着色器安全使用的所有定义函数

    我有算法,问题在于共享函数,并在GLSL中定义常量。

    这可能吗?
    还是我必须将功能复制到每个着色器中?至少有一些预编译选项吗?

    最佳答案

    您可以像在C中那样进行操作-您可以在 header 中声明函数,然后在通用C文件中对其进行定义。

    在GLSL中,您需要执行以下操作:

    在您定义函数的某些着色器(字符串)中的

  • (我们将其称为COMMON):
    float getCommonValue() { return 42; }
  • 您要使用此函数的所有着色器中的
  • 只声明并使用它(将其称为SHADER1):
    float getCommonValue();
    void main() { gl_Color = vec4(getCommonValue(), 0, 0, 0); }
  • 使用glCompileShader编译着色器时,您只编译一次COMMON着色器,并将着色器GLuint存储在
  • 某个地方
  • 当您为SHADER1的glLinkProgram链接程序时,您将同时使用glAttachShader的两个着色器附加到程序-COMMON和SHADER1。这样,您就可以从一个着色器到另一个着色器调用getCommonValue函数。
  • ,您可以为不同的sahder程序(SHADER1,SHADER2等)多次重用COMMON着色器GLuint值。
  • 关于GLSL可重用/共享函数,共享常量(OpenGL ES 2.0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464022/

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