我正在尝试创建一个OpenGL ES 2.0片段着色器,它可以沿着一个轴输出多个停止渐变。它应该在以百分比定义的点上插入多种颜色。如何创建多个停止渐变片段着色器?
我用if
S中的片段着色器,这样实现的:
float y = gl_FragCoord.y;
float step1 = resolution.y * 0.20;
float step2 = resolution.y * 0.50;
if (y < step1) {
color = white;
} else if (y < step2) {
float x = smoothstep(step1, step2, y);
color = mix(white, red, x);
} else {
float x = smoothstep(step2, resolution.y, y);
color = mix(red, green, x);
}
他们说,在片段着色器分支可以杀死性能。是否有一些巧妙的技巧可以用来在不使用if
的情况下插入许多值?它是否真的值得(这是非常主观的,我知道,但作为经验法则)?
为了说明这个GLSL沙盒的链接我的问题,完整的源代码(仍低于虽然):http://glsl.heroku.com/e#8035.0
据我所知,GPU上的所有内核都期望在同一时间执行相同的操作。如果您有分支机构,那么存在不同内核需要执行不同操作的风险,因此有些内核会被有效阻塞。这是杀死性能的原因。在着色器中避免分支确实是一种好的做法。 – 2015-04-20 19:16:46