|
From: <axl...@us...> - 2009-03-19 22:46:03
|
Revision: 184
http://hgengine.svn.sourceforge.net/hgengine/?rev=184&view=rev
Author: axlecrusher
Date: 2009-03-19 22:45:56 +0000 (Thu, 19 Mar 2009)
Log Message:
-----------
updates
Modified Paths:
--------------
Mercury2/src/BoundingBox.cpp
Mercury2/src/BoundingBox.h
Mercury2/src/Mercury2.cpp
Mercury2/src/MercuryAsset.h
Mercury2/src/RenderableNode.cpp
Mercury2/src/RenderableNode.h
Mercury2/src/XMLParser.cpp
Mercury2/src/XMLParser.h
Modified: Mercury2/src/BoundingBox.cpp
===================================================================
--- Mercury2/src/BoundingBox.cpp 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/BoundingBox.cpp 2009-03-19 22:45:56 UTC (rev 184)
@@ -10,6 +10,18 @@
ComputeNormals();
};
+BoundingBox::BoundingBox(const BoundingBox& bb)
+ :m_center(bb.m_center), m_extend(bb.m_extend)
+{
+ for (uint8_t i = 0; i < 3; ++i)
+ m_normals[i] = bb.m_normals[i];
+}
+
+BoundingVolume* BoundingBox::SpawnClone() const
+{
+ return new BoundingBox(*this);
+}
+
void BoundingBox::LoadFromBinary(char* data)
{
memcpy(m_center, data, sizeof(float)*3);
Modified: Mercury2/src/BoundingBox.h
===================================================================
--- Mercury2/src/BoundingBox.h 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/BoundingBox.h 2009-03-19 22:45:56 UTC (rev 184)
@@ -14,6 +14,7 @@
virtual void LoadFromBinary(char* data) = 0;
virtual void Transform( const MercuryMatrix& m ) = 0;
virtual void Render() {};
+ virtual BoundingVolume* SpawnClone() const = 0;
};
class BoundingBox : public BoundingVolume
@@ -21,6 +22,8 @@
public:
BoundingBox() {};
BoundingBox(const MercuryVertex& center, const MercuryVertex& extend);
+ BoundingBox(const BoundingBox& bb);
+
virtual ~BoundingBox() {};
virtual void LoadFromBinary(char* data);
@@ -32,6 +35,7 @@
const MercuryVector& Normal(uint8_t i) const { return m_normals[i]; }
virtual void Render();
+ virtual BoundingVolume* SpawnClone() const;
private:
void ComputeNormals();
Modified: Mercury2/src/Mercury2.cpp
===================================================================
--- Mercury2/src/Mercury2.cpp 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/Mercury2.cpp 2009-03-19 22:45:56 UTC (rev 184)
@@ -84,9 +84,9 @@
SAFE_DELETE(root);
SAFE_DELETE(w);
- uint64_t totalWaited = UpdateWaited + RenderWaited;
- printf("Update wait %%%f\n", (UpdateWaited/double(totalWaited))*100.0f);
- printf("Render wait %%%f\n", (RenderWaited/double(totalWaited))*100.0f);
+// uint64_t totalWaited = UpdateWaited + RenderWaited;
+// printf("Update wait %%%f\n", (UpdateWaited/double(totalWaited))*100.0f);
+// printf("Render wait %%%f\n", (RenderWaited/double(totalWaited))*100.0f);
return 0;
}
Modified: Mercury2/src/MercuryAsset.h
===================================================================
--- Mercury2/src/MercuryAsset.h 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/MercuryAsset.h 2009-03-19 22:45:56 UTC (rev 184)
@@ -24,6 +24,8 @@
virtual void LoadFromXML(const XMLNode& node) {};
inline void IsInstanced(bool b) { m_isInstanced = b; }
+
+ inline const BoundingVolume* GetBoundingVolume() const { return m_boundingVolume; }
protected:
bool m_isInstanced;
BoundingVolume* m_boundingVolume;
Modified: Mercury2/src/RenderableNode.cpp
===================================================================
--- Mercury2/src/RenderableNode.cpp 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/RenderableNode.cpp 2009-03-19 22:45:56 UTC (rev 184)
@@ -7,12 +7,12 @@
using namespace std;
REGISTER_NODE_TYPE(RenderableNode);
-
+/*
uint64_t RenderWaited = 0;
uint64_t UpdateWaited = 0;
MercuryMatrix GLOBALMATRIX;
-
+*/
RenderableNode::RenderableNode()
:m_hidden(false)
{
@@ -43,13 +43,32 @@
UpdateWaited += waited;
}
*/
+
+void RenderableNode::Update(float dTime)
+{
+ MercuryMatrix m = FindGlobalMatrix();
+
+ std::list< MAutoPtr< MercuryAsset > >::iterator i;
+ for (i = m_assets.begin(); i != m_assets.end(); ++i )
+ {
+ const BoundingVolume* v = (*i)->GetBoundingVolume();
+ if (v)
+ {
+ BoundingVolume* nv = v->SpawnClone();
+ nv->Transform(m);
+ SAFE_DELETE(nv);
+ //do some stuff to figure out if this node is culled
+ }
+ }
+}
+
void RenderableNode::Render()
{
list< MercuryAsset* >::iterator i;
+ MercuryMatrix m = FindGlobalMatrix();
if (m_hidden || IsCulled()) return;
- MercuryMatrix m = GLOBALMATRIX = FindGlobalMatrix();
m.Transpose();
glLoadMatrixf( m.Ptr() );
@@ -113,7 +132,7 @@
void RenderableNode::RecursiveRender( MercuryNode* n )
{
- static unsigned long waitTime = 0;
+// static unsigned long waitTime = 0;
RenderableNode* rn;
if ( ( rn = Cast(n) ) )
{
Modified: Mercury2/src/RenderableNode.h
===================================================================
--- Mercury2/src/RenderableNode.h 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/RenderableNode.h 2009-03-19 22:45:56 UTC (rev 184)
@@ -10,9 +10,9 @@
#define MCHECKASSETS
-extern uint64_t RenderWaited;
-extern uint64_t UpdateWaited;
-extern MercuryMatrix GLOBALMATRIX;
+//extern uint64_t RenderWaited;
+//extern uint64_t UpdateWaited;
+//extern MercuryMatrix GLOBALMATRIX;
class RenderableNode : public MercuryNode
{
@@ -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 );
Modified: Mercury2/src/XMLParser.cpp
===================================================================
--- Mercury2/src/XMLParser.cpp 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/XMLParser.cpp 2009-03-19 22:45:56 UTC (rev 184)
@@ -74,8 +74,49 @@
data = MString((const char*)d);
xmlFree(d);
}
+ else
+ {
+ d = xmlGetProp(m_node, (const xmlChar*)"fallback");
+ if (d)
+ {
+ //start searching at the root
+ XMLNode root( xmlDocGetRootElement(m_doc) );
+ //prevent infinite recursion on self
+ if ( root.m_node != m_node )
+ {
+ XMLNode fall = root.FindFallbackNode( MString((const char*)d) );
+ data = fall.Attribute(tag);
+ }
+ }
+ }
+
+ if (d) xmlFree(d);
+
return data;
}
+/*
+MString XMLNode::FindFallbackAttribute(const MString& path)
+{
+
+ xmlChar* d = xmlGetProp(m_node, (const xmlChar*)tag.c_str());
+ if (d)
+ {
+
+ }
+ MString p = path;
+}
+*/
+XMLNode XMLNode::FindFallbackNode(const MString& path) const
+{
+ if (path.length() > 0)
+ {
+ MString name = path.substr(0, path.find("."));
+ for (XMLNode n = this->Child(); n.IsValid(); n = n.NextNode())
+ if (n.Attribute("name") == name) return n.FindFallbackNode(path);
+ return XMLNode();
+ }
+ return *this;
+}
XMLDocument::XMLDocument()
:m_doc(NULL)
Modified: Mercury2/src/XMLParser.h
===================================================================
--- Mercury2/src/XMLParser.h 2009-03-16 00:42:19 UTC (rev 183)
+++ Mercury2/src/XMLParser.h 2009-03-19 22:45:56 UTC (rev 184)
@@ -28,6 +28,9 @@
MString Name() const;
MString Content() const;
MString Attribute(const MString & tag) const;
+
+// MString FindFallbackAttribute();
+ XMLNode FindFallbackNode(const MString& path) const;
inline bool IsValid() const { return m_node!=NULL; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|