如何在着色器之后读取像素?

Posted

技术标签:

【中文标题】如何在着色器之后读取像素?【英文标题】:How to read pixel after the shader? 【发布时间】:2011-11-14 09:46:02 【问题描述】:

所以在我的程序中,我使用 GLSL 着色器绘制 2D 矩形。 矩形填充有纹理。我必须使用着色器才能进行一些计算等。 现在,我的问题是如何在着色器之后访问场景的像素值(带纹理的矩形)? 基本上,在它通过顶点然后片段着色器之后,它会在场景中绘制一些东西,我想将这些场景作为 unsigned char* 或像素之类的数据访问

【问题讨论】:

【参考方案1】:

glReadPixelshttp://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

确保使用 FBO 或 PBuffer 作为渲染目标以避免数据损坏。

【讨论】:

谢谢!所以只是一个快速的问题......所以帧缓冲区是保存当前场景的像素数据的那个? FBO 是屏幕外帧缓冲区,谷歌“帧缓冲区对象”。如果您渲染到常规窗口,回读的内容可能会以各种方式损坏(这是由于操作系统不会处理用户可能看不到的窗口的任何像素的方式)。

以上是关于如何在着色器之后读取像素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中获取像素着色器版本和顶点着色器版本

试图制作一个绘制像素的着色器

顶点纹理获取(在顶点着色器中读取纹理)

片段着色器是不是处理来自顶点着色器的所有像素?

统一按钮在着色器中丢弃像素

是否可以从顶点着色器读取数据?