GLSL - 如何强制渲染片段?

时间:2014-03-12 11:48:24

标签: fragment glsl shader pixel

有没有办法强制渲染一个特殊的片段。据我所知,片段着色器仅针对栅格化三角形内的像素调用。我需要做的是在视口上的恒定位置绘制一个标记(例如一个红色像素)。我的意思是这样的:

void main(void) {
if(gl_FragCoord.x == vec2(300.5, 300.5)){
    gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
else {
gl_FragColor = getColorFromSampler();
}

,虽然片段后面没有四边形,也没有任何内容(300.5,300.5)。我不想影响性能(没有假背景和东西)。如何处理这种情况? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

有没有什么可以反对在其他东西之上渲染单个点?

所以只需在给定像素处渲染单个GL_POINTS基元。使用适当的正交投影直接在窗口空间中指定顶点位置,或者仅计算像素的剪辑空间位置并使用标识顶点变换。然后你需要的只是一个简单的passthrough片段着色器,用来编写你选择的颜色。

虽然你说你想要“片段后面没有任何内容”,我仍然认为在红色标记下呈现的单个片段不会伤害任何人,至少不会比你的分支更多(相当少)片段着色器内部仅用于单个像素(或使用模板缓冲器的任何其他更精细的技术)。如果您有任何其他更严格的理由,除了标记之外,您无法在该位置渲染任何其他内容,您可能需要更多地澄清您的问题。