В настоящее время у меня проблема с загрузкой сжатой текстуры DDS на OpenGL ES 1.0 на андроид (сгенерирована с использованием Compressonator): всякий раз, когда я вызываю glCompressedTexImage2D, я получаю GL_INVALID_ENUM каждый раз. Вот код, о котором идет речь:
gl.glCompressedTexImage2D(GL11.GL_TEXTURE_2D, -mipMapCount, GL11.GL_PALETTE4_RGBA8_OES, width, height, 0, tsz, texBuf);
Переменная tsz
рассчитывается как последовательное деление в 4 pitchOrLinearSize текстуры до 1 байта (мои текстуры квадратные). texBuf - ByteBuffer
и mipMapCount. Когда я делаю это, я получаю код ошибки GL_INVALID_ENUM и ничего не загружается. То же самое происходит, когда я загружаю сжатую текстуру ATC (имею адрену 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?
Я думаю, вы должны использовать '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