package com.siondream.core;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.JsonReader;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.JsonValue.JsonIterator;
import com.badlogic.gdx.utils.Logger;
import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.ObjectMap.Values;
public class ShaderManager implements Disposable {
private static final String TAG = "ShaderManager";
private static final String file = "data/shaders/shaders.json";
private Logger logger;
private ObjectMap<String, ShaderProgram> shaders;
public ShaderManager() {
logger = new Logger(TAG, Env.debugLevel);
logger.info("initialising");
shaders = new ObjectMap<String, ShaderProgram>();
loadJson();
}
public ShaderProgram get(String name) {
ShaderProgram shader = shaders.get(name, null);
if (shader == null) {
logger.error("shader " + name + " not found");
}
return shader;
}
@Override
public void dispose() {
logger.info("shutting down");
Values<ShaderProgram> values = shaders.values();
while (values.hasNext) {
values.next().dispose();
}
}
private void loadJson() {
logger.info("loading file " + file);
try {
JsonReader reader = new JsonReader();
JsonValue root = reader.parse(Gdx.files.internal(file));
JsonIterator rootIt = root.iterator();
while (rootIt.hasNext()) {
JsonValue shaderValue = rootIt.next();
String name = shaderValue.get("name").asString();
String vertex = shaderValue.get("vertex").asString();
String fragment = shaderValue.get("fragment").asString();
logger.info("loading shader " + name + " vertex: " + vertex + " fragment: " + fragment);
try {
ShaderProgram shader = new ShaderProgram(Gdx.files.internal(vertex), Gdx.files.internal(fragment));
if (!shader.isCompiled()) {
logger.error("error loading shader " + name);
logger.equals(shader.getLog());
}
else {
shaders.put(name, shader);
}
}
catch (Exception e) {
logger.error("error loading shader " + name + " " + e.getMessage());
}
}
}
catch (Exception e) {
logger.error("error loading file " + file + " " + e.getMessage());
}
}
}