OpenGL ES着色器语言规范 10 常见问题(17-18)

目录

10.17  无尺寸的数组声明

10.18 不变性


10.17  无尺寸的数组声明

Desktop GLSL允许在没有大小的情况下声明数组,然后可以使用常量下标表达式访问这些数组。大小永远不需要声明。 这是为了支持gl_Texcoord,例如:

varying vec4 gl_TexCoord[];

...

gl_FragColor = texture2D (tex, gl_TexCoord[0].xy);

这允许使用gl_TexCoord而不必声明纹理单元的数量。

gl_TexCoord是固定功能的一部分,因此应该为GLSL ES删除无大小的数组。

A:删除无大小的数组声明。

 

10.18 不变性

如何处理着色器之间的不变性?

桌面GLSL版本1.10使用ftransform()来保证可以保证gl_Position在不同的顶点着色器中以相同的方式计算。这取决于已从ES中删除的固定功能。它也是非常严格的,因为它只允许基于矩阵的顶点变换。 它不适用于其他值,例如用于生成纹理坐标的值。

选项1:指定所有操作为不变的。 不,这太限制了。 对于某些实现,资源的最佳使用变得不可能。

选项2:向需要不变性的函数添加不变性限定符。 不,这不起作用,因为输出上的功能和操作的输入可能不是不变的。

选项3:向所有变量(包括着色器输出)添加不变性限定符。

A:向变量添加不变性限定符,但仅允许其用于顶点和片段着色器的输出。添加全局不变性选项,以便在需要完全不变性时使用。

 

是否应该在纹理函数的参数上使用不变性限定符?

许多算法依赖于两个或多个纹理完全对齐,无论是在着色器的单个调用内还是使用多通道技术。这可以通过对用作纹理函数的参数的变量使用不变限定符来保证。

使用全局不变性编译指示还可以保证纹理的对齐。目前尚不清楚是否允许更好地控制不变性在实践中是有用的。编译器可能会恢复到全局不变性,可能还有其他特定情况需要考虑。

A:使用变量作为纹理函数的参数并不意味着它可以被限定为不变量

 

顶点和片段着色器中的声明的不变性限定符是否需要匹配?

选项1:仅允许对顶点着色器中的易变变量进行不变性声明。 然后应该自动保证片段着色器中变化的不变性。

选项2:指定它们必须匹配。

A:不同声明的不变性限定符必须匹配。

 

如果声明易变变量但未使用,此规则是否适用?

A:是的,此规则适用于声明,与使用无。

 

此规则如何应用于内置特殊变量。

选项1:应与易变变量相同。 但是gl_Position在内部由光栅化器和gl_FragCoord使用,因此可能存在光栅化需要不变的情况,但gl_FragCoord不是。

选项2:当且仅当gl_Position和gl_PointSize合格为不变量时,gl_FragCoord和gl_PointCoord才能被限定为不变性。

 

版权:https://blog.csdn.net/flycatdeng/article/details/88652572

Android,OpenGL ES,图形学
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值