我正在实现渲染到纹理概念,并对FBO的范围存有疑问。 完成glDrawArrays调用默认FBO后渲染到纹理,我删除纹理和非默认FBO。然后我调用glReadPixels来读取默认FBO上的内容。 所以,我的问题是我做得对,我的意思是我应该在删除FBO和纹理之前调用readpixel吗?
我假设在默认FBO上绘制之后我们不需要非默认的FBO和纹理,但后来OpenGL的一些开发人员告诉我,我在我的应用程序中做了一些奇怪的事情。请帮我理解这个。
以下是我要遵循的步骤:
现在,正如我在系统FBO上渲染的那样。为什么我们仍然需要纹理和其他用作纹理的FBO?
注意:我正在使用术语系统FBO来区分两个FBO,这是我的术语。
答案 0 :(得分:0)
我建议您阅读:http://www.songho.ca/opengl/gl_fbo.html
但总而言之,这是OpenGL中渲染到纹理的一些伪代码
init() {
// setup FBO, attachments, etc...
}
render() {
glBindFramebuffer(your_fbo);
glClearBuffer(...);
renderScene();
glBindFramebuffer(0); // setup default, system FBO
glBindTexture(texture_id_that_was_attached_to_FBO);
renderSecondScene();
}
渲染场景后无需删除纹理或fbo,在某些清理过程中在应用程序结束时删除它们。