Написание текстуры из фрагмента шейдера? - PullRequest
0 голосов
/ 04 мая 2011

Итак, я прочитал текстуру в свой фрагментный шейдер. Я могу вывести на «дисплей»; но как вывести / записать в другую текстуру? В основном то, что я хочу сделать, это:

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. Это достаточно легко сделать на процессоре, но это снижает производительность (поэтому я и делаю это в шейдере).

Я думаю, что хочу использовать фрейм, текстуру или пиксельный буфер?

Если требуется дополнительная информация, текстуры попадают в шейдер следующим образом:


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

Shader:

#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 Ответ

3 голосов
/ 04 мая 2011

Вы используете Framebuffer Objects (FBO) для записи в текстуры, они используются в качестве пользовательских буферов рисования, вы можете прикрепить текстуру в качестве буфера рисования (вложение), и цветовые записи перейдут в текстуру.

...