【问题标题】:libgdx TiledMap Rendering Performance Issuelibgdx TiledMap 渲染性能问题
【发布时间】:2014-02-19 16:14:07
【问题描述】:

所以我的 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 服务版本 1
  • libgdx 版本 0.9.9
  • Windows 7
  • 显卡:NVIDIA GeForce GTX 560 Ti
  • CPU:奔腾双核 2.70GHz

渲染 128 个图块:

渲染 129 个图块:

【问题讨论】:

  • 我想知道这一点。我目前正在渲染 40x30Tiles x 5layer= 6000Tiles,性能没有任何问题。但是你真的有性能问题还是只是 CPU 的增加?那么在任何情况下FPS都会下降吗?添加一个 FPS 记录器,看看它是否仍然是一个问题。所有的瓷砖都在一个瓷砖集中吗?如果不这样做。它们不应该在不同的瓷砖中,因为你有纹理绑定。由于 Map 多了 1 行,而且整行都被迭代了,所以它肯定会需要更多的性能。为什么它有这么大的差异我不知道。如果可能的话,也许上传 tmx + 资产来检查它。
  • 嗯...问题是,虽然我的电脑有 60 FPS,但我的笔记本电脑有 20... 我不会为 CPU 烦恼,但我不认为CPU 必须如此努力地工作。是的.. 我有一个 32 x 32 的图块集,带有 16 x 16 个图块
  • 对资产加载器的好想法...将尝试一下
  • 不...用assetManager加载Tmx文件没有解决问题...

标签: performance maps libgdx render tiled


【解决方案1】:

我得到了解决方案:

只需添加

Mesh.forceVBO=true;

在应用启动之前。

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

Badlogic Forum Post

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多