From: <axl...@us...> - 2009-03-16 00:09:09
|
Revision: 182 http://hgengine.svn.sourceforge.net/hgengine/?rev=182&view=rev Author: axlecrusher Date: 2009-03-16 00:09:00 +0000 (Mon, 16 Mar 2009) Log Message: ----------- clean up bounding boxes and rendering Modified Paths: -------------- Mercury2/src/BoundingBox.cpp Mercury2/src/BoundingBox.h Mercury2/src/HGMDLMesh.cpp Mercury2/src/MercuryAsset.cpp Mercury2/src/MercuryAsset.h Mercury2/src/MercuryVBO.cpp Mercury2/src/MercuryVBO.h Mercury2/src/RenderableNode.cpp Mercury2/src/RenderableNode.h Modified: Mercury2/src/BoundingBox.cpp =================================================================== --- Mercury2/src/BoundingBox.cpp 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/BoundingBox.cpp 2009-03-16 00:09:00 UTC (rev 182) @@ -41,22 +41,17 @@ bb.m_normals[1] = (m * m_normals[1]).Normalize(); bb.m_normals[2] = (m * m_normals[2]).Normalize(); *this = bb; -// return bb; } -RenderableBoundingBox::RenderableBoundingBox(const BoundingBox* bb) - :MercuryAsset(), m_bb(bb) +void BoundingBox::Render() { -} +// BoundingBox gbb = *this; -void RenderableBoundingBox::Render(MercuryNode* node) -{ - BoundingBox gbb = *m_bb; - gbb.Transform( GetGlobalMatrix() ); - if ( FRUSTUM->Clip( gbb ) ) return; +// gbb.Transform( ((RenderableNode*)node)->GetGlobalMatrix() ); +// if ( FRUSTUM->Clip( gbb ) ) return; - const float* center = m_bb->GetCenter(); - const float* extend = m_bb->GetExtend(); + const float* center = GetCenter(); + const float* extend = GetExtend(); glPushAttrib( GL_CURRENT_BIT ); glBegin(GL_LINES); Modified: Mercury2/src/BoundingBox.h =================================================================== --- Mercury2/src/BoundingBox.h 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/BoundingBox.h 2009-03-16 00:09:00 UTC (rev 182) @@ -1,7 +1,7 @@ #ifndef BOUNDINGBOX_H #define BOUNDINGBOX_H -#include <MercuryAsset.h> +#include <MercuryNode.h> #include <MercuryVertex.h> #include <MercuryMatrix.h> #include <stdint.h> @@ -9,8 +9,11 @@ class BoundingVolume { public: + virtual ~BoundingVolume() {}; + virtual void LoadFromBinary(char* data) = 0; virtual void Transform( const MercuryMatrix& m ) = 0; + virtual void Render() {}; }; class BoundingBox : public BoundingVolume @@ -18,6 +21,7 @@ public: BoundingBox() {}; BoundingBox(const MercuryVertex& center, const MercuryVertex& extend); + virtual ~BoundingBox() {}; virtual void LoadFromBinary(char* data); @@ -26,6 +30,8 @@ virtual void Transform( const MercuryMatrix& m ); const MercuryVector& Normal(uint8_t i) const { return m_normals[i]; } + + virtual void Render(); private: void ComputeNormals(); @@ -35,7 +41,7 @@ MercuryVector m_normals[3]; }; - +/* class RenderableBoundingBox : public MercuryAsset { public: @@ -45,7 +51,7 @@ private: const BoundingBox* m_bb; }; - +*/ #endif /**************************************************************************** Modified: Mercury2/src/HGMDLMesh.cpp =================================================================== --- Mercury2/src/HGMDLMesh.cpp 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/HGMDLMesh.cpp 2009-03-16 00:09:00 UTC (rev 182) @@ -87,9 +87,9 @@ { data = new char[length]; hgmdl->Read( data, length ); - - m_boundingBox = new BoundingBox(); - m_boundingBox->LoadFromBinary( data ); + + m_boundingVolume = new BoundingBox(); + m_boundingVolume->LoadFromBinary( data ); } SAFE_DELETE_ARRAY(data); Modified: Mercury2/src/MercuryAsset.cpp =================================================================== --- Mercury2/src/MercuryAsset.cpp 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/MercuryAsset.cpp 2009-03-16 00:09:00 UTC (rev 182) @@ -2,10 +2,14 @@ #include <RenderableNode.h> MercuryAsset::MercuryAsset() - :m_isInstanced(false) + :m_isInstanced(false), m_boundingVolume(NULL) { } +MercuryAsset::~MercuryAsset() +{ + SAFE_DELETE(m_boundingVolume); +} void MercuryAsset::Init(MercuryNode* node) { @@ -68,11 +72,6 @@ } -const MercuryMatrix& MercuryAsset::GetGlobalMatrix() const -{ - return GLOBALMATRIX; -} - std::map<MString, MercuryAsset*> AssetFactory::m_assetInstances; /*************************************************************************** Modified: Mercury2/src/MercuryAsset.h =================================================================== --- Mercury2/src/MercuryAsset.h 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/MercuryAsset.h 2009-03-16 00:09:00 UTC (rev 182) @@ -6,12 +6,13 @@ #include <MessageHandler.h> #include <map> #include <MercuryMatrix.h> +#include <BoundingBox.h> class MercuryAsset : public RefBase, MessageHandler { public: MercuryAsset(); - virtual ~MercuryAsset() {}; + virtual ~MercuryAsset(); virtual void Init(MercuryNode* node); @@ -23,9 +24,9 @@ virtual void LoadFromXML(const XMLNode& node) {}; inline void IsInstanced(bool b) { m_isInstanced = b; } - const MercuryMatrix& GetGlobalMatrix() const; protected: bool m_isInstanced; + BoundingVolume* m_boundingVolume; }; class AssetFactory Modified: Mercury2/src/MercuryVBO.cpp =================================================================== --- Mercury2/src/MercuryVBO.cpp 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/MercuryVBO.cpp 2009-03-16 00:09:00 UTC (rev 182) @@ -10,7 +10,7 @@ #define BUFFER_OFFSET(i) ((char*)NULL + (i)) MercuryVBO::MercuryVBO() - :MercuryAsset(), m_initiated(false), m_boundingBox(NULL) + :MercuryAsset(), m_initiated(false) { m_bufferIDs[0] = m_bufferIDs[1] = 0; } @@ -19,7 +19,6 @@ { if (m_bufferIDs[0]) glDeleteBuffersARB(2, m_bufferIDs); m_bufferIDs[0] = m_bufferIDs[1] = 0; - SAFE_DELETE(m_boundingBox); } void MercuryVBO::Render(MercuryNode* node) @@ -54,11 +53,7 @@ m_lastVBOrendered = this; - if (m_boundingBox) - { - RenderableBoundingBox rbb(m_boundingBox); - rbb.Render(node); - } + if (m_boundingVolume) m_boundingVolume->Render(); } void MercuryVBO::InitVBO() Modified: Mercury2/src/MercuryVBO.h =================================================================== --- Mercury2/src/MercuryVBO.h 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/MercuryVBO.h 2009-03-16 00:09:00 UTC (rev 182) @@ -31,7 +31,6 @@ protected: AlignedBuffer<float> m_vertexData; AlignedBuffer<uint16_t> m_indexData; - BoundingBox* m_boundingBox; static MSemaphore m_vboBatches; }; Modified: Mercury2/src/RenderableNode.cpp =================================================================== --- Mercury2/src/RenderableNode.cpp 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/RenderableNode.cpp 2009-03-16 00:09:00 UTC (rev 182) @@ -24,7 +24,8 @@ m_render.clear(); m_postrender.clear(); } - +/* +//this function exists for threaded rendering void RenderableNode::Update(float dTime) { static unsigned long waitTime = 0; @@ -41,7 +42,7 @@ UpdateWaited += waited; } - +*/ void RenderableNode::Render() { list< MercuryAsset* >::iterator i; @@ -116,17 +117,15 @@ RenderableNode* rn; if ( ( rn = Cast(n) ) ) { +/* MSemaphoreDecOnDestroy s( &(rn->m_semaphore) ); - int unsigned long waited = rn->SpinlockWait(1, waitTime); - if (waited > 0) - waitTime = (waitTime<1000000)?waitTime+1000:waitTime; - else - waitTime = (waitTime!=0)?waitTime-1000:0; - + if (waited > 0) waitTime = (waitTime<1000000)?waitTime+1000:waitTime; + else waitTime = (waitTime!=0)?waitTime-1000:0; RenderWaited += waited; - +*/ // ++RenderWaited += rn->Spinlock(1); + rn->Render(); } @@ -159,7 +158,7 @@ MercuryNode::LoadFromXML( node ); } - +/* unsigned long RenderableNode::Spinlock( unsigned long value ) { unsigned long waited = 0; @@ -178,9 +177,9 @@ } return waited; } +*/ - /*************************************************************************** * Copyright (C) 2008 by Joshua Allen * * * Modified: Mercury2/src/RenderableNode.h =================================================================== --- Mercury2/src/RenderableNode.h 2009-03-15 22:17:56 UTC (rev 181) +++ Mercury2/src/RenderableNode.h 2009-03-16 00:09:00 UTC (rev 182) @@ -21,7 +21,7 @@ ~RenderableNode(); virtual void Render(); - virtual void Update(float dTime); +// virtual void Update(float dTime); ///Returnes true if N is of type RenderableNode // static bool IsMyType( MercuryNode* n ); @@ -44,8 +44,6 @@ bool m_hidden; private: bool IsInAssetList(MercuryAsset* asset) const; - unsigned long Spinlock( unsigned long value ); - unsigned long SpinlockWait( unsigned long value, unsigned long usec ); std::list< MAutoPtr< MercuryAsset > > m_assets; ///serves as a holder for memory @@ -55,8 +53,11 @@ std::list< MercuryAsset* > m_prerender; std::list< MercuryAsset* > m_render; std::list< MercuryAsset* > m_postrender; - - MSemaphore m_semaphore; + +//Below is stuff for threaded rendering +// unsigned long Spinlock( unsigned long value ); +// unsigned long SpinlockWait( unsigned long value, unsigned long usec ); +// MSemaphore m_semaphore; }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |