Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GLSL自动优化_Opengl_Glsl_Shader_Fragment Shader_Vertex Shader - Fatal编程技术网

Opengl GLSL自动优化

Opengl GLSL自动优化,opengl,glsl,shader,fragment-shader,vertex-shader,Opengl,Glsl,Shader,Fragment Shader,Vertex Shader,我有三个问题与GLSL自动优化(?)过程有关 未使用的变量->Is glsl删除不影响最终片段着色器像素(out变量)的所有变量 未使用的函数->是否glsl在void main…?之前删除所有未使用的定义函数 那么输入输出变量呢。例如:我有100个着色器,它们将纹理坐标从顶点着色器发送到片段着色器。在片段着色器中,这些坐标对最终颜色没有影响。glsl会删除此变量吗 这一点没有明确规定。OpenGL规范规定: 见: 7.6统一变量 着色器可以声明命名的统一变量,如OpenGL着色语言规范中所述。

我有三个问题与GLSL自动优化(?)过程有关

  • 未使用的变量->Is glsl删除不影响最终片段着色器像素(out变量)的所有变量

  • 未使用的函数->是否glsl在void main…?之前删除所有未使用的定义函数

  • 那么输入输出变量呢。例如:我有100个着色器,它们将纹理坐标从顶点着色器发送到片段着色器。在片段着色器中,这些坐标对最终颜色没有影响。glsl会删除此变量吗


  • 这一点没有明确规定。OpenGL规范规定:

    见:

    7.6统一变量

    着色器可以声明命名的统一变量,如OpenGL着色语言规范中所述。如果编译器和链接器确定在执行可执行代码时将实际访问统一,则统一被视为活动统一。如果编译器和链接器无法做出结论性决定,则统一将被视为有效

    见:

    7.3.1程序接口

    当程序对象成为当前呈现状态的一部分时,其可执行代码可以通过各种接口与其他GL管道阶段或应用程序代码通信。链接程序时,GL会为每个界面构建活动资源列表。活动资源的示例包括着色器代码使用的变量、接口块和子例程。着色器代码中引用的资源被视为活动资源,除非编译器和链接器能够最终确定它们对程序可执行代码生成的结果没有明显影响。例如,变量可能被认为是非活动的,如果它们被声明但未在可执行代码中使用,仅在永远不会执行的if语句的子句中使用,仅在永远不会调用的函数中使用,或仅在对任何着色器输出没有影响的临时变量的计算中使用。在编译器或链接器无法做出结论性决定的情况下,着色器代码引用的任何资源都将被视为活动资源。任何接口的活动资源集都依赖于实现,因为它依赖于编译器和链接器执行的各种分析和优化

    如果程序链接成功,GL将根据链接生成的可执行代码生成活动资源列表


    着色器编译器是特定于实现的,规范往往会留下类似这样的模糊细节,以允许实现采用最有效的策略。我认为答案是:1。几乎肯定是2。几乎可以肯定。3.可能吧。谢谢:D。有没有任何可能的方法可以查看活动资源?@Dragomirus您可以使用和来获取活动属性和活动制服。