如何在android opengl es 2.0中解压缩纹理

时间:2017-02-21 12:06:44

标签: android opengl-es textures opengl-es-2.0

我有一个ETC1压缩纹理。我使用下面的代码来解压缩并加载它,

 public void LoadCompressedTexture()
{
    GLES20.glGenTextures(1, bg_grid_tex_id, 0);

    InputStream input = mContext.getResources().openRawResource(R.raw.compressed_tex);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,bg_grid_tex_id[0]);

    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    try{
        ETC1Util.loadTexture(GLES20.GL_TEXTURE_2D, 0, 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, input);
    }
    catch(IOException e){
        System.out.println("DEBUG! IOException"+e.getMessage());
    }
}

decompressed texture

我正在按预期获得图像形状,但尺寸很小,剩余部分用黑色填充。

在解压缩之前有没有办法设置高度和宽度,这样解压缩后的图像的大小会发生变化?

1 个答案:

答案 0 :(得分:0)

您可以共享原始压缩的PKM图像文件吗?

首先,您的压缩器是否配置为将宽度和高度向上舍入到最接近的功率或两个,因此用黑色填充图像?如果是这样,请离线修复(不要填充)或调整纹理坐标。

其次,如果输入纹理是正确的,那么屏幕上纹理的大小与纹理图像的大小无关;它取决于三角形的输入几何和每个顶点的纹理坐标。你是如何在屏幕上绘制四边形的?