将图层绘制到LibGDX FrameBuffer中

时间:2013-08-05 22:14:43

标签: java memory textures libgdx framebuffer

我正在使用LibGDX开发移动游戏项目,这需要我将几个精灵组合在一起并将它们绘制成一个FBO。基本上,我试图将一组精灵绘制到1.0 alpha的纹理,这样我就可以将这些纹理以较低的不透明度绘制回FBO,它看起来就像一块大块。我遇到的问题是我需要制作其中的几个并且纹理最终会变得非常大,并且创建所有这些纹理并同时保留所有纹理听起来根本不是理想的解决方案。

我试图做的是在FBO本身中一次使用一个纹理,我认为听起来可行,但我无法弄清楚如何使这个工作。为了将精灵组合到纹理上,就像我之前描述的那样,我相信我需要在单独的FBO中绘制并从中获取纹理。我不确定停止/启动FBO的效率如何,但即使只是作为测试我试图阻止主FBO,绘制到用于制作每个纹理的临时一个,然后重新启动主要的一个并绘制创建了纹理,但它似乎根本不起作用。我认为这是因为FBO并不打算像那样来回切换,但我不确定还有什么可以尝试。

我希望我的解释不会让FBO之间的所有切换混淆不清楚,但基本上我只是在寻找从应用程序中创建多个纹理的最佳方法,然后将每个纹理单独绘制到一个FBO无需一次在内存中保留所有这些纹理。

这是我试图做的简化版本。

public static void processImage() {
    mainFBO.begin();
    gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    // draw in background texture(s)
    for(int i = 0; i < numberOfLayers; i++){
            mainFBO.end();
            Texture tempTexture = processLayer();
            mainFBO.begin();
            // draw tempTexture with desired settings

    }
    mainFBO.end();

    finalTexture = mainFBO.getColorBufferTexture();
}

public static Texture processLayer() {
    secondaryFBO.begin();
    // Draw all sprites for the necessary "layer"
    secondaryFBO.end();

    return secondaryFBO.getColorBufferTexture();
}

0 个答案:

没有答案