从碎片着色器编写纹理?

Posted

技术标签:

【中文标题】从碎片着色器编写纹理?【英文标题】:Writing a texture from a frag shader? 【发布时间】:2011-05-04 01:12:54 【问题描述】:

所以,我将纹理读入我的片段着色器。我可以输出到“显示”;但是我如何输出/写入另一个纹理?基本上我想做的是:

read in info from texture 1  // working
do stuff with data //working.
output to texture 2  // ??
display texture 2  // working.

第二回合:

read in infom from texture 2  // working
do stuff with data //working.
output to texture 1 // ??
display texture 1 /// working.

我想在 GPU 上完成这一切。在 CPU 上执行此操作很容易,但会降低性能(因此,我在着色器中执行此操作)。

我想我想使用帧、纹理或像素缓冲区?

如果需要更多信息,纹理将像这样进入着色器:


//housekeeping.
glUseProgram(theProgram); 
glUniform1i(glGetUniformLocation(theProgram, "TextureOne"), texId);

着色器:

#version 330 core

out vec4 outputColor;
in vec2 fragPosition;  // 2d texture
uniform sampler2D TextureOne;

void main() 
    outputColor = texture(TextureOne, fragPosition);  
    //outputColor goes to output display.

【问题讨论】:

【参考方案1】:

您使用 Framebuffer Objects (FBO) 写入纹理,它们用作自定义绘制缓冲区,您可以将纹理附加为绘制缓冲区(附件),颜色写入将转到纹理。

【讨论】:

嗨!好的,我有一个带有纹理的 FBO,使用:glFramebufferTexture2D。我还将纹理传递给我的碎片着色器。这一切终于奏效了。您是否有任何将片段着色器写入 FBO/纹理的示例?

以上是关于从碎片着色器编写纹理?的主要内容,如果未能解决你的问题,请参考以下文章

纹理上的片段着色器

传递给片段着色器的纹理坐标全部为 0

一个支持纹理渲染和逐顶点颜色的着色器,还是两个专用着色器?

在片段着色器中使用 textureCube 访问环境贴图失败

在纹理而不是屏幕上使用着色器

无法从 OpenGL 中的着色器访问先前渲染的纹理