00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_PRIMITIVE_BLOCK_H
00027 #define NL_PRIMITIVE_BLOCK_H
00028
00029 #include "nel/misc/types_nl.h"
00030 #include <vector>
00031
00032 namespace NLMISC
00033 {
00034 class IStream;
00035 };
00036
00037 namespace NL3D {
00038
00039
00044
00045
00046
00047
00048 class CPrimitiveBlock
00049 {
00050 private:
00051
00052 uint32 _NbTris;
00053 uint32 _TriCapacity;
00054 std::vector<uint32> _Tri;
00055
00056
00057 uint32 _NbQuads;
00058 uint32 _QuadCapacity;
00059 std::vector<uint32> _Quad;
00060
00061
00062 uint32 _NbLines;
00063 uint32 _LineCapacity;
00064 std::vector<uint32> _Line;
00065
00067
00068 uint32 _StripIdx;
00069 uint32* _Strip;
00070 uint32 _FanIdx;
00071 uint32* _Fan;
00072 public:
00073 CPrimitiveBlock(void)
00074 {_TriCapacity=_NbTris= _NbQuads=_QuadCapacity=_NbLines=_LineCapacity= 0;};
00075 ~CPrimitiveBlock(void) {};
00076
00077
00078
00079
00081 void reserveLine(uint32 n);
00083 uint32 capacityLine() const {return _LineCapacity;}
00085 void setNumLine(uint32 n);
00087 uint32 getNumLine(void) const {return _NbLines;}
00088
00090 void setLine(uint lineIdx, uint32 vidx0, uint32 vidx1);
00092 void addLine(uint32 vidx0, uint32 vidx1);
00093
00094 uint32* getLinePointer(void);
00095 const uint32* getLinePointer(void) const ;
00096
00097
00098
00099
00100
00102 void reserveTri(uint32 n);
00104 uint32 capacityTri() {return _TriCapacity;}
00106 void setNumTri(uint32 n);
00108 uint32 getNumTri(void) const {return _NbTris;}
00109
00111 void setTri(uint triIdx, uint32 vidx0, uint32 vidx1, uint32 vidx2);
00113 void addTri(uint32 vidx0, uint32 vidx1, uint32 vidx2);
00114
00115 uint32* getTriPointer(void);
00116 const uint32* getTriPointer(void) const ;
00117
00118
00119
00120
00121
00122
00126 void reserveQuad(uint32 n);
00127
00131 uint32 capacityQuad() { return _QuadCapacity; }
00132
00136 void setNumQuad(uint32 n);
00137
00141 uint32 getNumQuad(void) const { return _NbQuads; }
00142
00146 void setQuad(uint quadIdx, uint32 vidx0, uint32 vidx1, uint32 vidx2, uint32 vidx3);
00147
00149 void addQuad(uint32 vidx0, uint32 vidx1, uint32 vidx2, uint32 vidx3);
00150
00154 uint32* getQuadPointer(void);
00155
00157 const uint32* getQuadPointer(void) const ;
00158
00160 uint32 getNumTriangles ()
00161 {
00162
00163 return _NbTris+2*_NbQuads+_NbLines;
00164 }
00165
00166 void serial(NLMISC::IStream &f);
00167 };
00168
00169
00170 }
00171
00172
00173 #endif // NL_PRIMITIVE_BLOCK_H
00174
00175