Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid.gamestates;

import com.badlogic.gdx.Gdx;
import com.gebauz.bauzoid.graphics.Graphics;
import com.gebauz.bauzoid.graphics.GraphicsObject;
import com.gebauz.bauzoid.graphics.model.GeometryUtil;
import com.gebauz.bauzoid.graphics.model.SimpleGeometry;
import com.gebauz.bauzoid.graphics.renderstates.RenderStates;
import com.gebauz.bauzoid.graphics.renderstates.BlendingStates.BlendingMode;
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.Matrix4;
import com.gebauz.bauzoid.math.Vector4;

public class ScreenFader extends GraphicsObject
{
        private SimpleGeometry mQuad = null;
        private ShaderProgram mShader = null;
        private ShaderUniform mAlpha = null;
        private Vector4 mFadeColor = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);

        public ScreenFader(Graphics graphics)
        {
                super(graphics);
        }
       
        public void init()
        {
                mQuad = GeometryUtil.createQuad(getGraphics(), -1.0f, -1.0f, 1.0f, 1.0f);
                mShader = ShaderUtil.createShaderFromFile(getGraphics(), Gdx.files.internal("data/shaders/screenfader.vert"), Gdx.files.internal("data/shaders/screenfader.frag"));
               
                if (mShader != null)
                {
                        mAlpha = mShader.getUniform("uAlpha");
                }
        }
       
        public void exit()
        {
                if (mQuad != null)
                {
                        mAlpha = null;
                        mQuad.dispose();
                        mQuad = null;
                }
               
                if (mShader != null)
                {
                        mShader.dispose();
                        mShader = null;
                }              
        }
       
        public void update(float deltaTime)
        {
               
        }
       
        public void render()
        {
                RenderStates rs = getGraphics().renderStates;
               
                Matrix4 modelMatrix = Matrix4.createIdentity();
                rs.pushModelMatrix();
                {
                        rs.model = modelMatrix;
                               
                        mShader.activate();
                        {
                                mAlpha.set(mFadeColor);
                               
                                rs.blending.setEnabled(true);
                                rs.blending.setBlendingMode(BlendingMode.ALPHABLEND);
                                rs.culling.setEnabled(false);
                                rs.depthTest.setEnabled(false);
                                rs.activate();
                                {
                                        mQuad.render();
                                }
                                rs.deactivate();
                        }
                        mShader.deactivate();
                }
                rs.popModelMatrix();
        }
       
        public void setFadeColor(float r, float g, float b, float a)
        {
                mFadeColor.x = r;
                mFadeColor.y = g;
                mFadeColor.z = b;
                mFadeColor.w = a;
        }

}