Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenGL es 1.1-android-gl.glDeleteTextures是否释放视频内存?_Java_Android_Opengl Es - Fatal编程技术网

Java OpenGL es 1.1-android-gl.glDeleteTextures是否释放视频内存?

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.glGenTextures将2个纹理加载到大小为2的int[]中,然后将纹理绑定到int[]的每个插槽。(这很好,我能够将每个纹理绘制到我准备的“纹理方块”上)

现在,我真正关心的是:


运行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()
后,纹理实际上不会被释放。它们不是非常常见的场景,但为了完整性,应提及:

  • 如果纹理附着到FBO,且该FBO当前未绑定,则FBO的纹理参照将保持纹理处于活动状态,直到纹理从FBO分离或FBO删除。请注意,对于当前绑定的FBO,纹理将在删除时自动分离

  • 如果资源在多个上下文之间共享,事情也会变得更加复杂。在这种情况下,最好参考规范中的具体行为

  • 这类似于。另一个问题是关于缓冲区内存,纹理和缓冲区数据的内存管理基本相同。