GLSL隔行扫描。
|
我想使用GLSL在隔行扫描模式下有效渲染。
我可以像这样:
vec4 background = texture2D(plane[5], gl_TexCoord[1].st);
if(is_even_row(gl_TexCoord[1].t))
{
vec4 foreground = get_my_color();
gl_FragColor = vec4(fore.rgb * foreground .a + background .rgb * (1.0-foreground .a), background .a + fore.a);
}
else
gl_FragColor = background;
但是,据我所知,GLSL中分支的本质是两个分支都将实际执行,因为“ even_row”被视为运行时值。
我有什么技巧可以避免不必要地调用繁重的函数“ get_color”? is_even_row的行为非常静态。
还是有其他方法可以做到这一点?
注意:glPolygonStipple无法使用,因为我在GLSL代码中具有自定义混合功能。
没有找到相关结果
已邀请:
2 个回复
席陋临拈
),并绘制一个全屏四边形,其顶点具有一些\“ close \” Z坐标,并使着色器杀死每条奇数行中的片段(或者,如果需要,可以使用不建议使用的alpha测试) , 管他呢)。
是知道杀死哪条线的一种非常简单的方法,使用环绕的小纹理是另一种方法(如果必须使用GLSL 1.0)。 现在绘制另一个全屏四边形,其顶点具有“远” Z值(当然,还要进行深度测试)。只需获取半分辨率纹理(GL_NEAREST过滤),然后将其写出即可。由于深度缓冲区的每隔一行的值为\“ closer \”,它将丢弃这些像素。
与此相比如何?多边形点画法已被弃用,因为硬件不直接支持点画法,而驱动程序必须通过“秘密地”重写着色器以包括额外的逻辑或通过退回软件来对其进行仿真。
寒健