Subversion Repositories AndroidProjects

Rev

Rev 787 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
787 chris 1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
 
7
using Tao.OpenGl;
1451 chris 8
#pragma warning disable 0618
787 chris 9
 
10
namespace BauzoidNET.graphics.renderstates
11
{
12
    public class BlendingStates : RenderStatesObject
13
    {
14
        public enum BlendingMode
15
            {
16
                    ADD,
17
                    ALPHABLEND,
18
                    SUBTRACT,
19
    //          MIN,    // unsupported on OpenGL ES
20
    //          MAX,    // unsupported on OpenGL ES
21
                    MULTIPLY
22
            };
23
 
24
            private bool mEnabled = false;
25
            private BlendingMode mBlendingMode = BlendingMode.ALPHABLEND;
26
            private bool mCurrentlyEnabled = false;
27
            private BlendingMode mCurrentBlendingMode = BlendingMode.ALPHABLEND;
28
            private bool mDefaultEnabled = false;
29
            private BlendingMode mDefaultBlendingMode = BlendingMode.ALPHABLEND;
30
 
31
            /** Constructor. */
32
            public BlendingStates(RenderStates renderStates) : base(renderStates)
33
            {
34
            }
35
 
36
            /** Activate the render state. Manages multiple same-state changes. */
37
            public override void activate(bool force)
38
            {
39
                    if ((force) || (mBlendingMode != mCurrentBlendingMode))
40
                    {
41
                            mCurrentBlendingMode = mBlendingMode;
42
                            switch (mBlendingMode)
43
                            {
44
                            case BlendingMode.ADD:
45
                                    {
46
                                            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE);
47
                                            break;
48
                                    }
49
                            case BlendingMode.ALPHABLEND:
50
                                    {
51
                                            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
52
                                            break;
53
                                    }
54
                            case BlendingMode.SUBTRACT:
55
                                    {
56
                                            Gl.glBlendFunc(Gl.GL_ZERO, Gl.GL_SRC_ALPHA);
57
                                            break;
58
                                    }
59
                            case BlendingMode.MULTIPLY:
60
                                    {
61
                                            Gl.glBlendFunc(Gl.GL_ZERO, Gl.GL_SRC_COLOR);
62
                                            break;
63
                                    }
64
                            }
65
                    }
66
 
67
                    if ((force) || (mEnabled != mCurrentlyEnabled))
68
                    {
69
                            mCurrentlyEnabled = mEnabled;
70
                            if (mEnabled)
71
                            {
72
                                    Gl.glEnable(Gl.GL_BLEND);
73
                            }
74
                            else
75
                            {
76
                                    Gl.glDisable(Gl.GL_BLEND);
77
                            }
78
                    }
79
            }
80
 
81
            /** Reset to default values. */
82
        public override void reset()
83
            {  
84
                    if ((mLocked) || (mRenderStates.isLocked()))
85
                            return;
86
                    mEnabled = mDefaultEnabled;
87
                    mBlendingMode = mDefaultBlendingMode;
88
            }  
89
 
90
            /** Check if blending is enabled. */
91
            public bool isEnabled()
92
            {
93
                    return mEnabled;
94
            }
95
 
96
            /** Check if blending is enabled by default. */
97
            public bool isDefaultEnabled()
98
            {
99
                    return mEnabled;
100
            }
101
 
102
            /** Check blending mode. */
103
            public BlendingMode getBlendingMode()
104
            {
105
                    return mBlendingMode;
106
            }
107
 
108
            /** Check default blending mode. */
109
            public BlendingMode getDefaultBlendingMode()
110
            {
111
                    return mDefaultBlendingMode;
112
            }
113
 
114
            /** Set enabled state. */
115
            public void setEnabled(bool value)
116
            {
117
                    if ((mLocked) || (mRenderStates.isLocked()))
118
                            return;
119
 
120
                    mEnabled = value;
121
            }
122
 
123
            /** Set default enabled state. */
124
            public void setDefaultEnabled(bool value)
125
            {
126
                    if ((mLocked) || (mRenderStates.isLocked()))
127
                            return;
128
 
129
                    mDefaultEnabled = value;
130
            }
131
 
132
            /** Set blending mode. */
133
            public void setBlendingMode(BlendingMode value)
134
            {
135
                    if ((mLocked) || (mRenderStates.isLocked()))
136
                            return;
137
 
138
                    mBlendingMode = value;
139
            }
140
 
141
            /** Set default blending mode. */
142
            public void setDefaultBlendingMode(BlendingMode value)
143
            {
144
                    if ((mLocked) || (mRenderStates.isLocked()))
145
                            return;
146
 
147
                    mDefaultBlendingMode = value;
148
            }
149
 
150
    }
151
}