2016-12-16 2 views
0

Я хотел бы сделать противоположное тому, что обычно делается, т. Е. Взять по умолчанию Framebuffer (экран), использовать его в качестве входной текстуры в моем шейдере фрагмента ,OpenGL ES: использование экрана в качестве входной текстуры для шейдера

Я знаю, что могу сделать

glBindFramebuffer(GL_FRAMEBUFFER,0); 
glReadPixels(blah,blah,blah, buf); 
int texID = createTexture(buf); 
glBindTexture(GL_TEXTURE_2D, texID); 
runShaderProgram(); 

но это копирование данных, которые уже находятся в ГПУ на CPU (ReadPixels), а затем обратно в ГПУ (BindTexture), не так ли?

Не могли бы мы как-то «напрямую» использовать содержимое экрана и подавать его в шейдеры?

ответ

1

Это не возможно - API просто не раскрывает эту функциональность для общего шейдерного кода общего назначения.

Если вы хотите визуализировать текстуру, то есть ли какая-то причина, по которой вы не можете просто сделать это «обычным» способом и визуализировать внеэкранное FBO?

+0

Спасибо. У меня нет «сильной» причины не использовать «нормальный» способ. Я пишу какую-то библиотеку OpenGL, и мой API будет просто чище, если, когда он принимает созданный пользователем FBO в качестве аргумента для метода, он также будет принимать FBO по умолчанию одинаково. Но если цена за это - это поездка на CPU и обратно на GPU (поездка, которая будет большей частью «скрыта» для пользователя моего API), тогда нет, я предпочитаю исключать экран. – Leszek

Смежные вопросы