Opengl es OpenGl ES 2.0加载纹理junkwise

Opengl es OpenGl ES 2.0加载纹理junkwise,opengl-es,android-ndk,Opengl Es,Android Ndk,我目前正在Android和OpenGLES2.0上玩NDK。我想知道是否有可能加载OpenGl纹理junkwise,以及如何加载,以便在将其提交给OpenGl之前避免将整个未压缩的纹理都放在应用程序堆中。因此,我想做的是将512Kb从存储器读取到RAM中,然后将这些512Kb传输到OpenGl,然后将下一个512Kb加载到RAM中,依此类推-因此纹理加载的内存占用应该始终在512Kb左右。然而,我在OpenGL的所有示例中看到的是,对于4096x4096x32bit纹理,人们倾向于将整个未压缩图

我目前正在Android和OpenGLES2.0上玩NDK。我想知道是否有可能加载OpenGl纹理junkwise,以及如何加载,以便在将其提交给OpenGl之前避免将整个未压缩的纹理都放在应用程序堆中。因此,我想做的是将512Kb从存储器读取到RAM中,然后将这些512Kb传输到OpenGl,然后将下一个512Kb加载到RAM中,依此类推-因此纹理加载的内存占用应该始终在512Kb左右。然而,我在OpenGL的所有示例中看到的是,对于4096x4096x32bit纹理,人们倾向于将整个未压缩图像数据加载到RAM 64MB中!。然后立即将整个数据复制到OpenGl。仅用于加载纹理的内存占用峰值为64MB!!:-O我想知道的更多的是,在Dalvik VM中运行的java编写的应用程序通常只有16Mb的可用堆内存——那么他们如何将纹理加载到OpenGL中呢?我错过了一些基本的东西

非常感谢并致以良好的问候
Samuel

是的,纹理可以加载到垃圾中

实现这一点的方法是首先调用具有完整大小的glTexImage2D,并为最后一个参数调用一个空指针,否则将在该参数中传递指向数据的指针。这将指定纹理的大小和格式,但不会用数据填充纹理

之后,可以使用glTexSubImage2D用数据块填充纹理

例如,要使用1024x1024大小的块填充4096x4096 RGBA纹理,请执行以下操作:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4096, 4096, 0,
             GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data00);
glTexSubImage2D(GL_TEXTURE_2D, 0, 1024, 0, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data01);
glTexSubImage2D(GL_TEXTURE_2D, 0, 2048, 0, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data02);
glTexSubImage2D(GL_TEXTURE_2D, 0, 3072, 0, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data03);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1024, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data10);
glTexSubImage2D(GL_TEXTURE_2D, 0, 1024, 1024, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data11);
glTexSubImage2D(GL_TEXTURE_2D, 0, 2048, 1024, 1024, 1024,
                GL_RGBA, GL_UNSIGNED_BYTE, data12);
...
<>如果你真的需要纹理这么大,你可能想考虑使用压缩纹理。不幸的是,在ES 2.0中,对特定压缩纹理格式的支持依赖于设备。但考虑到它能在多大程度上减少内存使用,并可能提高性能/功耗,它可能仍然值得研究。查看GLCompressedEximage2D了解起点


当然,您还需要确保资产的分辨率不高于需要的分辨率。

自2009年以来,应用程序没有16MB的托管堆限制。不过,对于移动设备上的单个纹理而言,64MB是相当大的数据量,最好使用压缩纹理格式。