Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
108 chris 1
package com.gebauz.pingK.common.framework.renderstates;
2
 
3
import javax.microedition.khronos.opengles.GL10;
4
 
5
import com.gebauz.pingK.common.framework.GLUtil;
6
 
7
public class BlendingStates extends RenderStatesObject
8
{
9
 
10
        public enum BlendingMode
11
        {
12
                ADD,
13
                ALPHABLEND,
14
                SUBTRACT,
15
//              MIN,    // supported 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
 
28
        public BlendingStates(RenderStates renderStates)
29
        {
30
                super(renderStates);
31
        }
32
 
33
        @Override
34
        public void activate(boolean force)
35
        {
36
                GL10 gl = GLUtil.getGL();
37
 
38
                if ((force) || (mBlendingMode != mCurrentBlendingMode))
39
                {
40
                        mCurrentBlendingMode = mBlendingMode;
41
                        switch (mBlendingMode)
42
                        {
43
                        case ADD:
44
                                {
45
                                        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
46
                                        break;
47
                                }
48
                        case ALPHABLEND:
49
                                {
50
                                        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
51
                                        break;
52
                                }
53
                        case SUBTRACT:
54
                                {
55
                                        gl.glBlendFunc(GL10.GL_ZERO, GL10.GL_SRC_ALPHA);
56
                                        break;
57
                                }
58
                        case MULTIPLY:
59
                                {
60
                                        gl.glBlendFunc(GL10.GL_ZERO, GL10.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(GL10.GL_BLEND);
72
                        }
73
                        else
74
                        {
75
                                gl.glDisable(GL10.GL_BLEND);
76
                        }
77
                }
78
        }
79
 
80
        @Override
81
        public void reset()
82
        {
83
                mEnabled = mDefaultEnabled;
84
                mBlendingMode = mDefaultBlendingMode;
85
        }
86
 
87
 
88
        public final boolean isEnabled() { return mEnabled; }
89
        public final boolean isDefaultEnabled() { return mEnabled; }
90
        public final BlendingMode getBlendingMode() { return mBlendingMode; }
91
        public final BlendingMode getDefaultBlendingMode() { return mDefaultBlendingMode; }
92
 
93
        public final void setEnabled(boolean value)
94
        {
95
                if ((mLocked) || (mRenderStates.isLocked()))
96
                        return;
97
 
98
                mEnabled = value;
99
        }
100
 
101
        public final void setDefaultEnabled(boolean value)
102
        {
103
                if ((mLocked) || (mRenderStates.isLocked()))
104
                        return;
105
 
106
                mDefaultEnabled = value;
107
        }
108
 
109
        public final void setBlendingMode(BlendingMode value)
110
        {
111
                if ((mLocked) || (mRenderStates.isLocked()))
112
                        return;
113
 
114
                mBlendingMode = value;
115
        }
116
 
117
        public final void setDefaultBlendingMode(BlendingMode value)
118
        {
119
                if ((mLocked) || (mRenderStates.isLocked()))
120
                        return;
121
 
122
                mDefaultBlendingMode = value;
123
        }
124
 
125
}
126
 
127