从碎片着色器中编写纹理?

时间:2011-05-04 01:12:54

标签: opengl glsl textures shader

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

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 个答案:

答案 0 :(得分:3)

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