Update of /cvsroot/simspark/simspark/contrib/rsgedit
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv16521
Modified Files:
sparkglrender.cpp sparkglrender.h
Log Message:
- added member mSelectedObject
- added methods RenderSelection(), SetSelection() and ResetSelection()
- the selected object is highlighted using 'matSelection'
Index: sparkglrender.h
===================================================================
RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** sparkglrender.h 15 Mar 2007 07:26:24 -0000 1.3
--- sparkglrender.h 9 Apr 2007 17:41:01 -0000 1.4
***************
*** 26,29 ****
--- 26,30 ----
#include <boost/shared_ptr.hpp>
+ #include <boost/weak_ptr.hpp>
class SimSpark;
***************
*** 38,41 ****
--- 39,43 ----
{
class RenderServer;
+ class RenderNode;
}
***************
*** 49,52 ****
--- 51,60 ----
void Render(int width, int height);
+ void SetSelection(boost::weak_ptr<kerosin::RenderNode> selection);
+ void ResetSelection();
+
+ protected:
+ void RenderSelection();
+
protected:
boost::shared_ptr<SimSpark> mSpark;
***************
*** 54,57 ****
--- 62,66 ----
boost::shared_ptr<oxygen::SceneServer> mSceneServer;
boost::shared_ptr<kerosin::RenderServer> mRenderServer;
+ boost::weak_ptr<kerosin::RenderNode> mSelectedNode;
};
Index: sparkglrender.cpp
===================================================================
RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** sparkglrender.cpp 2 Jan 2006 20:28:49 -0000 1.2
--- sparkglrender.cpp 9 Apr 2007 17:41:01 -0000 1.3
***************
*** 23,26 ****
--- 23,29 ----
#include <oxygen/sceneserver/sceneserver.h>
#include <kerosin/renderserver/renderserver.h>
+ #include <kerosin/renderserver/rendernode.h>
+ #include <kerosin/sceneserver/singlematnode.h>
+ #include <kerosin/materialserver/material.h>
#include "simspark.h"
***************
*** 89,91 ****
--- 92,142 ----
mCamera->SetViewport(0,0,width,height);
mRenderServer->Render();
+ RenderSelection();
+ }
+
+ void SparkGLRender::RenderSelection()
+ {
+ if (mSelectedNode.expired())
+ {
+ return;
+ }
+
+ glDisable(GL_LIGHTING);
+ glDisable(GL_DEPTH_TEST);
+
+ shared_ptr<RenderNode> node = mSelectedNode.lock();
+
+ glPushMatrix();
+ glMultMatrixf(node->GetWorldTransform().m);
+
+ shared_ptr<SingleMatNode> sMatNode =
+ shared_dynamic_cast<SingleMatNode>(node);
+
+ if (sMatNode.get() != 0)
+ {
+ shared_ptr<Material> material = sMatNode->GetMaterial();
+ sMatNode->SetMaterial("matSelected");
+
+ node->RenderInternal();
+
+ if (material.get() != 0)
+ {
+ sMatNode->SetMaterial(material->GetName());
+ }
+ } else
+ {
+ node->RenderInternal();
+ }
+
+ glPopMatrix();
+ }
+
+ void SparkGLRender::SetSelection(weak_ptr<RenderNode> selection)
+ {
+ mSelectedNode = selection;
+ }
+
+ void SparkGLRender::ResetSelection()
+ {
+ mSelectedNode.reset();
}
|