ulm*_*ngt 17 opengl optimization shader glsl jogl
我感兴趣的是关于速度的信息sin()
,并cos()
在Open GL的着色语言.
所述GLSL规范文献表明:
内置功能基本上分为三类:
- ...
- ...
- 它们代表一种操作图形硬件可能在某些时候加速.三角函数属于这一类.
编辑:
正如已经指出的那样,像计算单个操作的时钟周期sin()
,并cos()
没有真正告诉整个故事的性能.
因此,为了澄清我的问题,我真正感兴趣的是,是否值得优化sin()
并cos()
呼吁常见案例.
例如,在我的应用程序中,参数将是非常常见的0
.这样的事情是否有意义:
float sina, cosa;
if ( rotation == 0 )
{
sina = 0;
cosa = 1;
}
else
{
sina = sin( rotation );
cosa = cos( rotation );
}
Run Code Online (Sandbox Code Playgroud)
或将GLSL
编译器或sin()
与cos()
实现照顾优化像我吗?
Nic*_*las 17
例如,在我的应用程序中,参数为0非常常见.所以这样的事情是有意义的:
没有.
您的编译器将执行以下两种操作之一.
一般来说,使用条件逻辑围绕这样的小性能跳舞并不是一个好主意.它需要非常大才有价值,比如某种discard
东西.
另外,请注意浮点等效性不太可能.除非你实际上将一个包含0.0的统一或顶点属性传递给着色器.即使在0和非零之间插值,也可能永远不会为任何片段精确地产生0.
你必须自己测试一下,但我很确定着色器中的分支比计算sin
或者cos
计算要昂贵得多.GLSL编译器非常适合优化着色器,担心这是过早的优化.如果您后来发现,通过整个程序,着色器是瓶颈,那么您可以担心优化它.
如果您想查看特定平台的着色器的汇编代码,我建议使用AMD GPU ShaderAnalyzer.