source: GTP/trunk/Lib/Geom/shared/GTGeometry/include/VertexData.h @ 1069

Revision 1069, 5.0 KB checked in by gumbau, 18 years ago (diff)

MultiIndexData? replaced by IndexData?

Line 
1#ifndef __VERTEXDATA_H__
2#define __VERTEXDATA_H__
3
4namespace Geometry
5{
6        class VertexData
7        {
8        private:
9                unsigned int numverts;
10        public:
11                VertexData(unsigned int numv):numverts(numv){}
12                virtual ~VertexData(void){}
13
14                virtual void Begin(void)=0;
15                virtual void SetVertexCoord(unsigned int i, float x, float y, float z)=0;
16                virtual void SetVertexNormal(unsigned int i, float x, float y, float z)=0;
17                virtual void SetVertexTexCoord(unsigned int i, float x, float y)=0;
18                virtual void End(void)=0;       
19
20                virtual void GetVertexCoord(unsigned int i, float &x, float &y, float &z) const = 0;
21                virtual void GetVertexNormal(unsigned int i, float &x, float &y, float &z) const = 0;
22                virtual void GetVertexTexCoord(unsigned int i, float &x, float &y) const =0;
23
24                unsigned int GetNumVertices(void) const { return numverts; }
25        };
26
27        class IndexData
28        {
29        private:
30                unsigned int numinds, numvalidinds;
31        public:
32                IndexData(unsigned int numi):numinds(numi),numvalidinds(numi){}
33                virtual ~IndexData(void){}
34
35                virtual void Begin(void)=0;
36                virtual void SetIndex(unsigned int i, unsigned int index)=0;
37                virtual void End(void)=0;
38
39//              virtual void UpdateData(int*,int)=0;
40
41                virtual unsigned int GetIndex(unsigned int) const =0;
42                unsigned int GetNumMaxIndices(void) const { return numinds; }
43                unsigned int GetNumValidIndices(void) const { return numvalidinds; }
44                void SetNumValidIndices(unsigned int valid){ numvalidinds=valid; }
45        };
46
47/*      class MultiIndexData
48        {
49        private:
50                unsigned int num_prims, num_total_inds, *num_max_inds, *num_valid_inds;
51        public:
52                MultiIndexData(unsigned int numprims, unsigned int *maxinds){
53                        num_prims=numprims;
54                        num_total_inds=0;
55                        num_max_inds=new unsigned int[numprims];
56                        num_valid_inds=new unsigned int[numprims];
57                        for (unsigned int i=0; i<numprims; i++)
58                        {
59                                num_max_inds[i]=num_valid_inds[i]=maxinds[i];
60                                num_total_inds += maxinds[i];
61                        }
62                }
63
64                ~MultiIndexData(void){
65                        delete[] num_max_inds;
66                        delete[] num_valid_inds;
67                }
68
69                virtual void Begin(void)=0;
70                virtual void SetIndex(unsigned int iprim, unsigned int i, unsigned int index)=0;
71                virtual void End(void)=0;
72
73                virtual unsigned int GetIndex(unsigned int iprim, unsigned int index) const =0;
74                unsigned int GetNumMaxIndices(unsigned int iprim) const { return num_max_inds[iprim]; }
75                unsigned int GetNumValidIndices(unsigned int iprim) const { return num_valid_inds[iprim]; }
76                void SetNumValidIndices(unsigned int iprim, unsigned int valid){ num_valid_inds[iprim]=valid; }
77                unsigned int GetNumPrims(void) const { return num_prims; }
78        };*/
79
80        typedef VertexData* CreateVertexDataFunc(unsigned int numv);
81        typedef CreateVertexDataFunc* CREATEVERTEXDATAFUNC;
82        typedef IndexData* CreateIndexDataFunc(unsigned int numi);
83        typedef CreateIndexDataFunc* CREATEINDEXDATAFUNC;
84/*      typedef MultiIndexData* CreateMultiIndexDataFunc(unsigned int numprims, unsigned int *numi);
85        typedef CreateMultiIndexDataFunc* CREATEMULTIINDEXDATAFUNC;*/
86
87        class DefaultVertexData : public VertexData
88        {
89        private:
90                float *v, *n, *t;
91        public:
92                DefaultVertexData(unsigned int numv);
93                ~DefaultVertexData(void);
94
95                virtual void Begin(void){}
96                virtual void SetVertexCoord(unsigned int i, float x, float y, float z){
97                        v[i*3+0]=x; v[i*3+1]=y; v[i*3+2]=z; }
98                virtual void SetVertexNormal(unsigned int i, float x, float y, float z){
99                        n[i*3+0]=x; n[i*3+1]=y; n[i*3+2]=z; }
100                virtual void SetVertexTexCoord(unsigned int i, float x, float y){
101                        t[i*2+0]=x; t[i*2+1]=y; }
102
103                virtual void End(void){}
104
105                virtual void GetVertexCoord(unsigned int i, float &x, float &y, float &z) const {
106                        x=v[i*3+0];
107                        y=v[i*3+1];
108                        z=v[i*3+2];
109                }
110                virtual void GetVertexNormal(unsigned int i, float &x, float &y, float &z) const {x=n[i*3+0]; y=n[i*3+1]; z=n[i*3+2]; }
111                virtual void GetVertexTexCoord(unsigned int i, float &x, float &y) const {x=t[i*2+0]; y=t[i*2+1]; }
112
113                const float * GetVertexFloatBuffer(void) const { return v; }
114
115        };
116        VertexData *DefaultVertexDataCreator(unsigned int numv);
117
118
119        class DefaultIndexData : public IndexData
120        {
121        private:
122                unsigned int *indices;
123        public:
124                DefaultIndexData(unsigned int numi);
125                ~DefaultIndexData(void);
126
127                virtual void Begin(void){}
128                virtual void SetIndex(unsigned int i, unsigned int index){
129                        indices[i] = index;
130                }
131                virtual void End(void){}
132
133                virtual unsigned int GetIndex(unsigned int i) const {
134                        return indices[i];
135                }
136
137        };
138        IndexData *DefaultIndexDataCreator(unsigned int numi);
139
140/*      class DefaultMultiIndexData : public MultiIndexData
141        {
142        private:
143                unsigned int **indices;
144        public:
145                DefaultMultiIndexData(unsigned int numprims, unsigned int *numi);
146                ~DefaultMultiIndexData(void);
147
148                virtual void Begin(void){}
149                virtual void SetIndex(unsigned int iprim, unsigned int i, unsigned int index){
150                        indices[iprim][i] = index;
151                }
152                virtual void End(void){}
153
154                virtual unsigned int GetIndex(unsigned int iprim, unsigned int i) const {
155                        return indices[iprim][i];
156                }
157
158        };
159        MultiIndexData *DefaultMultiIndexDataCreator(unsigned int numprims, unsigned int *numi);
160*/
161}
162
163#endif
Note: See TracBrowser for help on using the repository browser.