2017-12-05 7 views
0

ich zwei Texturen bin zu schaffen und sie in dem gleichen TextureAtlas setzen, wie im Code gezeigt:TextureAtlas und renderCalls in Libgdx

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() 
} 

und dann beim Rendern:

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(); 
} 

ich Batch erwartet .renderCalls ist gleich 1, da die Texturen im selben TextureAtlas sind, aber statt dessen gleich 200. Was mache ich falsch?

Antwort

1

Um Ihre TextureRegions in einem einzigen Render-Aufruf zu zeichnen, muss jeder von ihnen ein Teil derselben sein Texture, nicht TextureAtlas.

TextureAtlas kann TextureRegions von verschiedenen Textures enthalten, was in Ihrem Fall tatsächlich passiert. Obwohl Sie das gleiche Pixmap verwenden, erstellen Sie zwei verschiedene Textures daraus.

+0

Danke! Jetzt habe ich es verstanden. Ich dachte, dass TextureAtlas sich darum kümmerte, verschiedene Texturen "zusammenzufügen". – Sapp

0

Sie zeichnen sie in der Schleife 200 mal.

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)); 
} 

Und auch TextureAtlas Klasse erstellen pigbild von Texturen, die Sie es nicht hinzufügen. Es ist nur Container von TextureRegions wie @ Arctic23 bemerkt.

Also Hauptproblem für Sie ist, 2 Texturen in einem Render-Aufruf zu zeichnen. Ich würde dir das nicht empfehlen. Es ist möglich, aber es wird schwer sein, mit ihnen zu arbeiten.

Wenn Sie jedes Mal, wenn Sie eine Textur zeichnen, batch.draw(..) aufrufen, ist das kein großes Leistungsproblem. Also ich weiß nicht, warum du das abtrennst.