2016-12-16 98 views
0

我想做与正常情况相反的工作,即采用默认的Framebuffer(屏幕),将其用作我的片段着色器中的输入纹理。OpenGL ES:使用屏幕作为着色器的输入纹理

我知道我可以做

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

但这是复制数据是已经在GPU到CPU(ReadPixels),然后返回到GPU(BindTexture),不是吗?

难道我们不知道如何'直接'使用屏幕上的内容并将其提供给着色器?

回答

1

这是不可能的 - API不会为通用着色器代码公开此功能。

如果你想渲染纹理,那么你有什么理由不能只是做到“正常”的方式,并渲染到屏幕外的FBO?

+0

谢谢。没有“强有力”的理由让我不要用“正常”的方式。我正在编写一种OpenGL库,如果无论在哪里接受用户创建的FBO作为方法的参数,它都会接受默认的FBO。但是,如果为此付出的代价是CPU之旅并回到GPU(这对我的API的用户来说大部分是“隐藏的”),那么不行,我宁愿排除屏幕。 – Leszek

相关问题