目前,我在安卓系统的OpenGL ES 1.0上加载DDS压缩纹理(使用压缩器生成)时遇到问题:每当我调用glCompressedTexImage2D时,每次都会得到一个GL_INVALID_ENUM。下面是有问题的代码:
gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, tsz, texBuf);变量tsz的计算方法是将纹理的pitchOrLinearSize除以4,直到它是1字节(我的纹理是正方形的)。texBuf是一个ByteBuffer和mipMapCount。当我这样做的时候,我得到了一个GL_INVALID_ENUM错误代码,并且什么也没有加载。当我加载ATC压缩纹理(有一个adreno gpu)时,也会发生同样的情况。
我正在用模拟器(带有调色板纹理)和我的手机(基于MSM720x的芯片组,相当于HTC Magic,两种类型)进行测试,但都没有用。
下面是令人不快的代码:
ByteBuffer texBuf = ByteBuffer.allocateDirect(tsz);
int ld = fis.getChannel().read(texBuf);
if (ld == tsz) {
int id = newTextureID(gl);
gl.glBindTexture(GL11.GL_TEXTURE_2D, id);
// Set all of our texture parameters:
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
texBuf.position(0);
//gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, tsz, texBuf);
gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, pitchOrLinearSize, texBuf);
int err = gl.glGetError();
if (err == GL11.GL_INVALID_VALUE) {
Log.d("TDL-dds", "Error INVALID_VALUE");
} else if (err == GL11.GL_INVALID_ENUM) {
Log.d("TDL-dds", "Error INVALID_ENUM");
}
if (err != 0) {
int texs[] = new int[1];
texs[0] = id;
gl.glDeleteTextures(1, texs, 0);
return 0;
}
return id;
}有人知道为什么我会有INVALID_ENUM的错误吗?
发布于 2012-05-03 16:12:38
我认为你应该用'GL_ATC_RGB_AMD‘而不是'GL_PALETTE4_RGBA8_OES’
从这里得到::http://www.brokenteapotstudios.com/android-game-development-blog/2011/07/android-atitc-atc-texture-encoding-and-performance.html
https://stackoverflow.com/questions/7243476
复制相似问题