2014-02-19 68 views
0

所以我有我的libgdx項目的性能問題,我跟蹤到地圖渲染。 我通過創建一個空項目來隔離問題,並儘可能少地執行地圖渲染。這是我想出了代碼:libgdx TiledMap渲染性能問題

桌面啓動項目類:

package com.me.test; 

import com.badlogic.gdx.backends.lwjgl.LwjglApplication; 
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; 

public class Main { 
public static void main(String[] args) { 
    LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); 
    cfg.title = "performanceTest"; 
    cfg.useGL20 = false; // doesn't make a difference... 
    cfg.width = 1080; 
    cfg.height = cfg.width/12 * 9; // 810 

    new LwjglApplication(new Test(), cfg); 
} 
} 

的實際代碼:

import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.OrthographicCamera; 
import com.badlogic.gdx.maps.tiled.TmxMapLoader; 
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; 

public class Test implements ApplicationListener { 
private OrthographicCamera camera; 
private com.badlogic.gdx.maps.tiled.TiledMap map; 
private static OrthogonalTiledMapRenderer renderer; 

@Override 
public void create() {  
    float w = Gdx.graphics.getWidth(); 
    float h = Gdx.graphics.getHeight(); 

    camera = new OrthographicCamera(w, h); 

    TmxMapLoader maploader = new TmxMapLoader(); 

    map = maploader.load("test.tmx"); 
    renderer = new OrthogonalTiledMapRenderer(map, 1); 
    renderer.setView(camera); 

} 

@Override 
public void dispose() { 
    renderer.dispose(); 
    map.dispose(); 
} 

@Override 
public void render() {  
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    renderer.render(); 
} 

@Override 
public void resize(int width, int height) { 
} 

@Override 
public void pause() { 
} 

@Override 
public void resume() { 
} 
} 

現在奇怪的是:不僅是CPU的使用率可笑的高,但它超過128必須呈現時跳。低於129瓦的表現總是相同的。 (只有這個過程需要大約2-4%)但是渲染129塊或更多的塊大約需要40-60%! 現在我的問題是:爲什麼呢?難道我做錯了什麼? 我無法想象從libgdx的渲染器會有這樣一個致命的缺陷......並製作一個遊戲只使用128瓦在屏幕上是不是一個選項:)

感謝您的任何答案或想法!

環境:

  • Eclipse的開普勒服務發佈1
  • libgdx版本0.9.9
  • Windows 7的
  • 顯卡芯片:NVIDIA的GeForce GTX 560鈦
  • CPU:奔騰雙核2.70GHz

Rendering 128 Tiles:

Rendering 128 tiles

渲染129瓦:

Rendering 129 tiles

+0

我想知道這一點。我目前正在渲染40x30Tiles x 5層= 6000Tiles,沒有任何性能問題。但是,你真的有一個性能問題或只是在CPU的上升?無論如何,FPS下降了嗎?添加一個FPS記錄器,看看它是否仍然是一個問題。一個瓷磚組中的所有瓷磚都是?如果不這樣做。由於您具有紋理綁定,它們不應該位於不同的圖塊中。由於Map是多行1行,並且整行得到迭代,所以它確實需要更多的性能。爲什麼它如此大的差異我不知道。如果可能的話,也許上傳tmx +資產來檢查它。 – BennX

+0

呃...問題是,雖然我的電腦上有60 FPS的甜蜜,但我的筆記本電腦上有20個...我不會爲CPU而煩惱,但我認爲CPU不需要這麼努力。是的。我有一個32×32的tileset有16×16瓦 – pixlhero

+0

對資產裝載機沒想好......會嘗試一下 – pixlhero

回答

2

我得到了解決:

應用程序啓動之前,只需添加

Mesh.forceVBO=true; 

首先這可能是一個硬件問題。在其他計算機上一切運行順利,但也有其他人遇到同樣的問題。在BadlogicGames論壇我找到了答案,更多的細節有:

Badlogic Forum Post