performance - libgdx TiledMap Rendering Problema de rendimiento
maps (1)
Tengo la solución:
Solo agrega
Mesh.forceVBO=true;
antes de que comience la aplicación.
en primer lugar, esto es probablemente un problema de hardware. En otras computadoras todo funciona sin problemas, pero ha habido otros que tenían el mismo problema. En el foro de BadlogicGames encontré la respuesta. Hay más detalles:
Así que tuve problemas de rendimiento con mi proyecto libgdx y lo rastreé hasta la representación del mapa. Aislé el problema creando un proyecto vacío y hago lo mínimo posible, solo el renderizado del mapa. Este es el código que se me ocurrió:
La clase de proyecto de inicio de escritorio:
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);
}
}
El código real:
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() {
}
}
Ahora, lo extraño es que el uso de la CPU no solo es ridículamente alto, sino que también hace un salto cuando hay que renderizar más de 128. Por debajo de 129 fichas, el rendimiento siempre es el mismo. (Solo este proceso toma alrededor del 2-4%). ¡Pero renderizar 129 fichas o más toma alrededor de 40 - 60%! Ahora mi pregunta es: ¿por qué es eso? ¿Estoy haciendo algo mal? No me puedo imaginar que el renderizador de libgdx tenga un defecto tan grave ... y hacer un juego solo con 128 mosaicos en la pantalla no es una opción :)
Gracias por cualquier respuesta o pensamiento!
Ambiente:
- Eclipse Kepler Service Release 1
- libgdx versión 0.9.9
- Windows 7
- Chip de gráficos: NVIDIA GeForce GTX 560 Ti
- CPU: Pentium Dual-Core 2.70GHz
Renderizar 128 mosaicos:
Renderizar 129 fichas: