我想使用GLSL以隔行模式高效渲染。GLSL交错
我可以alrdy做到这一点,如:
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代码中有自定义混合函数。
除非你在软件渲染器上运行,否则我会强烈地阻止你以隔行模式渲染。它会变得更糟,但速度不会更快。事实上,它可能会更慢。隔行渲染会干扰GPU的自然2x2块着色,这是不好的。 – Damon
我在合成和隔行扫描视频,后来在管道上显示1080i电视。它必须交错。 – ronag
在这种情况下,如何处理Y分辨率为1/2的所有内容,然后绘制纹理全屏四边形作为最后一件事,并滥用模板缓冲区来屏蔽奇数行?这样,至少除了最后一次传递都是对GPU友好的。或者,如果模板不可用,则可以执行“明确的Z剔除”。 – Damon