Subversion Repositories AndroidProjects

Rev

Rev 802 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using BauzoidNET.math;
using BauzoidNET.graphics;
using BauzoidNET.graphics.shader;
using BauzoidNET.graphics.texture;

namespace BauzoidNET.graphics.sprite
{
    public class SpriteShader : GraphicsObject
    {
        private ShaderProgram mShader = null;
       
            private ShaderUniform mTextureHandle = null;
            private ShaderUniform mAlphaHandle = null;
            private ShaderUniform mColorHandle = null;
       
            /** Constructor. */
            public SpriteShader(Graphics graphics)
            : base(graphics)
            {
                    mShader = ShaderUtil.createShaderFromFile(graphics,
                    "data/bauzoid/shaders/spriteshader.vert",
                    "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 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);
            }
       
            /** Deactivate shader. */
            public void deactivate()
            {
                    mShader.deactivate();
            }

    }
}