在GLSL中读取当前的片段颜色

时间:2018-09-09 14:47:30

标签: opengl glsl

我正在尝试在屏幕上绘制一个圆圈,该圆圈的颜色始终与以前的颜色相反。与《我的世界》中的十字准线相似,它们的颜色始终不同于当前的重点。有没有办法在GLSL中访问当前片段的颜色?

Minecraft crosshairs

1 个答案:

答案 0 :(得分:1)

在GLSL中,没有这样的东西。我可以想到在GL中达到这种效果的几种方法:

  1. 由于@Rabbid已在评论中建议,请使用Blending
  2. GL的另一个极少使用的功能,可能实现这种效果的是Logical OperationsGL_ARB_TEXTURE_BARRIER允许在传入的源之间定义一些按位运算颜色(片段着色器的输出)和帧缓冲区中的目标颜色。
  3. 如果可以使用OpenGL 4.5或{{3}},则可以从与写入相同的纹理进行采样,如果仅从片段着色器将要写入的纹理像素中进行采样。因此,这基本上就是您要的内容:您可以在该片段的位置获得帧缓冲区具有的实际颜色值,并且可以对其执行任何操作。不过,它确实需要“渲染到纹理”设置。
  4. 在多遍方法中使用“渲染到纹理”。首先,将普通图像渲染到纹理,然后通过单独的渲染,渲染到另一个渲染目标,并在其顶部合成具有不同颜色的对象。这与选项3十分相似,但不需要GL 4.5或任何高级扩展,仅OpenGL 3.0或2.x + FBO扩展即可。