Performance libgdx tileMap渲染性能问题

Performance libgdx tileMap渲染性能问题,performance,maps,libgdx,render,tiled,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 Mai

因此,我的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个以上的数据时,CPU的使用率也会跃升。低于129瓦时,性能始终相同。(仅此过程需要约2-4%),但渲染129个或更多瓷砖需要约40-60%! 现在我的问题是:为什么会这样?我做错什么了吗? 我无法想象libgdx的渲染器会有如此致命的缺陷。。。而且,在屏幕上仅使用128块瓷砖制作游戏不是一个选项:)

谢谢你的回答和想法

环境:

  • Eclipse开普勒服务发行版1
  • libgdx版本0.9.9
  • 视窗7
  • 图形芯片:NVIDIA GeForce GTX 560 Ti
  • CPU:奔腾双核2.70GHz
渲染128个分幅:

渲染块:

我得到了解决方案:

加上

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

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


我想知道这一点。我目前正在渲染40x30文件x5层=6000文件,性能没有任何问题。但是,您真的有性能问题还是CPU的增加?那么FPS在任何情况下都会下降吗?添加FPS记录器,查看是否仍然存在问题。所有瓷砖都在一个瓷砖集中吗?如果没有,请这样做。他们不应该在不同的瓷砖,因为你有纹理绑定。因为映射多了一行,并且整行都被迭代了,所以肯定需要更多的性能。我不知道为什么差别这么大。如果可能的话,可以上传tmx+资源进行检查。好吧。。。问题是,虽然我的电脑上每秒60帧,但我的笔记本电脑上却有20帧。。。我不想为CPU操心,但我认为CPU没有必要这么辛苦地工作。是的。。我有一个32 x 32的tileset和16 x 16的tileAsset loader上的良好想法。。。我会试试看不。。。使用assetManager加载Tmx文件无法解决此问题。。。