libgdx TiledMap渲染性能问题

时间:2014-02-19 16:14:07

标签: performance maps libgdx render tiled

所以我的libgdx项目存在性能问题,并将其跟踪到地图渲染。 我通过创建一个空项目来解决这个问题,尽可能少地做,只是地图渲染。这是我提出的代码:

桌面启动项目类:

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 Kepler Service Release 1
  • libgdx版本0.9.9
  • Windows 7
  • 图形芯片:NVIDIA GeForce GTX 560 Ti
  • CPU:Pentium Dual-Core 2.70GHz

渲染128个瓷砖:

Rendering 128 tiles

渲染129个瓷砖:

Rendering 129 tiles

1 个答案:

答案 0 :(得分:2)

我得到了解决方案:

添加

Mesh.forceVBO=true;
应用程序启动前

首先,这可能是硬件问题。在其他计算机上,一切运行顺利,但也有其他人有同样的问题。在BadlogicGames论坛上,我找到了答案的更多细节:

Badlogic Forum Post

相关问题