Java OpenGL es 1.1-android-gl.glDeleteTextures是否释放视频内存?
背景: 我使用gl.glGenTextures将2个纹理加载到大小为2的int[]中,然后将纹理绑定到int[]的每个插槽。(这很好,我能够将每个纹理绘制到我准备的“纹理方块”上) 现在,我真正关心的是:Java OpenGL es 1.1-android-gl.glDeleteTextures是否释放视频内存?,java,android,opengl-es,Java,Android,Opengl Es,背景: 我使用gl.glGenTextures将2个纹理加载到大小为2的int[]中,然后将纹理绑定到int[]的每个插槽。(这很好,我能够将每个纹理绘制到我准备的“纹理方块”上) 现在,我真正关心的是: 运行gl.glDeleteTextures(2,int[]包含2个纹理指针,0)是否会清除生成到my int[]中的2个纹理所使用的内存?或者这只是释放了“纹理名称”?它确实删除了纹理数据。当您进行调用时,内存可能不会立即被释放,但最终会被释放。或者至少可供其他分配重用。内存管理的细节是高度特
运行gl.glDeleteTextures(2,int[]包含2个纹理指针,0)是否会清除生成到my int[]中的2个纹理所使用的内存?或者这只是释放了“纹理名称”?它确实删除了纹理数据。当您进行调用时,内存可能不会立即被释放,但最终会被释放。或者至少可供其他分配重用。内存管理的细节是高度特定于平台和驱动程序的。但是作为OpenGL API的用户,您可以考虑在<代码> GLDeleTeExtuthReSe()/Calp>Lo../P>之后释放的内存。 内存不能立即释放的原因是OpenGL异步操作。在这样的典型调用序列中:
glBindTexture(GL_TEXTURE_2D, texId);
glDrawArrays(...);
glDeleteTextures(1, &texId);
当执行gldeleteteTextures()
调用时,draw调用很可能仍然排队等待GPU执行。由于绘制调用使用纹理数据,因此无法立即删除。只有在GPU完成draw调用后才能释放内存
有几个例外情况,在对纹理调用glDeleteTextures()
后,纹理实际上不会被释放。它们不是非常常见的场景,但为了完整性,应提及: