Opengl es glInvalidateFramebuffer和数据可用性时间

Opengl es glInvalidateFramebuffer和数据可用性时间,opengl-es,egl,Opengl Es,Egl,我渲染了许多FBO,目的是在以后的drawcall中将它们绑定为纹理。据我所知,如果我不希望FBO中的数据在下一帧中再相关,我应该调用glInvalidateFramebuffer 我的问题是,假设我在将当前FBO解除绑定为渲染目标的glBindFramebuffer之前调用glInvalidateFramebuffer,那么在数据变得不可用之前,我能够使用该FBO作为渲染调用的输入纹理多久?直到解除绑定glBindFramebuffer?直到下一个使用纹理的drawcall?在eglSwapB

我渲染了许多FBO,目的是在以后的drawcall中将它们绑定为纹理。据我所知,如果我不希望FBO中的数据在下一帧中再相关,我应该调用glInvalidateFramebuffer


我的问题是,假设我在将当前FBO解除绑定为渲染目标的glBindFramebuffer之前调用glInvalidateFramebuffer,那么在数据变得不可用之前,我能够使用该FBO作为渲染调用的输入纹理多久?直到解除绑定glBindFramebuffer?直到下一个使用纹理的drawcall?在eglSwapBuffers?

之前,就任何后续命令而言,像素立即失效。请记住:虽然OpenGL可以异步执行,但它确实可以(除了少数例外)。因此,任何后续命令都会像之前的命令已经完成一样执行。

教程告诉我,在解除FBO绑定之前,我应该调用glInvalidateFramebuffer,因为这是完成昂贵任务的时候。但是,我仍然需要FBO作为drawcall的输入。glInvalidateFramebuffer对我有用吗?@Desperado17哪个教程?还请注意,解除绑定可能会做一些工作。但该标准不保证这一点,因此此类提示通常仅适用于单个供应商/操作系统/驱动程序。您希望在解除绑定之前使临时附件无效。例如,如果您有颜色、深度和模具,但只需要保留颜色,则您确实希望使深度和模具无效。对于大多数具有某种形式的本地紧密耦合分片内存的移动GPU,这避免了将深度和模板写回主内存的需要。显然,不要使你实际上需要保留的任何东西无效。。。“何时调用glInvalidateFramebuffer?”@solidpixel:那么你的意思是,如果我渲染到一个我计划用作纹理的FBO(其中我只需要颜色组件),那么我可以在渲染到该FBO后丢弃深度和模具,然后再将其解除绑定为渲染目标并节省cpu时间,对吗?