Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid.graphics.sprite;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.gebauz.bauzoid.graphics.Graphics;
import com.gebauz.bauzoid.graphics.GraphicsObject;
import com.gebauz.bauzoid.graphics.shader.ShaderProgram;
import com.gebauz.bauzoid.graphics.shader.ShaderUniform;
import com.gebauz.bauzoid.graphics.shader.ShaderUtil;
import com.gebauz.bauzoid.math.Vector4;

/** Encapsulates the globally used shader for sprite rendering. */
public class SpriteShader extends GraphicsObject
{
        private ShaderProgram mShader = null;
       
        private ShaderUniform mTextureHandle = null;
        private ShaderUniform mAlphaHandle = null;
        private ShaderUniform mColorHandle = null;
       
        /** Constructor. */
        public SpriteShader(Graphics graphics)
        {
                super(graphics);
               
                mShader = ShaderUtil.createShaderFromFile(graphics,
                                Gdx.files.internal("data/bauzoid/shaders/spriteshader.vert"),
                                Gdx.files.internal("data/bauzoid/shaders/spriteshader.frag"));
               
                if (mShader != null)
                {
                        mTextureHandle = mShader.getUniform("uDiffuse");
                        mAlphaHandle = mShader.getUniform("uAlpha");
                        mColorHandle = mShader.getUniform("uColor");
                }
               
                // 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)
        {
                mShader.activate();
                mTextureHandle.set(0);
                mAlphaHandle.set(alpha);
                mColorHandle.set(color);
                getRenderStates().getTextureStage(0).bindTexture(texture);

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

}