Subversion Repositories AndroidProjects

Rev

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