渲染到FrameBuffer不能与自定义Actor(libgdx)中的ShapeRenderer结合使用

时间:2015-09-02 20:49:00

标签: libgdx actor framebuffer

我尝试实现一个自定义Actor,它通过扩展Image来显示FrameBuffer的内容。在里面,我想使用ShapeRenderer进行绘制。

public class CustomActor extends Image {
    private FrameBuffer frameBuffer = null;
    private ShapeRenderer shapeRenderer = new ShapeRenderer();
    private int width;
    private int height;

    public CustomActor() {
        width = Gdx.graphics.getWidth();
        height = Gdx.graphics.getHeight();

        shapeRenderer.setAutoShapeType(true);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        if (frameBuffer == null) {
            frameBuffer = new FrameBuffer(Pixmap.Format.RGB565, width / 2, height / 2, false);
            TextureRegion textureRegion = new TextureRegion(frameBuffer.getColorBufferTexture());
            textureRegion.flip(false, true);

            setDrawable(new TextureRegionDrawable(textureRegion));
        }

        frameBuffer.begin();

        // render content
        Gdx.gl.glClearColor(0, 1, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
        shapeRenderer.setColor(Color.WHITE);
        shapeRenderer.rect(0, 0, frameBuffer.getWidth() / 2, frameBuffer.getHeight() / 2);
        shapeRenderer.end();

        if (frameBuffer != null) {
            frameBuffer.end();
        }

        super.draw(batch, parentAlpha);
    }
}

删除ShapeRenderer部分时,我可以看到场景中的绿色背景。但是一旦我使用ShapeRenderer,内容就是黑色。没有可见的白色矩形。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

刚刚发现在FrameBuffer end()之后使用我自己的SpriteBatch(带有begin()和end())它可以工作。所以这个问题似乎与FrameBuffers方法和SpriteBatches方法的调用顺序有关。在开始FrameBuffer之前结束给定的actor批处理并且“重新”开始它以绘制actor也是有效的(参见上面的评论)。