Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid2.graphics.sprite;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.gebauz.bauzoid2.game.Engine;
import com.gebauz.bauzoid2.graphics.shader.ShaderProgram;
import com.gebauz.bauzoid2.graphics.shader.ShaderUniform;
import com.gebauz.bauzoid2.graphics.shader.ShaderUtil;
import com.gebauz.bauzoid2.math.Vector4;

/** Encapsulates the globally used shader for sprite rendering. */
public class SpriteShader
{
        private ShaderProgram mShader = null;
       
        private ShaderUniform mTextureHandle = null;
        private ShaderUniform mAlphaHandle = null;
        private ShaderUniform mColorHandle = null;
        private ShaderUniform mFogColorHandle = null;
       
        /** Constructor. */
        public SpriteShader()
        {
                mShader = ShaderUtil.createShaderFromFile(Gdx.files.internal("bauzoid/shaders/spriteshader.vert"),
            Gdx.files.internal("bauzoid/shaders/spriteshader.frag"));
               
                if (mShader != null)
                {
                        mTextureHandle = mShader.getUniform("uDiffuse");
                        mAlphaHandle = mShader.getUniform("uAlpha");
                        mColorHandle = mShader.getUniform("uColor");
                        mFogColorHandle = mShader.getUniform("uFogColor");
                }
               
                // TODO: fail condition -> terminate program
        }
       
        /** Destroy Sprite Shader. */
        public void dispose()
        {
                if (mShader != null)
                {
                        mShader.dispose();
                        mShader = null;
                }
        }

        /** Get reference to shader. */
        public final ShaderProgram getShader()
        {
                return mShader;
        }
       
        /** Activate shader with specified variables. */
        public void activate(Texture texture, float alpha, Vector4 color, Vector4 fogColor)
        {
                mShader.activate();
                mTextureHandle.set(0);
                mAlphaHandle.set(alpha);
                mColorHandle.set(color);
                mFogColorHandle.set(fogColor);
                Engine.graphics.renderStates.getTextureStage(0).bindTexture(texture);

                //mAlphaHandle.set(alpha);
        }
       
        /** Deactivate shader. */
        public void deactivate()
        {
                mShader.deactivate();
        }

}