From: Markus R. <rol...@us...> - 2007-04-09 17:41:06
|
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(); } |