Subversion Repositories AndroidProjects

Rev

Rev 218 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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