我需要收集有关 an 纹理附件中使用的目标的信息FBO
,以便将其复制到另一个FBO
.
就OpenGL ES 2.0
我而言,我可以使用glGetFramebufferAttachmentParameter[if]v()
and ,因为OpenGL ES 2.0
只支持GL_TEXTURE_2D
and GL_TEXTURE_CUBE_MAP
,返回的信息足以确定使用的纹理目标(当它不是立方体贴图面时,它是 a ,GL_TEXTURE_2D
因为它不能是其他任何东西) .
然而,在桌面上,情况发生了变化:
因为我们有GL_TEXTURE_1D
, GL_TEXTURE_2D
, GL_TEXTURE_2D_MULTISAMPLE
, GL_TEXTURE_RECTANGLE
,GL_TEXTURE_3D
和 6 个立方体贴图面作为FBO's
纹理附件的有效目标,而 6 个立方体贴图面和GL_TEXTURE_3D
目标很容易分辨(因为有针对立方体贴图面和分层纹理的特定查询) ,这同样不适用于其余目标:GL_TEXTURE_1D
、GL_TEXTURE_2D
、GL_TEXTURE_2D_MULTISAMPLE
和GL_TEXTURE_RECTANGLE
,至少就手册页而言。因此,我如何才能知道纹理附件中使用了这 4 个目标中的哪一个?
复制的需要FBO
源于FBOs
上下文之间不共享的事实,实现FBOs
在主线程中创建屏幕,我想在专用于每个屏幕的子线程中使用它们,以免因渲染循环而停止主线程和从而保持应用程序响应 UI 事件。在这种情况下,缓存状态既不受欢迎也不可行;不可取,因为当客户端库(只关心作为应用程序和OpenGL
服务器之间的通信 API)处于缓存状态本身的更好位置时,它会切断应用程序的其他不同关注点,并且不可行,因为在这种情况下如前所述,我什至无法控制我的应用程序中的一些问题。
现在这是一个理论上的问题,因为我正在处理的实现只支持 OpenGL ES 2.0,但我宁愿编写面向未来的代码,我可以确定用作 FBO 附件的确切纹理目标,而不是有效的代码只是因为可用选项的数量仅限于我可以通过排除那些不是的选项来确定选择了哪个选项的程度,如上所示,这种方法不适用于功能丰富的桌面版本,并且可能不适用于未来的 OpenGL ES 版本。