Subversion Repositories AndroidProjects

Rev

Rev 800 | 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 Tao.OpenGl;
#pragma warning disable 0618

namespace BauzoidNET.graphics.renderstates
{
    public class CullingStates : RenderStatesObject
    {
        /** Vertex winding. */
            public enum VertexWinding
            {
                    CLOCKWISE,
                    COUNTERCLOCKWISE
            }

        private bool mEnabled = false;
            private VertexWinding mVisibleFaces = VertexWinding.CLOCKWISE;
        private bool mCurrentlyEnabled = false;
            private VertexWinding mCurrentVisibleFaces = VertexWinding.CLOCKWISE;
            private bool mDefaultEnabled = false;
            private VertexWinding mDefaultVisibleFaces = VertexWinding.CLOCKWISE;
       
            /** Constructor. */
            public CullingStates(RenderStates renderStates) : base(renderStates)
            {
            }
       
            /** Activate the render state. */
        public override void activate(bool force)
            {
                    if ((force) || (mEnabled != mCurrentlyEnabled))
                    {
                            mCurrentlyEnabled = mEnabled;
                            if (mEnabled)
                                    Gl.glEnable(Gl.GL_CULL_FACE);
                            else
                                    Gl.glDisable(Gl.GL_CULL_FACE);
                    }
               
                    if ((force) || (mVisibleFaces != mCurrentVisibleFaces))
                    {
                            mCurrentVisibleFaces = mVisibleFaces;
                            switch (mVisibleFaces)
                            {
                            case VertexWinding.CLOCKWISE:
                                    Gl.glFrontFace(Gl.GL_CW);
                                    break;
                            case VertexWinding.COUNTERCLOCKWISE:
                                    Gl.glFrontFace(Gl.GL_CCW);
                                    break;
                            }
                    }
            }
       
            /** Reset to default values. */
            public override void reset()
            {
                    if ((mLocked) || (mRenderStates.isLocked()))
                            return;
               
                    mEnabled = mDefaultEnabled;
                    mVisibleFaces = mDefaultVisibleFaces;
            }
       
            /** Check enabled state. */
            public bool isEnabled()
            {
                    return mEnabled;
            }
       
            /** Check default enabled state. */
            public bool isDefaultEnabled()
            {
                    return mDefaultEnabled;
            }
       
            /** Get vertex winding. */
            public VertexWinding getVisibleFaces()
            {
                    return mVisibleFaces;
            }
       
            /** Get default vertex winding. */
            public VertexWinding getDefaultVisibleFaces()
            {
                    return mDefaultVisibleFaces;
            }
       
            /** Set enabled state. */
            public void setEnabled(bool value)
            {
                    if ((mLocked) || (mRenderStates.isLocked()))
                            return;
                    mEnabled = value;
            }
       
            /** Set default enabled state. */
            public void setDefaultEnabled(bool value)
            {
                    if ((mLocked) || (mRenderStates.isLocked()))
                            return;
                    mDefaultEnabled = value;
            }

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