0

我正在创建两个纹理并将它们放在同一个 TextureAtlas 中,如代码所示:

public void create () {
    pix = new Pixmap(100, 100, Pixmap.Format.RGBA8888);
    textureAtlas = new TextureAtlas();

    pix.setColor(Color.WHITE);
    pix.fill();
    textureAtlas.addRegion("white", new TextureRegion(new Texture(pix)));
    pix.setColor(Color.RED);
    pix.fill();
    textureAtlas.addRegion("red", new TextureRegion(new Texture(pix)));

    tr_list = textureAtlas.getRegions();

    pix.dispose()
}

然后在渲染时:

public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    for (int i = 0; i < 200; ++i) {
        batch.draw(tr_list.get(i % tr_list.size), (int)(Math.random()* 500), (int)(Math.random()* 500));
    }
    font.draw(batch, "FPS: " + Integer.toString(Gdx.graphics.getFramesPerSecond()), 0, Gdx.graphics.getHeight() - 20);
    font.draw(batch, "Render Calls: " + Integer.toString(batch.renderCalls), 0, Gdx.graphics.getHeight() - 60);
    batch.end();
}

我期望 batch.renderCalls 等于 1,因为纹理在同一个 TextureAtlas 中,但它等于 200。我做错了什么?

4

2 回答 2

2

为了TextureRegions在单个渲染调用中绘制你的,它们中的每一个都必须是相同的一部分Texture,而不是TextureAtlas.

TextureAtlas可以包含TextureRegions不同的Textures,这实际上发生在您的情况下。即使您使用相同的Pixmap,您也会创建两个不同Textures的。

于 2017-12-06T05:18:01.283 回答
0

您正在循环绘制它们 200 次。

for (int i = 0; i < 200; ++i) {
    // this will be called 200 times
    batch.draw(tr_list.get(i % tr_list.size), (int)(Math.random()* 500), (int)(Math.random()* 500)); 
}

而且TextureAtlas类也不会创建你添加到它的纹理的猪图片。它只是TextureRegions@Arctic23 如何注意到的容器。

所以你的主要问题是在一个渲染调用中绘制 2 个纹理。我不建议你这样做。这是可能的,但很难与他们合作。

batch.draw(..)每次绘制纹理时调用并不是一个大的性能问题。所以我不知道你为什么要分离这个。

于 2017-12-06T09:07:49.233 回答