【发布时间】:2018-05-25 01:57:29
【问题描述】:
我想在 OpenGL ES 2.0 中将 巨大的位图作为纹理加载到 Android 上的显卡内存中,以用作尽可能大的纹理图集。我的设备的最大纹理尺寸为 8192x8192。
我知道我可以通过以下方式将位图加载为纹理:
// create bitmap
Bitmap bitmap = Bitmap.createBitmap(8192, 8192, Bitmap.Config.ARGB_8888);
{ // draw something
Canvas c = new Canvas(bitmap);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(0xFFFF0000);
c.drawCircle(4096, 4096, 4096, p);
}
// load as a texture
GLUtils.texImage2D(GL_TEXTURE_2D, 0, bitmap, 0);
但是,(毫不奇怪)我在尝试创建这种大小的位图时收到 java.lang.OutOfMemoryError。
是否可以分段加载?由于它是一个纹理图集,它可以由较小的位图组装而成。我查看了texSubImage2D 函数,但我不明白你会在哪里初始化全尺寸纹理,或者事先提供全尺寸纹理的大小。
【问题讨论】:
标签: android opengl-es textures opengl-es-2.0 android-bitmap