Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1051 chris 1
package com.gebauz.bauzoid.graphics.model;
2
 
3
import com.gebauz.bauzoid.graphics.GraphicsObject;
4
import com.gebauz.bauzoid.graphics.renderstates.RenderStatesConfiguration;
5
import com.gebauz.bauzoid.graphics.shader.Effect;
6
import com.gebauz.bauzoid.graphics.shader.Technique;
7
 
8
/** Bath render group of a mesh that manages the effect, techniques, and variables attached to this group. */
9
public class MeshGroup extends GraphicsObject
10
{
11
        public class TechniqueRef
12
        {
13
                private Technique mStaticTechnique = null;
14
                private Technique mSkinnedTechnique = null;
15
 
16
                public TechniqueRef(Technique staticTechnique, Technique skinnedTechnique)
17
                {
18
                        mStaticTechnique = staticTechnique;
19
                        mSkinnedTechnique = skinnedTechnique;
20
                }
21
 
22
                public void dispose()
23
                {
24
                        mStaticTechnique = null;
25
                        mSkinnedTechnique = null;
26
                }
27
 
28
                public Technique getSkinnedTechnique()
29
                {
30
                        return mSkinnedTechnique;
31
                }
32
 
33
                public Technique getStaticTechnique()
34
                {
35
                        return mStaticTechnique;
36
                }
37
        };
38
 
39
        private Mesh mParentMesh;
40
        private String mName;
41
 
42
        private int mFirstIndex = 0;
43
        private int mLastIndex = 0;
44
        private int mFirstVertex = 0;
45
        private int mLastVertex = 0;
46
 
47
        private Effect mEffect = null;
48
        private TechniqueRef[] mTechniques = null;
49
        private RenderStatesConfiguration mRenderStates = null;
50
 
51
        // references to techniques
52
 
53
        /** Constructor. */
54
        public MeshGroup(Mesh parentMesh, String name, int firstIndex, int lastIndex, int firstVertex, int lastVertex)
55
        {
56
                super(parentMesh.getGraphics());
57
 
58
                mParentMesh = parentMesh;
59
                mName = name;
60
 
61
                mFirstIndex = firstIndex;
62
                mLastIndex = lastIndex;
63
                mFirstVertex = firstVertex;
64
                mLastVertex = lastVertex;
65
        }
66
 
67
        /** Constructor. */
68
        public MeshGroup(Mesh parentMesh, String name)
69
        {
70
                super(parentMesh.getGraphics());
71
 
72
                mParentMesh = parentMesh;
73
                mName = name;
74
        }
75
 
76
        /** Destroy internal data. */
77
        public void dispose()
78
        {
79
                if (mTechniques != null)
80
                {
81
                        for (TechniqueRef tech : mTechniques)
82
                        {
83
                                tech.dispose();
84
                        }
85
                        mTechniques = null;
86
                }
87
 
88
                if (mEffect != null)
89
                {
90
                        mEffect.dispose();
91
                        mEffect = null;
92
                }
93
        }
94
 
95
        /** Set the associated effect. */
96
        public void setEffect(Effect effect)
97
        {
98
                mEffect = effect;
99
        }
100
 
101
        /** Render this group using a mesh's specified Geometry using the default technique. */
102
        public void render()
103
        {
104
                render(0);
105
        }
106
 
107
        /** Render this group using a mesh's specified Geometry using the specified static technique. */
108
        public void render(int technique)
109
        {
110
                render(technique, false);
111
        }
112
 
113
        /** Render this group using a mesh's specified Geometry using the specified skinned or static technique. */
114
        public void render(int technique, boolean skinned)
115
        {
116
                if (mTechniques == null)
117
                        return;
118
 
119
                Technique tech = null;
120
 
121
                if (technique < mTechniques.length)
122
                {
123
                        if (skinned && (mTechniques[technique] != null))
124
                        {
125
                                tech = mTechniques[technique].getSkinnedTechnique();
126
                        }
127
                        else
128
                        {
129
                                tech = mTechniques[technique].getStaticTechnique();
130
                        }
131
                }
132
 
133
                if (tech == null)
134
                        return;
135
 
136
                if (mRenderStates != null)
137
                {
138
                        mRenderStates.apply();
139
                }
140
 
141
                tech.activate();
142
                getRenderStates().activate();
143
                mParentMesh.getGeometry().render(mFirstIndex, mLastIndex, mFirstVertex, mLastVertex);
144
                getRenderStates().deactivate();
145
                tech.deactivate();
146
        }
147
 
148
        /** Get name. */
149
        public final String getName()
150
        {
151
                return mName;
152
        }
153
 
154
        /** Get technique references. */
155
        public final void setTechniqueRefs(TechniqueRef[] techs)
156
        {
157
                mTechniques = techs;
158
        }
159
 
160
        /** Set indices. */
161
        public final void setIndices(int firstIndex, int lastIndex, int firstVertex, int lastVertex)
162
        {
163
                mFirstIndex = firstIndex;
164
                mLastIndex = lastIndex;
165
                mFirstVertex = firstVertex;
166
                mLastVertex = lastVertex;
167
        }
168
 
169
        /** Set render states configuration. */
170
        public final void setRenderStates(RenderStatesConfiguration rs)
171
        {
172
                mRenderStates = rs;
173
        }
174
 
175
}
176
 
177