libDGX不会绘制具有大尺寸的纹理

时间:2017-10-23 07:52:38

标签: java opengl-es libgdx textures

我无法在桌面上的libGDX中绘制大图像。我有一个尺寸为9494x13082像素的图像并使用batch.draw(texture, 0, 0, width, height);。而不是纹理libGDX绘制一个黑色方块。如果我将图像压缩到60%或更多,一切正常。我尝试使用TextureRegion,但这也不起作用。 请告诉我,可能是什么问题。也许我没有足够的RAM?

我在Linux,OpenGL ES 2.0,2GB Ram,Java最小RAM - 1GB,最大--2GB。

1 个答案:

答案 0 :(得分:0)

首先:opengl纹理维度等于h& w; 即使你没有宽度等于高度,那么最大的邻接也被考虑用于另一个,并且最终将正方形赋予该存储器。

第二:你的照片最好不要大于2048 * 2048.我认为最大值是4096 * 4096.

opengl 1不支持POT。 libgdx将你的纹理改为POT。所以,最好的纹理尺寸就是牵引力。 使用此参数禁用libgdx的强制POT。

Texture.setEnforcePotImages(false);

现在你的解决方案:

您必须将照片拆分成小块。例如2048 * 2048(POT)然后用TEXTURE_PACKER打包它们。然后在需要的地方画出来。

请注意,如果您使用的是压缩工具,请注意压缩文件与图形压缩不同。所以jpg或png没有更少的内存空间。 你应该使用纹理压缩器,如:etc1,etc2,ktx,....

我为你编写示例代码:

   // in this sample my image is 5*4 (5*4 - 2048*2048)
   for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; j++) {
              batch.draw(texture[i,j], i*2048, j*2048, width, height);
        }
    }