gpt4 book ai didi

OpenGL Shader 阻止优化器移除属性/制服

转载 作者:行者123 更新时间:2023-12-01 01:16:02 34 4
gpt4 key购买 nike

有什么方法可以防止着色器编译器删除它检测到未使用的统一/属性?我偶尔会注释掉我的着色器的一部分进行测试,但这会导致我程序的其余部分出现问题,因为突然某些名称不再存在(从而导致查找错误,并在尝试设置值时出错)。

最佳答案

不,但这不是绝对必要的,具体取决于您编写代码的方式。
glUniform*函数将很高兴地采用统一的 -1 位置。如果您使用的是 program_pack420 和 explicit_attrib_location,您可以将属性索引、片段着色器输出、UBO 绑定(bind)和纹理单元绑定(bind)都放在着色器中。因此,您不必查询事件属性、输出、统一 block 或采样器。

请注意,我们还有 ARB_explicit_uniform_location在 GL 4.3 中。所以你可以在着色器中指定它们,它们不会被优化掉。

The rest of the program needs that attribute to work, otherwise it'd be littered with a bunch of if statements -- which I'm trying to avoid.



您遇到这种情况的唯一原因是您自己没有提供 OpenGL 属性索引,无论是使用explicit_attrib_location 还是使用调用 glBindAttribLocation。预链接。那是糟糕的编码,你不应该那样做。

总是告诉 OpenGL 你的属性位置是什么。除非您正在编写着色器内省(introspection)工具,否则您永远不应该查询它们。

关于OpenGL Shader 阻止优化器移除属性/制服,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050681/

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