40 #ifndef GLS_GEOMETRY_RESOURCE_H_INCLUDED
41 #define GLS_GEOMETRY_RESOURCE_H_INCLUDED
63 #include "gls_resource_file_mgr.h"
67 #if( defined( GLSGEN_EXPORT_GLSGEOMETRYRESOURCE ) || defined( GLSGEN_IMPORT_GLSGEOMETRYRESOURCE ) || defined( GLS_EXPORT_GENERATED ) || defined( GLS_IMPORT_GENERATED ) ) \
68 && defined( _MSC_VER )
69 # if defined( GLSGEN_EXPORT_GLSGEOMETRYRESOURCE ) || defined( GLS_EXPORT_GENERATED )
70 # define GLSGEN_GlsGeometryResource_EXPORT __declspec( dllexport )
72 # define GLSGEN_GlsGeometryResource_EXPORT __declspec( dllimport )
75 # define GLSGEN_GlsGeometryResource_EXPORT
85 static const unsigned int MAX_TEXTURE_COORDS = 2;
86 static const unsigned int MAX_VERTEX_ATTRIBS = 16;
90 static const unsigned int NORMAL_ATTRIBUTE_SIZE = 3 *
sizeof( float );
92 static const unsigned int COLOR_ATTRIBUTE_SIZE = 4 *
sizeof(
unsigned char );
94 static const unsigned int COLOR_ATTRIBUTE_SIZE =
sizeof(
unsigned int );
96 static const unsigned int SECONDARY_COLOR_ATTRIBUTE_SIZE = 3 *
sizeof(
unsigned char );
97 static const unsigned int TEXTURE_COORDINATE_ATTRIBUTE_SIZE = 2 *
sizeof( float );
98 static const unsigned int TANGENT_ATTRIBUTE_SIZE = 3 *
sizeof( float );
99 static const unsigned int BINORMAL_ATTRIBUTE_SIZE = 3 *
sizeof( float );
105 bool hasSecondaryColor;
107 unsigned int normalType;
108 unsigned int texCoordType;
111 unsigned char numTextureCoords;
112 unsigned char texCoordDimension[ GlsGeometryResource::MAX_TEXTURE_COORDS ];
113 unsigned char numVertexAttribs;
114 GLint vertexAttribNumComponents[ GlsGeometryResource::MAX_VERTEX_ATTRIBS ];
115 GLenum vertexAttribType[ GlsGeometryResource::MAX_VERTEX_ATTRIBS ];
116 GLboolean vertexAttribNormalize[ GlsGeometryResource::MAX_VERTEX_ATTRIBS ];
117 unsigned int vertexAttribSemantic[ GlsGeometryResource::MAX_VERTEX_ATTRIBS ];
122 memset(
this, 0,
sizeof(
TypeDesc ) );
124 for( i = 0; i < GlsGeometryResource::MAX_TEXTURE_COORDS; i++ )
126 texCoordDimension[ i ] = 2;
128 for( i = 0; i < GlsGeometryResource::MAX_VERTEX_ATTRIBS; i++ )
130 vertexAttribNumComponents[ i ] = 4;
133 normalType = GL_FLOAT;
134 texCoordType = GL_FLOAT;
138 void HasNormal(
bool value ) { hasNormal = value; }
139 bool HasNormal(
void )
const {
return hasNormal; }
142 void NormalType(
unsigned int value )
147 unsigned int NormalType(
void )
const {
return normalType; }
149 void TexCoordType(
unsigned int value ) { texCoordType = value; }
150 unsigned int TexCoordType(
void )
const {
return texCoordType; }
153 void HasColor(
bool value )
157 bool HasColor(
void )
const {
return hasColor; }
159 void HasSecondaryColor(
bool value ) { hasSecondaryColor = value; }
160 bool HasSecondaryColor(
void )
const {
return hasSecondaryColor; }
162 void SetNumTextureCoords(
unsigned char value )
164 if( value <= GlsGeometryResource::MAX_TEXTURE_COORDS )
165 numTextureCoords = value;
167 unsigned char GetNumTextureCoords(
void )
const {
return numTextureCoords; }
169 void SetTexCoordDimension(
unsigned char which,
unsigned char value )
171 if( which < GlsGeometryResource::MAX_TEXTURE_COORDS && value > 0 && value < 5 )
172 texCoordDimension[ which ] = value;
174 unsigned char GetTexCoordDimension(
unsigned char which )
const {
return texCoordDimension[ which ]; }
185 if( value <= GlsGeometryResource::MAX_VERTEX_ATTRIBS )
186 numVertexAttribs = value;
188 unsigned char GetNumVertexAttribs(
void )
const {
return numVertexAttribs; }
194 if( which < GlsGeometryResource::MAX_VERTEX_ATTRIBS && value > 0 && value < 5 )
195 vertexAttribNumComponents[ which ] = value;
197 GLint GetVertexAttribComponents(
unsigned char which )
const {
return vertexAttribNumComponents[ which ]; }
203 if( which < GlsGeometryResource::MAX_VERTEX_ATTRIBS )
204 vertexAttribType[ which ] = value;
206 GLenum GetVertexAttribType(
unsigned char which )
const {
return vertexAttribType[ which ]; }
213 if( which < GlsGeometryResource::MAX_VERTEX_ATTRIBS )
214 vertexAttribNormalize[ which ] = value;
216 GLboolean GetVertexAttribNormalize(
unsigned char which )
const {
return vertexAttribNormalize[ which ]; }
224 if( which < GlsGeometryResource::MAX_VERTEX_ATTRIBS )
225 vertexAttribSemantic[ which ] = semanticEnum;
227 int GetVertexAttribSemantic(
unsigned char which )
const {
return vertexAttribSemantic[ which ]; }
238 virtual ~GlsGeometryResource() {}
244 virtual void OnGeometryResourceChanged() = 0;
253 void operator=(
const Observer& ) DISTI_SPECIAL_MEM_FUN_DELETE;
256 void AddObserver(
Observer* observer )
258 _observers.InsertObject( observer );
261 void RemoveObserver( Observer* observer )
263 _observers.DeleteObject( observer );
267 DynamicArray<Observer*> _observers;
269 void OnGeometryResourceChanged()
271 for(
unsigned int i = 0; i < _observers.Count(); ++i )
273 _observers[ i ]->OnGeometryResourceChanged();
290 Vector _boundingVolumeCenter;
291 float _boundingVolumeRadius;
294 static bool _enableVBO;
387 virtual bool HitTest(
unsigned char pickType,
const Vector& pickLinePoint,
const Vector& pickLineDirection,
Vector& collisionPoint ) = 0;
406 DistiAssert( _referenceCount > 0 );
410 if( _referenceCount == 0 )
434 assert( BAD_ID !=
id );
443 assert( BAD_ID != _resourceID );
449 class GlsGeometry_Generic_IndexBufferData;
487 virtual GLSGEN_GlsGeometryResource_EXPORT
bool HitTest(
unsigned char pickType,
const Vector& pickLinePoint,
const Vector& pickLineDirection,
Vector& collisionPoint );
493 virtual GLSGEN_GlsGeometryResource_EXPORT
void DrawIndexBuffer(
unsigned int bufferNumber );
536 GLSGEN_GlsGeometryResource_EXPORT
void ChangeType(
const TypeDesc& type );
541 GLSGEN_GlsGeometryResource_EXPORT
bool LockBuffers();
553 GLSGEN_GlsGeometryResource_EXPORT
unsigned int VertexCount()
const;
559 GLSGEN_GlsGeometryResource_EXPORT
void VertexCount(
unsigned int count );
566 GLSGEN_GlsGeometryResource_EXPORT
void SetVertex( GLuint vertIndex,
const float* value );
580 GLSGEN_GlsGeometryResource_EXPORT
void SetVertices(
const float* floatArray,
581 unsigned int numVertices,
582 unsigned int startVertIndex = 0,
583 unsigned int stride = VERTEX_ATTRIBUTE_SIZE );
592 GLSGEN_GlsGeometryResource_EXPORT
void SetVertex( GLuint vertIndex,
604 GLSGEN_GlsGeometryResource_EXPORT
const float*
GetVertex( GLuint vertIndex );
614 GLSGEN_GlsGeometryResource_EXPORT
void SetNormal( GLuint vertIndex,
float x,
float y,
float z );
625 GLSGEN_GlsGeometryResource_EXPORT
void SetNormals(
const float* floatArray,
626 unsigned int numVertices,
627 unsigned int startVertIndex = 0,
628 unsigned int stride = NORMAL_ATTRIBUTE_SIZE );
637 GLSGEN_GlsGeometryResource_EXPORT
const float*
GetNormal( GLuint vertIndex );
646 GLSGEN_GlsGeometryResource_EXPORT
void SetColor( GLuint vertIndex,
650 unsigned char alpha );
661 GLSGEN_GlsGeometryResource_EXPORT
void SetColors(
const unsigned int* rgbaArray,
662 unsigned int numVertices,
663 unsigned int startVertIndex = 0,
664 unsigned int stride = COLOR_ATTRIBUTE_SIZE );
670 GLSGEN_GlsGeometryResource_EXPORT
void SetColors(
const unsigned int* array );
677 GLSGEN_GlsGeometryResource_EXPORT
unsigned char*
GetColor( GLuint vertIndex );
689 unsigned char blue );
700 GLSGEN_GlsGeometryResource_EXPORT
void SetSecondaryColors(
const unsigned int* rgbArray,
701 unsigned int numVertices,
702 unsigned int startVertIndex = 0,
703 unsigned int stride = SECONDARY_COLOR_ATTRIBUTE_SIZE );
710 GLSGEN_GlsGeometryResource_EXPORT
unsigned char*
GetSecondaryColor( GLuint vertIndex );
720 GLSGEN_GlsGeometryResource_EXPORT
void SetTextureCoord( GLuint vertIndex,
unsigned int whichTexture,
721 const float* textureCoord );
723 GLSGEN_GlsGeometryResource_EXPORT
void SetTextureCoord( GLuint vertIndex,
unsigned int whichTexture,
725 float textureCoordV );
736 GLSGEN_GlsGeometryResource_EXPORT
void SetTextureCoords(
unsigned int whichTexture,
737 const float* textureCoordArray,
738 unsigned int numVertices,
739 unsigned int startVertIndex = 0,
740 unsigned int stride = TEXTURE_COORDINATE_ATTRIBUTE_SIZE );
751 GLSGEN_GlsGeometryResource_EXPORT
const float*
GetTextureCoord( GLuint vertIndex,
unsigned int whichTexture );
759 GLSGEN_GlsGeometryResource_EXPORT
void StoreVertexAttrib( GLuint vertIndex, GLuint attribIndex,
void* value, GLuint sizeBytes );
761 void SetVertexAttrib1fv( GLuint vertIndex, GLuint attribIndex,
const GLfloat* v ) {
StoreVertexAttrib( vertIndex, attribIndex, (
void*)v, 1 *
sizeof(
float ) ); }
762 void SetVertexAttrib2fv( GLuint vertIndex, GLuint attribIndex,
const GLfloat* v ) {
StoreVertexAttrib( vertIndex, attribIndex, (
void*)v, 2 *
sizeof(
float ) ); }
763 void SetVertexAttrib3fv( GLuint vertIndex, GLuint attribIndex,
const GLfloat* v ) {
StoreVertexAttrib( vertIndex, attribIndex, (
void*)v, 3 *
sizeof(
float ) ); }
764 void SetVertexAttrib4fv( GLuint vertIndex, GLuint attribIndex,
const GLfloat* v ) {
StoreVertexAttrib( vertIndex, attribIndex, (
void*)v, 4 *
sizeof(
float ) ); }
767 GLSGEN_GlsGeometryResource_EXPORT
void SetVertexAttribs(
const float* attribArray,
770 unsigned int numVertices,
771 unsigned int startVertIndex = 0,
772 unsigned int stride = TANGENT_ATTRIBUTE_SIZE );
781 GLSGEN_GlsGeometryResource_EXPORT
void*
GetVertexAttrib( GLuint vertIndex, GLuint attribIndex );
788 GLSGEN_GlsGeometryResource_EXPORT
void NumIndexBuffers(
unsigned int count );
794 GLSGEN_GlsGeometryResource_EXPORT
unsigned int GetIndexBufferSize(
unsigned int bufferNum )
const;
801 GLSGEN_GlsGeometryResource_EXPORT
void SetIndexBufferSize(
unsigned int bufferNum,
unsigned int newSize );
808 GLSGEN_GlsGeometryResource_EXPORT
void SetIndex(
unsigned int bufferNum,
unsigned int index,
unsigned int indexValue );
822 GLSGEN_GlsGeometryResource_EXPORT
void SetIndices(
unsigned int bufferNum,
823 const unsigned int* indexArray,
824 unsigned int numIndices,
825 unsigned int startIndex = 0,
826 unsigned int stride =
sizeof(
unsigned int ) );
834 GLSGEN_GlsGeometryResource_EXPORT
unsigned int GetIndex(
unsigned int bufferNum,
unsigned int index );
842 GLSGEN_GlsGeometryResource_EXPORT
void MergeIndexBuffers(
unsigned int dstBufferNum,
unsigned int srcBufferNum );
856 GLSGEN_GlsGeometryResource_EXPORT
void SetIndices(
unsigned int bufferNum,
857 const unsigned int* indexArray,
858 unsigned int numIndices,
859 unsigned int startIndex = 0,
860 unsigned int stride =
sizeof(
unsigned int ) );
868 GLSGEN_GlsGeometryResource_EXPORT
unsigned short GetIndex(
unsigned int bufferNum,
unsigned short index );
876 unsigned int _vertexTupleIndex;
903 GLSGEN_GlsGeometryResource_EXPORT
void DumpNormals();
907 GLSGEN_GlsGeometryResource_EXPORT
void DumpIndices();
918 static GLSGEN_GlsGeometryResource_EXPORT
unsigned int CopyVertexData(
921 unsigned int vertexCount );
930 static GLSGEN_GlsGeometryResource_EXPORT
unsigned int TransformVertexData(
933 unsigned int vertexOffset = 0,
934 unsigned int vertexCount = UINT_MAX );
938 static GLSGEN_GlsGeometryResource_EXPORT
bool GenerateTangentsAndBinormals(
GlsGeometry_Generic* geom );
947 unsigned int _texcoordStride;
948 unsigned int _texcoord2Stride;
949 unsigned int _colorStride;
950 unsigned int _secondaryColorStride;
951 unsigned int _numVertexAttribs;
952 unsigned int _vertexAttribStride[ MAX_VERTEX_ATTRIBS ];
953 unsigned int _vertexAttribSize[ MAX_VERTEX_ATTRIBS ];
962 unsigned int _vertexBufferCount;
963 GLuint _vertexBufferID;
964 bool _vertexBufferUpdated;
981 GLSGEN_GlsGeometryResource_EXPORT
bool BestHit(
const Vector& point,
const Vector& directionVector,
Vector& collisionPoint );
991 GLSGEN_GlsGeometryResource_EXPORT
bool FirstHit(
const Vector& point,
const Vector& directionVector,
Vector& collisionPoint );
993 void InitializeMembers();
997 unsigned int GetTexcoordByteOffset(
unsigned int whichTexture );
999 GLSGEN_GlsGeometryResource_EXPORT
void Destroy();
1003 unsigned int _dataChangedCounter;
1006 void IncDataChangedCounter()
1011 ++_dataChangedCounter;
1016 GLSGEN_GlsGeometryResource_EXPORT GlsGeometry_Generic();
1019 GLSGEN_GlsGeometryResource_EXPORT ~GlsGeometry_Generic();
1022 GlsGeometry_Generic(
const GlsGeometry_Generic& src );
1023 GlsGeometry_Generic& operator=(
const GlsGeometry_Generic& rhs );
void SetIndexBufferSize(unsigned int bufferNum, unsigned int newSize)
void SetColors(const unsigned int *rgbaArray, unsigned int numVertices, unsigned int startVertIndex=0, unsigned int stride=COLOR_ATTRIBUTE_SIZE)
virtual void DrawCleanup(VertexAttribIndexLookup *shaderProgram)
unsigned int VertexCount() const
void SetColor(GLuint vertIndex, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha)
float BoundingVolumeRadius() const
Definition: gls_geometry_resource.h:426
TypeDesc _type
Definition: gls_geometry_resource.h:284
unsigned int GetIndexBufferSize(unsigned int bufferNum) const
Definition: gls_geometry_resource.h:101
virtual void DrawIndexBuffer(unsigned int bufferNumber)=0
static const unsigned int s_invalidDataChangedCounter
Definition: gls_geometry_resource.h:353
void SetTextureCoord(GLuint vertIndex, unsigned int whichTexture, const float *textureCoord)
void SetResourceId(unsigned int id)
Definition: gls_geometry_resource.h:432
void DecrementReference()
Definition: gls_geometry_resource.h:404
unsigned int _referenceCount
Definition: gls_geometry_resource.h:281
Definition: gls_geometry_resource.h:873
void SetNumVertexAttribs(unsigned char value)
Definition: gls_geometry_resource.h:183
virtual bool BoundingVolumeHit(const Vector &point, const Vector &direction)=0
The GlsMatrixAffine class.
void MergeIndexBuffers(unsigned int dstBufferNum, unsigned int srcBufferNum)
const Vector & BoundingVolumeCenter() const
Definition: gls_geometry_resource.h:423
void SetVertexAttribSemantic(unsigned char which, int semanticEnum)
Definition: gls_geometry_resource.h:222
unsigned char * GetColor(GLuint vertIndex)
bool BestHit(const Vector &point, const Vector &directionVector, Vector &collisionPoint)
const float * GetTextureCoord(GLuint vertIndex, unsigned int whichTexture)
void SetVertexAttribNormalize(unsigned char which, GLboolean value)
Definition: gls_geometry_resource.h:211
void SetNormals(const float *floatArray, unsigned int numVertices, unsigned int startVertIndex=0, unsigned int stride=NORMAL_ATTRIBUTE_SIZE)
virtual bool BoundingVolumeHit(const Vector &point, const Vector &direction)
virtual unsigned int StatsIndexBufferPolygonCount(unsigned int bufferNumber)=0
Definition: gls_render_effect.h:81
void SetIndices(unsigned int bufferNum, const unsigned int *indexArray, unsigned int numIndices, unsigned int startIndex=0, unsigned int stride=sizeof(unsigned int))
virtual unsigned int StatsIndexBufferVertexCount(unsigned int bufferNumber)=0
virtual unsigned int GetDataChangedCounter() const
void SetVertexAttribType(unsigned char which, GLenum value)
Definition: gls_geometry_resource.h:201
Definition: gls_geometry_resource.h:241
void StoreVertexAttrib(GLuint vertIndex, GLuint attribIndex, void *value, GLuint sizeBytes)
static const unsigned int VERTEX_ATTRIBUTE_SIZE
Definition: gls_geometry_resource.h:89
void SetSecondaryColor(GLuint vertIndex, unsigned char red, unsigned char green, unsigned char blue)
void SetVertices(const float *floatArray, unsigned int numVertices, unsigned int startVertIndex=0, unsigned int stride=VERTEX_ATTRIBUTE_SIZE)
bool FirstHit(const Vector &point, const Vector &directionVector, Vector &collisionPoint)
unsigned char * GetSecondaryColor(GLuint vertIndex)
Definition: gls_geometry_resource.h:82
void IncrementReference()
Definition: gls_geometry_resource.h:399
void SetSecondaryColors(const unsigned int *rgbArray, unsigned int numVertices, unsigned int startVertIndex=0, unsigned int stride=SECONDARY_COLOR_ATTRIBUTE_SIZE)
static void SetCreateInstanceMakesHalfFloat(bool value)
static GlsGeometryResource * CreateInstance(const TypeDesc &type=GlsGeometryResource::TypeDesc())
unsigned int _numIndexBuffers
Definition: gls_geometry_resource.h:287
void * GetVertexAttrib(GLuint vertIndex, GLuint attribIndex)
The disti::Vertex class. A class for manipulating 3D vertices.
virtual void DrawIndexBuffer(unsigned int bufferNumber)
virtual void UpdateBoundingVolume(void)
void SetIndex(unsigned int bufferNum, unsigned int index, unsigned int indexValue)
virtual void GetExtents(Vector &min, Vector &max, const GlsMatrixType *matrix=NULL)
virtual unsigned int StatsIndexBufferVertexCount(unsigned int bufferNumber)
Definition: gls_geometry_resource.h:463
const TypeDesc & Type()
Definition: gls_geometry_resource.h:396
static unsigned int CopyVertexData(GlsGeometry_Generic *dstGeom, unsigned int dstOffset, GlsGeometry_Generic *srcGeom, unsigned int srcOffset, unsigned int vertexCount)
virtual unsigned int GetDataChangedCounter() const =0
virtual void DrawSetup(VertexAttribIndexLookup *shaderProgram)
virtual bool HitTest(unsigned char pickType, const Vector &pickLinePoint, const Vector &pickLineDirection, Vector &collisionPoint)=0
static GlsGeometry_Generic * CreateEmptyInstance()
void VertexSort(VertexSortData *sortData)
unsigned int GetResourceId(void)
Definition: gls_geometry_resource.h:441
unsigned int GetIndex(unsigned int bufferNum, unsigned int index)
unsigned int _resourceID
Definition: gls_geometry_resource.h:278
virtual void FreeOpenGLBuffers()=0
void SetVertex(GLuint vertIndex, const float *value)
const float * GetVertex(GLuint vertIndex)
virtual void GetExtents(Vector &min, Vector &max, const GlsMatrixType *matrix=NULL)=0
void CopyVertexAndIndexBuffers(GlsGeometry_Generic *rhs)
void ChangeType(const TypeDesc &type)
void SetNormal(GLuint vertIndex, float x, float y, float z)
static GlsGeometry_Generic * CreateInstance(const TypeDesc &type)
static GlsGeometry_Generic * CreateFromBinaryResource(GlsResourceFileMgr::BinaryResource *data)
Definition: gls_geometry_resource.h:940
Contains the DistiAssert macro.
void SetVertexAttribComponents(unsigned char which, GLint value)
Definition: gls_geometry_resource.h:192
virtual void UpdateBoundingVolume()=0
Definition: gls_resource_file_mgr.h:38
Definition: gls_resource_file_mgr.h:60
unsigned int _normalStride
Definition: gls_geometry_resource.h:946
const float * GetNormal(GLuint vertIndex)
unsigned int NumIndexBuffers() const
Definition: gls_geometry_resource.h:417
Definition: bmpimage.h:46
virtual void FreeOpenGLBuffers()
GlsGeometry_Generic_IndexBufferData * _indexBuffers
Definition: gls_geometry_resource.h:967
virtual void DrawSetup(VertexAttribIndexLookup *shaderProgram)=0
virtual unsigned int StatsIndexBufferPolygonCount(unsigned int bufferNumber)
Definition: gls_geometry_resource.h:469
virtual void DrawCleanup(VertexAttribIndexLookup *shaderProgram)=0
virtual bool HitTest(unsigned char pickType, const Vector &pickLinePoint, const Vector &pickLineDirection, Vector &collisionPoint)
Definition: gls_geometry_resource.h:453
The disti::GlsRenderEffect class.