从碎片着色器编写纹理?
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/纹理的示例?以上是关于从碎片着色器编写纹理?的主要内容,如果未能解决你的问题,请参考以下文章