Android Opengl ES Сжатие текстур при загрузке DDS с палитрой / атрибутом (INVALID_ENUM)

1

В настоящее время у меня проблема с загрузкой сжатой текстуры 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?

Теги:
opengl-es
textures

1 ответ

0

Я думаю, вы должны использовать '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

  • 0
    Я пытался реализовать то же самое после этого урока, но безрезультатно. Я пытался загрузить палитровую текстуру и текстуру ATC_RGB, но не получил никакого положительного результата. Единственный способ успешно загрузить текстуру - это класс ETC1Util, который не обрабатывает альфа-каналы :-( облом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню