Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid.graphics.renderstates;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;

/** Manages culling render state. */
public class CullingStates extends RenderStatesObject
{
        /** Vertex winding. */
        public enum VertexWinding
        {
                CLOCKWISE,
                COUNTERCLOCKWISE
        }
       
        private boolean mEnabled = true;
        private VertexWinding mVisibleFaces = VertexWinding.CLOCKWISE;
        private boolean mCurrentlyEnabled = true;
        private VertexWinding mCurrentVisibleFaces = VertexWinding.CLOCKWISE;
        private boolean mDefaultEnabled = true;
        private VertexWinding mDefaultVisibleFaces = VertexWinding.CLOCKWISE;
       
        /** Constructor. */
        public CullingStates(RenderStates renderStates)
        {
                super(renderStates);
        }
       
        /** Activate the render state. */
        @Override
        public void activate(boolean force)
        {
                if ((force) || (mEnabled != mCurrentlyEnabled))
                {
                        mCurrentlyEnabled = mEnabled;
                        if (mEnabled)
                                Gdx.gl.glEnable(GL20.GL_CULL_FACE);
                        else
                                Gdx.gl.glDisable(GL20.GL_CULL_FACE);
                }
               
                if ((force) || (mVisibleFaces != mCurrentVisibleFaces))
                {
                        mCurrentVisibleFaces = mVisibleFaces;
                        switch (mVisibleFaces)
                        {
                        case CLOCKWISE:
                                Gdx.gl.glFrontFace(GL20.GL_CW);
                                break;
                        case COUNTERCLOCKWISE:
                                Gdx.gl.glFrontFace(GL20.GL_CCW);
                                break;
                        }
                }
        }
       
        /** Reset to default values. */
        @Override
        public void reset()
        {
                if ((mLocked) || (mRenderStates.isLocked()))
                        return;
               
                mEnabled = mDefaultEnabled;
                mVisibleFaces = mDefaultVisibleFaces;
        }
       
        /** Check enabled state. */
        public final boolean isEnabled()
        {
                return mEnabled;
        }
       
        /** Check default enabled state. */
        public final boolean isDefaultEnabled()
        {
                return mDefaultEnabled;
        }
       
        /** Get vertex winding. */
        public final VertexWinding getVisibleFaces()
        {
                return mVisibleFaces;
        }
       
        /** Get default vertex winding. */
        public final VertexWinding getDefaultVisibleFaces()
        {
                return mDefaultVisibleFaces;
        }
       
        /** Set enabled state. */
        public final void setEnabled(boolean value)
        {
                if ((mLocked) || (mRenderStates.isLocked()))
                        return;
                mEnabled = value;
        }
       
        /** Set default enabled state. */
        public final void setDefaultEnabled(boolean value)
        {
                if ((mLocked) || (mRenderStates.isLocked()))
                        return;
                mDefaultEnabled = value;
        }

        /** Set vertex winding. */
        public final void setVisibleFaces(VertexWinding value)
        {
                if ((mLocked) || (mRenderStates.isLocked()))
                        return;
                mVisibleFaces = value;
        }
       
        /** Set default vertex winding. */
        public final void setDefaultVisibleFaces(VertexWinding value)
        {
                if ((mLocked) || (mRenderStates.isLocked()))
                        return;
                mDefaultVisibleFaces = value;
        }
}