performance maps libgdx render tiled

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:

Publicaciones de Badlogic Forum

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: