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