Ошибка при попытке получить растровое изображение из текстуры (libGDX)

#java #libgdx

#java #libgdx

Вопрос:

У меня есть текстура, которая поступает прямо из фреймбуфера с помощью метода getColorBufferTexture(). Текстура в порядке, хотя и перевернута по вертикали, как и ожидалось, я могу нарисовать ее в пакете без проблем.

Я пытаюсь добавить его в PixmapPacker, потому что хочу сохранить его для дальнейшего использования, но я получаю исключение «Эта реализация TextureData не возвращает растровое изображение», которое я не знаю, как преодолеть.

Это код, участвующий в сбое:

     if (!frameBuffer.getColorBufferTexture().getTextureData().isPrepared())
        frameBuffer.getColorBufferTexture().getTextureData().prepare();
    packer.pack("panel_cells", frameBuffer.getColorBufferTexture().getTextureData().consumePixmap());
  

Как вы видите, я сначала попытался вызвать prepare() , но оказалось, что текстура всегда подготавливается на этом этапе (отсюда и «если» сначала), так что это не проблема. В любом случае я оставил эти две строки кода там на всякий случай…

Заранее спасибо!

Ответ №1:

Кажется, я наконец решил эту проблему, переопределив следующий метод при создании фреймбуфера:

 FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, bufferSize, bufferSize, false) {
        @Override
        protected Texture createColorTexture() {
            PixmapTextureData data = new PixmapTextureData(new Pixmap(width, height, format), format, false, false);
            Texture result = new Texture(data);
            result.setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
            result.setWrap(Texture.TextureWrap.ClampToEdge, Texture.TextureWrap.ClampToEdge);
            return resu<
        }
    };
  

Теперь у меня проблемы с упаковщиком, но это другая история… по крайней мере, я могу получить текстуру.

Комментарии:

1. Нет, на самом деле это не работает. Я избавился от исключения, но метод consumePixmap(), похоже, работает не так, как ожидалось: хотя текстура, возвращаемая frameBuffer.getColorBufferTexture, работает нормально, если вы создадите новую текстуру (frameBuffer.getColorBufferTexture().getTextureData().consumePixmap()), вы, по-видимому, получитепустая текстура, которая вообще не имеет смысла и, в любом случае, бесполезна.