gpt4 book ai didi

java - LibGDX - 绘制到 FrameBuffer 不起作用

转载 作者:行者123 更新时间:2023-12-03 02:26:00 25 4
gpt4 key购买 nike

所以我正在尝试制作自定义按钮,为此我需要组合按钮背景的不同部分。为此,我认为使用 FrameBuffer 是可行的,但它没有给出可行的结果。因此,我尝试通过编写一个简单的测试方法来测试我的 FrameBuffer 绘制方法,该方法返回在每次调用 render() 时绘制到显示器的纹理。这个方法在这里(注意,这是一个测试方法,所以可能优化得有点差):

    private Texture test()
{
BitmapFont f = ReverseBlade.fontTitle;
f.setColor(Color.LIGHT_GRAY);

FrameBuffer fbo = new FrameBuffer(Format.RGBA8888, (int)f.getBounds("Hi").width, (int)f.getBounds("Hi").height, false);
Batch b = ReverseBlade.batch;
OrthographicCamera c = new OrthographicCamera(fbo.getWidth(), fbo.getHeight());

c.setToOrtho(false);
c.update();
b.setProjectionMatrix(c.combined);

fbo.begin();
b.begin();

f.draw(b, "Hi", 0, 0);

b.end();
fbo.end();

Texture t = fbo.getColorBufferTexture();

fbo.dispose();

b.setProjectionMatrix(ReverseBlade.camera.combined);

return t;
}

但是,什么也没有显示。屏幕很暗......我尝试过没有相机和其他多种我不再记得的变体。我做错了什么?

半解决方案我最终要做的是为 FrameBuffer 创建一个新的 Matrix4 对象,如下所示:

Matrix4 m = new Matrix4();
m.setToOrtho2D(0, 0, fbo.getWidth(), fbo.getHeight());
batch.setProjectionMatrix(m);

但是,这会使绘制的所有内容都颠倒过来,如下所示: Upside Down

最佳答案

我认为 fbo.dispose() 调用造成的破坏超出了您的预期。

参见the source并注意它在哪里破坏了 colorTexture,这是 getColorBufferTexture() 的结果。

我认为这可以被视为 Libgdx 中的一个错误。颜色纹理通常应该具有与 FBO 截然不同的生命周期,因此清理纹理似乎有点过于激进。然而,试图弄清楚在哪些情况下清理纹理可能很复杂......

关于java - LibGDX - 绘制到 FrameBuffer 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com