libgdx SpriteBatch рендерится в текстуру - PullRequest
34 голосов
/ 26 сентября 2011

Можно ли выполнить рендеринг в текстуру, используя SpriteBatch в libGdx (движок Java для Android / Desktop)?Если да, то как это сделать?

В основном я хочу отрендерить все в область 320 x 240 с текстурой 512 x 256 и затем масштабировать область по размеру экрана (в ландшафтном режиме).Таким образом, я хочу устранить артефакты, возникающие при независимом масштабировании альфа-смешанных текстур.Если есть другие способы удаления таких артефактов, укажите их:)

И есть ли онлайн-документация для libGdx?

Ответы [ 2 ]

63 голосов
/ 03 октября 2011

Этот фрагмент был передан мне на форуме LibGDX и работает без нареканий.

private float m_fboScaler = 1.5f;
private boolean m_fboEnabled = true;
private FrameBuffer m_fbo = null;
private TextureRegion m_fboRegion = null;

public void render(SpriteBatch spriteBatch)
{
    int width = Gdx.graphics.getWidth();
    int height = Gdx.graphics.getHeight();

    if(m_fboEnabled)      // enable or disable the supersampling
    {                  
        if(m_fbo == null)
        {
            // m_fboScaler increase or decrease the antialiasing quality

            m_fbo = new FrameBuffer(Format.RGB565, (int)(width * m_fboScaler), (int)(height * m_fboScaler), false);
            m_fboRegion = new TextureRegion(m_fbo.getColorBufferTexture());
            m_fboRegion.flip(false, true);
        }

        m_fbo.begin();
    }

    // this is the main render function
    my_render_impl();

    if(m_fbo != null)
    {
        m_fbo.end();

        spriteBatch.begin();         
        spriteBatch.draw(m_fboRegion, 0, 0, width, height);               
        spriteBatch.end();
    }   
}
3 голосов
/ 01 октября 2011

На данный момент я бы рекомендовал вам использовать Pixmap s. Видите ли, для них написано не так много функций, но, очевидно, вы можете записать Pixmap (с альфа-каналом) в другую (pm1.drawPixmap(pm2, srcx, srcy, w, h, ...)), при условии, что вы не хотите масштабировать ее (вы можете масштабировать композицию позже, но пропорция изображений, используемых в композиции, не будет изменена ... если вы не напишите функцию изменения размера).

Если вы хотите сделать более сложные вещи (например, записать строку, используя BitmapFont в Texture для последующей манипуляции, или записать ее в Pixmap и затем загрузить ее в видеопамять), тогда. .. затем скажите мне, если вам это удастся (как я хочу пойти в этом направлении для оптимизации). Я думаю, что лучше всего было бы добавить необходимые функции в libgdx ...

В любом случае, не принимайте ничего, что я написал здесь, как неоспоримую правду - если я продвинусь дальше, я обновлю.

Документация , которую я нашел, несколько ограничена - я уверен, что вы уже прошли через это. Есть информация в блоге badlogic и на странице проекта googlecode, а также есть относительно хорошая книга, написанная Марио, «Начало игр для Android». Кроме того, есть несколько (очень простых) видео. И не забывайте, что вы можете обратиться к источнику и прекрасные примеры ...

Также вы всегда можете спросить на форуме: http://badlogicgames.com/forum/

ОБНОВЛЕНИЕ : Ваш ответ с использованием FrameBuffer и TextureRegion, несомненно, намного лучше. Я оставляю этот только потому, что в нем упоминается документация.

...