Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.Bauzoid.graphics.renderstates;

import com.gebauz.Bauzoid.graphics.Graphics;
import com.gebauz.Bauzoid.graphics.GraphicsObject;

/** Set of renderstates. */
public class RenderStatesConfiguration extends GraphicsObject
{
        // unsupported in OpenGL ES 2.0
/*      private boolean mAlphaTestEnabled;
        private float mAlphaTestThreshold;
        private int mAlphaTestComparisonFunc;*/

       
        private boolean mBlendingEnabled;
        private BlendingStates.BlendingMode mBlendingMode;
       
        private boolean mCullingEnabled;
        private CullingStates.VertexWinding mCullingWinding;
       
        private boolean mDepthTestEnabled;
        private boolean mDepthBufferWriteEnabled;
        private DepthTestStates.ComparisonMode mDepthTestComparisonFunc;
       
        /** Constructor. */
        public RenderStatesConfiguration(Graphics graphics)
        {
                super(graphics);
               
                mBlendingEnabled = graphics.renderStates.blending.isDefaultEnabled();
                mBlendingMode = graphics.renderStates.blending.getDefaultBlendingMode();
               
                mCullingEnabled = graphics.renderStates.culling.isDefaultEnabled();
                mCullingWinding = graphics.renderStates.culling.getDefaultVisibleFaces();
               
                mDepthTestEnabled = graphics.renderStates.depthTest.isDefaultEnabled();
                mDepthBufferWriteEnabled = graphics.renderStates.depthTest.isDefaultWriteEnabled();
                mDepthTestComparisonFunc = graphics.renderStates.depthTest.getDefaultDepthTestFunction();
        }
       
        /** Apply states. */
        public void apply()
        {
                RenderStates renderStates = getRenderStates();
               
                renderStates.blending.setEnabled(mBlendingEnabled);
                renderStates.blending.setBlendingMode(mBlendingMode);
               
                renderStates.culling.setEnabled(mCullingEnabled);
                renderStates.culling.setVisibleFaces(mCullingWinding);
               
                renderStates.depthTest.setEnabled(mDepthTestEnabled);
                renderStates.depthTest.setWriteEnabled(mDepthBufferWriteEnabled);
                renderStates.depthTest.setDepthTestFunction(mDepthTestComparisonFunc);
        }
       
        /** Enable/disable blending. */
        public final void setBlendingEnabled(boolean blendingEnabled)
        {
                mBlendingEnabled = blendingEnabled;
        }
       
        /** Set blending mode. */
        public final void setBlendingMode(BlendingStates.BlendingMode blendingMode)
        {
                mBlendingMode = blendingMode;
        }
       
        /** Set numeric blending mode according to SUX values. */
        public final void setBlendingMode(int blendingMode)
        {
                switch(blendingMode)
                {
                case 0:
                        mBlendingMode = BlendingStates.BlendingMode.ADD;
                        break;
                case 1:
                        mBlendingMode = BlendingStates.BlendingMode.ALPHABLEND;
                        break;
                case 2:
                        mBlendingMode = BlendingStates.BlendingMode.SUBTRACT;
                        break;
                // Unsupported in OpenGL ES
/*              case 3:
                        mBlendingMode = BlendingStates.BlendingMode.MIN;
                        break;
                case 4:
                        mBlendingMode = BlendingStates.BlendingMode.MAX;
                        break;*/

                case 5:
                        mBlendingMode = BlendingStates.BlendingMode.MULTIPLY;
                        break;
                }
        }
       
        /** Enable/disable backface culling. */
        public final void setCullingEnabled(boolean cullingEnabled)
        {
                mCullingEnabled = cullingEnabled;
        }
       
        /** Set the culling mode. */
        public final void setCullingWinding(CullingStates.VertexWinding cullingWinding)
        {
                mCullingWinding = cullingWinding;
        }
       
        /** Set culling mode according to SUX values. */
        public final void setCullingWinding(int cullingWinding)
        {
                switch(cullingWinding)
                {
                case 1:
                        mCullingWinding = CullingStates.VertexWinding.CLOCKWISE;
                        break;
                case 0:
                        mCullingWinding = CullingStates.VertexWinding.COUNTERCLOCKWISE;
                        break;
                }
        }
       
        /** Enable/disable depth test. */
        public final void setDepthTestEnabled(boolean depthTestEnabled)
        {
                mDepthTestEnabled = depthTestEnabled;
        }
       
        /** Enable/disable depth buffer writing. */
        public final void setDepthBufferWriteEnabled(boolean depthBufferWriteEnabled)
        {
                mDepthBufferWriteEnabled = depthBufferWriteEnabled;
        }
       
        /** Set depth test comparison function. */
        public final void setDepthTestComparisonFunc(DepthTestStates.ComparisonMode depthTestComparisonFunc)
        {
                mDepthTestComparisonFunc = depthTestComparisonFunc;            
        }
       
        /** Set depth test comparison function according to SUX values. */
        public final void setDepthTestComparisonFunc(int comparisonFunc)
        {
                switch (comparisonFunc)
                {
                case 0:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.NEVER;
                        break;
                case 1:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.ALWAYS;
                        break;
                case 2:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.LESS;
                        break;
                case 3:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.LESSEQUAL;
                        break;
                case 4:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.EQUAL;
                        break;
                case 5:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.GREATER;
                        break;
                case 6:
                        mDepthTestComparisonFunc = DepthTestStates.ComparisonMode.GREATEREQUAL;
                        break;
                }
        }
       
        /** Check if blending is enabled. */
        public final boolean isBlendingEnabled()
        {
                return mBlendingEnabled;
        }
       
        /** Get blending mode. */
        public final BlendingStates.BlendingMode getBlendingMode()
        {
                return mBlendingMode;
        }
       
        /** Check if culling is enabled. */
        public final boolean isCullingEnabled()
        {
                return mCullingEnabled;
        }
       
        /** Get culling triangle winding mode. */
        public final CullingStates.VertexWinding getCullingWinding()
        {
                return mCullingWinding;
        }
       
        /** Check if depth test is enabled. */
        public final boolean isDepthTestEnabled()
        {
                return mDepthTestEnabled;
        }
       
        /** Check if depth buffer writing is enabled. */
        public final boolean isDepthBufferWriteEnabled()
        {
                return mDepthBufferWriteEnabled;
        }
       
        /** Get depth test comparison function. */
        public final DepthTestStates.ComparisonMode getDepthTestComparisonFunc()
        {
                return mDepthTestComparisonFunc;
        }
       
}