Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
835 chris 1
package com.gebauz.bauzoid.graphics.renderstates;
2
 
3
import com.badlogic.gdx.Gdx;
4
import com.badlogic.gdx.graphics.GL20;
5
 
6
/** Manages renderstates for blending. */
7
public class BlendingStates extends RenderStatesObject
8
{
9
 
10
        public enum BlendingMode
11
        {
12
                ADD,
13
                ALPHABLEND,
14
                SUBTRACT,
15
//              MIN,    // unsupported on OpenGL ES
16
//              MAX,    // unsupported on OpenGL ES
17
                MULTIPLY
18
        };
19
 
20
        private boolean mEnabled = false;
21
        private BlendingMode mBlendingMode = BlendingMode.ALPHABLEND;
22
        private boolean mCurrentlyEnabled = false;
23
        private BlendingMode mCurrentBlendingMode = BlendingMode.ALPHABLEND;
24
        private boolean mDefaultEnabled = false;
25
        private BlendingMode mDefaultBlendingMode = BlendingMode.ALPHABLEND;
26
 
27
        /** Constructor. */
28
        public BlendingStates(RenderStates renderStates)
29
        {
30
                super(renderStates);
31
        }
32
 
33
        /** Activate the render state. Manages multiple same-state changes. */
34
        @Override
35
        public void activate(boolean force)
36
        {
37
                if ((force) || (mBlendingMode != mCurrentBlendingMode))
38
                {
39
                        mCurrentBlendingMode = mBlendingMode;
40
                        switch (mBlendingMode)
41
                        {
42
                        case ADD:
43
                                {
44
                                        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE);
45
                                        break;
46
                                }
47
                        case ALPHABLEND:
48
                                {
49
                                        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
50
                                        break;
51
                                }
52
                        case SUBTRACT:
53
                                {
54
                                        Gdx.gl.glBlendFunc(GL20.GL_ZERO, GL20.GL_SRC_ALPHA);
55
                                        break;
56
                                }
57
                        case MULTIPLY:
58
                                {
59
                                        Gdx.gl.glBlendFunc(GL20.GL_ZERO, GL20.GL_SRC_COLOR);
60
                                        break;
61
                                }
62
                        }
63
                }
64
 
65
                if ((force) || (mEnabled != mCurrentlyEnabled))
66
                {
67
                        mCurrentlyEnabled = mEnabled;
68
                        if (mEnabled)
69
                        {
70
                                Gdx.gl.glEnable(GL20.GL_BLEND);
71
                        }
72
                        else
73
                        {
74
                                Gdx.gl.glDisable(GL20.GL_BLEND);
75
                        }
76
                }
77
        }
78
 
79
        /** Reset to default values. */
80
        @Override
81
        public 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 final boolean isEnabled()
91
        {
92
                return mEnabled;
93
        }
94
 
95
        /** Check if blending is enabled by default. */
96
        public final boolean isDefaultEnabled()
97
        {
98
                return mEnabled;
99
        }
100
 
101
        /** Check blending mode. */
102
        public final BlendingMode getBlendingMode()
103
        {
104
                return mBlendingMode;
105
        }
106
 
107
        /** Check default blending mode. */
108
        public final BlendingMode getDefaultBlendingMode()
109
        {
110
                return mDefaultBlendingMode;
111
        }
112
 
113
        /** Set enabled state. */
114
        public final void setEnabled(boolean value)
115
        {
116
                if ((mLocked) || (mRenderStates.isLocked()))
117
                        return;
118
 
119
                mEnabled = value;
120
        }
121
 
122
        /** Set default enabled state. */
123
        public final void setDefaultEnabled(boolean value)
124
        {
125
                if ((mLocked) || (mRenderStates.isLocked()))
126
                        return;
127
 
128
                mDefaultEnabled = value;
129
        }
130
 
131
        /** Set blending mode. */
132
        public final 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 final void setDefaultBlendingMode(BlendingMode value)
142
        {
143
                if ((mLocked) || (mRenderStates.isLocked()))
144
                        return;
145
 
146
                mDefaultBlendingMode = value;
147
        }
148
 
149
}
150
 
151