Android Open Source - fun-gl Shader Manager






From Project

Back to project page fun-gl.

License

The source code is released under:

Apache License

If you think the Android project fun-gl listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.jcxavier.android.opengl.engine.shader;
/*  w  ww . ja  v  a 2s.  co m*/
import com.jcxavier.android.opengl.util.ReflectionUtils;

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

/**
 * Created on 11/03/2014.
 *
 * @author Joo Xavier <jcxavier@jcxavier.com>
 */
public final class ShaderManager {

    private static ShaderManager sShaderManager = null;

    private final Map<Class<? extends Shader>, Shader> mShaders;

    private ShaderManager() {
        mShaders = new HashMap<>();
    }

    /**
     * Retrieves the shader manager singleton.
     *
     * @return the shader manager singleton
     */
    public static ShaderManager getInstance() {
        if (sShaderManager == null) {
            sShaderManager = new ShaderManager();
        }

        return sShaderManager;
    }

    /**
     * Safely cleans from memory and purges the shader cache and all its programs.
     */
    public void clean() {
        for (Shader program : mShaders.values()) {
            program.clean();
        }

        mShaders.clear();
    }

    /**
     * Retrieves the shader program for the given shader program class, lazily loading and compiling it if needed. Will
     * fail with an {@link IllegalStateException} if the shader program didn't compile successfully.
     *
     * @param shaderClass the shader program class type
     * @return the created shader program
     */
    public Shader getShader(Class<? extends Shader> shaderClass) {
        Shader shader = mShaders.get(shaderClass);

        if (shader == null) {
            shader = ReflectionUtils.makeObjectOfType(shaderClass, null);

            if (shader.compile()) {
                mShaders.put(shaderClass, shader);
            } else {
                return null;
            }
        }

        if (shader == null) {
            throw new IllegalStateException("Failed to load shader program " + shaderClass.getSimpleName());
        }

        return shader;
    }
}




Java Source Code List

com.jcxavier.android.opengl.engine.BitmapConfigHelper.java
com.jcxavier.android.opengl.engine.EngineActivity.java
com.jcxavier.android.opengl.engine.EngineRenderer.java
com.jcxavier.android.opengl.engine.EngineView.java
com.jcxavier.android.opengl.engine.RendererOptions.java
com.jcxavier.android.opengl.engine.cache.GLState.java
com.jcxavier.android.opengl.engine.gdx.GdxEglConfigChooser.java
com.jcxavier.android.opengl.engine.shader.ColorShader.java
com.jcxavier.android.opengl.engine.shader.ShaderManager.java
com.jcxavier.android.opengl.engine.shader.Shader.java
com.jcxavier.android.opengl.engine.shader.TextureShader.java
com.jcxavier.android.opengl.engine.texture.TextureFilteringMode.java
com.jcxavier.android.opengl.engine.texture.TextureManager.java
com.jcxavier.android.opengl.engine.texture.TextureWrap.java
com.jcxavier.android.opengl.engine.texture.Texture.java
com.jcxavier.android.opengl.engine.type.RotationMode.java
com.jcxavier.android.opengl.file.FileManager.java
com.jcxavier.android.opengl.game.GameStage.java
com.jcxavier.android.opengl.game.SimpleGameStage.java
com.jcxavier.android.opengl.game.camera.Camera.java
com.jcxavier.android.opengl.game.camera.DefaultCamera.java
com.jcxavier.android.opengl.game.camera.OrthographicCamera.java
com.jcxavier.android.opengl.game.manager.GameManager.java
com.jcxavier.android.opengl.game.manager.ScreenManager.java
com.jcxavier.android.opengl.game.manager.input.InputHandler.java
com.jcxavier.android.opengl.game.manager.input.InputManager.java
com.jcxavier.android.opengl.game.object.DrawableObject.java
com.jcxavier.android.opengl.game.object.GameObject.java
com.jcxavier.android.opengl.game.object.Sprite.java
com.jcxavier.android.opengl.game.type.Resizeable.java
com.jcxavier.android.opengl.game.type.Touchable.java
com.jcxavier.android.opengl.game.type.Transformable.java
com.jcxavier.android.opengl.game.type.Updateable.java
com.jcxavier.android.opengl.math.IVector.java
com.jcxavier.android.opengl.math.Matrix4.java
com.jcxavier.android.opengl.math.Vector2.java
com.jcxavier.android.opengl.math.Vector3.java
com.jcxavier.android.opengl.math.Vector4.java
com.jcxavier.android.opengl.sample.GameActivity.java
com.jcxavier.android.opengl.sample.TestStage.java
com.jcxavier.android.opengl.util.BitmapUtils.java
com.jcxavier.android.opengl.util.Constants.java
com.jcxavier.android.opengl.util.ReflectionUtils.java
com.jcxavier.android.opengl.util.WeakList.java
com.sample.clean.TestActivity.java
com.sample.clean.TestStage.java