Subversion Repositories AndroidProjects

Rev

Rev 1737 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.bauzoid2.graphics.shader;

import com.badlogic.gdx.Gdx;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by cchiu on 05.01.2015.
 */

public class ShaderLibrary
{

    // Constants========================================================================================

    // Embedded Types===================================================================================

    public class ShaderInfo
    {
        private ShaderProgram mShader = null;
        private String mType = null;
        private String mFilename = null;

        public ShaderInfo(String filename, String type, ShaderProgram shader)
        {
            mFilename = filename;
            mType = type;
            mShader = shader;
        }

        public void dispose()
        {
            if (mShader != null)
            {
                mShader.dispose();
                mShader = null;
            }
        }

        public String getType() { return mType; }
        public ShaderProgram getShader() { return mShader; }
    }

    // Fields===========================================================================================

    private ArrayList<ShaderInfo> mShaderInfos = new ArrayList<ShaderInfo>();

    // Methods==========================================================================================

    public ShaderLibrary()
    {

    }

    public void init()
    {

    }

    public void exit()
    {
        for (int i = 0; i < mShaderInfos.size(); i++)
        {
            ShaderInfo info = mShaderInfos.get(i);
            info.dispose();
        }
        mShaderInfos.clear();
    }

    /** Filename without extension. */
    public ShaderProgram createShader(String filename, String type)
    {
        ShaderProgram result = findShader(type);
        if (result != null)
            return result;

        result = ShaderUtil.createShaderFromFile(Gdx.files.internal("bauzoid/shaders/" + filename + ".vert"),
                Gdx.files.internal("bauzoid/shaders/" + filename + ".frag"));

        mShaderInfos.add(new ShaderInfo(filename, type, result));

        return result;
    }

    public ShaderProgram findShader(String type)
    {
        for (int i = 0; i < mShaderInfos.size(); i++)
        {
            ShaderInfo info = mShaderInfos.get(i);
            if (info.getType().equals(type))
                return info.getShader();
        }

        return null;
    }

    // Getters/Setters==================================================================================

    public int getNumShaders() { return mShaderInfos.size(); }
    public ShaderProgram getShader(int index) { return mShaderInfos.get(index).getShader(); }

}