/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.tests; import java.nio.IntBuffer; import java.util.Locale; import com.badlogic.gdx.Application; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetErrorListener; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.I18NBundleLoader; import com.badlogic.gdx.assets.loaders.ShaderProgramLoader; import com.badlogic.gdx.assets.loaders.TextureLoader; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver; import com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver.Resolution; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.tests.utils.GdxTest; import com.badlogic.gdx.utils.BufferUtils; import com.badlogic.gdx.utils.I18NBundle; import com.badlogic.gdx.utils.Logger; import com.badlogic.gdx.utils.TimeUtils; public class AssetManagerTest extends GdxTest implements AssetErrorListener { AssetManager manager; BitmapFont font; SpriteBatch batch; int frame = 0; int reloads = 0; float elapsed = 0; public void create () { Gdx.app.setLogLevel(Application.LOG_ERROR); Resolution[] resolutions = {new Resolution(320, 480, ".320480"), new Resolution(480, 800, ".480800"), new Resolution(480, 856, ".480854")}; ResolutionFileResolver resolver = new ResolutionFileResolver(new InternalFileHandleResolver(), resolutions); manager = new AssetManager(); manager.setLoader(Texture.class, new TextureLoader(resolver)); manager.setErrorListener(this); load(); Texture.setAssetManager(manager); batch = new SpriteBatch(); font = new BitmapFont(Gdx.files.internal("data/font.fnt"), false); } boolean diagnosed = false; private long start; // private TileMapRenderer renderer; // private TileAtlas atlas; // private TiledMap map; // private Texture tex3; private BitmapFont font2; private BitmapFont multiPageFont; private TextureAtlas tex2; private Texture tex1; private ShaderProgram shader; private void load () { // Gdx.app.setLogLevel(Logger.DEBUG); start = TimeUtils.nanoTime(); tex1 = new Texture("data/animation.png"); tex2 = new TextureAtlas(Gdx.files.internal("data/pack")); font2 = new BitmapFont(Gdx.files.internal("data/verdana39.fnt"), false); // tex3 = new Texture("data/test.etc1"); // map = TiledLoader.createMap(Gdx.files.internal("data/tiledmap/tilemap csv.tmx")); // atlas = new TileAtlas(map, Gdx.files.internal("data/tiledmap/")); // renderer = new TileMapRenderer(map, atlas, 8, 8); shader = new ShaderProgram(Gdx.files.internal("data/g2d/batchCommon.vert").readString(), Gdx.files.internal("data/g2d/monochrome.frag").readString()); System.out.println("plain took: " + (TimeUtils.nanoTime() - start) / 1000000000.0f); start = TimeUtils.nanoTime(); manager.load("data/animation.png", Texture.class); // manager.load("data/pack1.png", Texture.class); manager.load("data/pack", TextureAtlas.class); // manager.load("data/verdana39.png", Texture.class); manager.load("data/verdana39.fnt", BitmapFont.class); // manager.load("data/multipagefont.fnt", BitmapFont.class); // manager.load("data/test.etc1", Texture.class); // manager.load("data/tiledmap/tilemap csv.tmx", TileMapRenderer.class, new // TileMapRendererLoader.TileMapParameter("data/tiledmap/", 8, 8)); manager.load("data/i18n/message2", I18NBundle.class, new I18NBundleLoader.I18NBundleParameter(reloads % 2 == 0 ? Locale.ITALIAN : Locale.ENGLISH)); manager.load("data/g2d/monochrome.frag", ShaderProgram.class, new ShaderProgramLoader.ShaderProgramParameter(){ { vertexFile = "data/g2d/batchCommon.vert"; } }); } private void unload () { tex1.dispose(); tex2.dispose(); font2.dispose(); // tex3.dispose(); // atlas.dispose(); // renderer.dispose(); shader.dispose(); manager.unload("data/animation.png"); // manager.unload("data/pack1.png"); manager.unload("data/pack"); // manager.unload("data/verdana39.png"); manager.unload("data/verdana39.fnt"); // manager.unload("data/multipagefont.fnt"); // manager.unload("data/test.etc1"); // manager.unload("data/tiledmap/tilemap csv.tmx"); manager.unload("data/i18n/message2"); manager.unload("data/g2d/monochrome.frag"); } private void invalidateTexture (Texture texture) { IntBuffer buffer = BufferUtils.newIntBuffer(1); buffer.put(0, texture.getTextureObjectHandle()); Gdx.gl.glDeleteTextures(1, buffer); } public void render () { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); boolean result = manager.update(); if (result) { if (!diagnosed) { diagnosed = true; System.out.println("took: " + (TimeUtils.nanoTime() - start) / 1000000000.0f); elapsed = 0; } else { elapsed += Gdx.graphics.getRawDeltaTime(); if (elapsed > 0.2f) { unload(); load(); diagnosed = false; reloads++; } } } frame++; if (manager.isLoaded("data/g2d/monochrome.frag")) batch.setShader(manager.get("data/g2d/monochrome.frag", ShaderProgram.class)); else batch.setShader(null); batch.begin(); if (manager.isLoaded("data/animation.png")) batch.draw(manager.get("data/animation.png", Texture.class), 100, 100); if (manager.isLoaded("data/verdana39.png")) batch.draw(manager.get("data/verdana39.png", Texture.class), 300, 100); if (manager.isLoaded("data/pack")) batch.draw(manager.get("data/pack", TextureAtlas.class).findRegion("particle-star"), 164, 100); if (manager.isLoaded("data/verdana39.fnt")) manager.get("data/verdana39.fnt", BitmapFont.class).draw(batch, "This is a test", 100, 80); if (manager.isLoaded("data/multipagefont.fnt")) manager.get("data/multipagefont.fnt", BitmapFont.class).draw(batch, "This is a test qpRPN multi page!", 100, 80); // System.out.println(Arrays.toString(manager.getAssetNames().items)); // if (manager.isLoaded("data/test.etc1")) batch.draw(manager.get("data/test.etc1", Texture.class), 0, 0); // if (manager.isLoaded("data/tiledmap/tilemap csv.tmx")) manager.get("data/tiledmap/tilemap csv.tmx", // TileMapRenderer.class).render(); if (manager.isLoaded("data/i18n/message2")) font.draw(batch, manager.get("data/i18n/message2", I18NBundle.class).get("msg"), 100, 400); font.draw(batch, "loaded: " + manager.getProgress() + ", reloads: " + reloads, 0, 30); batch.end(); // if(Gdx.input.justTouched()) { // Texture.invalidateAllTextures(Gdx.app); // diagnosed = false; // unload(); // load(); // } } @Override public void error (AssetDescriptor asset, Throwable throwable) { Gdx.app.error("AssetManagerTest", "Couldn't load asset: " + asset, (Exception)throwable); } @Override public void dispose () { manager.dispose(); batch.dispose(); font.dispose(); } }