将纹理转换为FrameBuffer并返回

时间:2015-12-17 16:37:03

标签: java android opengl-es libgdx

我尝试在Android上的LibGDX中的Texture上绘制文字时遇到错误。我目前正在加载Texture,创建FrameBuffer,使用TextureFrameBuffer绘制到SpriteBatch上,然后抓取FrameBuffer中的纹理数据1}}转回Texture。我还没有设置字体绘图(它也会使用SpriteBatch,绘制到FrameBuffer,但我稍后会这样做。)

这是我的代码:

private static FrameBuffer fbo;
private static SpriteBatch batch;

public static SpriteDrawable getTextureWithText(String text) {
    try {
        Texture texture = new Texture(Gdx.files.internal("image.png"));
        fbo = new FrameBuffer(Format.RGBA8888, texture.getWidth(), texture.getHeight(), false);

        fbo.begin();
        Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.begin();

        batch.draw(texture, 0, 0, texture.getWidth(), texture.getHeight());
        // Here I would render text too,
        // however I have not yet attempted this as the
        // converting to and from an FBO will not work.

        batch.end();

        fbo.end();

        texture = fbo.getColorBufferTexture();
        return new SpriteDrawable(new Sprite(texture));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是,在LibGDX的多屏幕项目中,我的应用程序不会超出启动画面到包含LibGDX Image对象的屏幕上。 LogCat中重复显示以下错误:

12-16 19:02:25.623 20311-20349/uk.jamco.application.android W/Adreno-EGLSUB: <SwapBuffers:1352>: Invalid native buffer. Failed to queueBuffer
12-16 19:02:25.623 20311-20356/uk.jamco.application.android W/Adreno-EGLSUB: <updater_thread:428>: native buffer is NULL

这里有人可以帮我解决问题吗? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

我设法解决了自己的问题。我没有初始化SpriteBatch对象,这导致了相当不相关的错误。很抱歉浪费任何人的时间,如果他们读到这个,但我现在将结束这个问题。