From: <yx...@us...> - 2010-12-17 00:22:41
|
Revision: 237 http://simspark.svn.sourceforge.net/simspark/?rev=237&view=rev Author: yxu Date: 2010-12-17 00:22:35 +0000 (Fri, 17 Dec 2010) Log Message: ----------- render the image for camera only when it is requested Modified Paths: -------------- trunk/spark/plugin/imageperceptor/imageperceptor.cpp trunk/spark/plugin/imageperceptor/imagerender.cpp trunk/spark/plugin/imageperceptor/imagerender.h Modified: trunk/spark/plugin/imageperceptor/imageperceptor.cpp =================================================================== --- trunk/spark/plugin/imageperceptor/imageperceptor.cpp 2010-12-17 00:22:16 UTC (rev 236) +++ trunk/spark/plugin/imageperceptor/imageperceptor.cpp 2010-12-17 00:22:35 UTC (rev 237) @@ -64,22 +64,29 @@ } bool ImagePerceptor::Percept(boost::shared_ptr<PredicateList> predList) -{ - Predicate &predicate = predList->AddPredicate(); - predicate.name = "IMG"; - predicate.parameter.Clear(); - - ParameterList &sizeElement = predicate.parameter.AddList(); - sizeElement.AddValue(std::string("s")); - sizeElement.AddValue(mRender->GetWidth()); - sizeElement.AddValue(mRender->GetHeight()); +{ + mRender->RequestRender(); - ParameterList &dataElement = predicate.parameter.AddList(); - dataElement.AddValue(std::string("d")); - const char* data = mRender->GetData(); - string datacode = mB64Encoder.encode(data, mRender->GetDataSize()); - dataElement.AddValue(datacode); - return true; + int size = mRender->GetDataSize(); + if (size == 0) + return false; + + Predicate &predicate = predList->AddPredicate(); + predicate.name = "IMG"; + predicate.parameter.Clear(); + + ParameterList &sizeElement = predicate.parameter.AddList(); + sizeElement.AddValue(std::string("s")); + sizeElement.AddValue(mRender->GetWidth()); + sizeElement.AddValue(mRender->GetHeight()); + + ParameterList &dataElement = predicate.parameter.AddList(); + dataElement.AddValue(std::string("d")); + const char* data = mRender->GetData(); + string datacode = mB64Encoder.encode(data, size); + dataElement.AddValue(datacode); + + return true; } void ImagePerceptor::SetViewport(unsigned int x, unsigned int y, unsigned int w, unsigned int h) Modified: trunk/spark/plugin/imageperceptor/imagerender.cpp =================================================================== --- trunk/spark/plugin/imageperceptor/imagerender.cpp 2010-12-17 00:22:16 UTC (rev 236) +++ trunk/spark/plugin/imageperceptor/imagerender.cpp 2010-12-17 00:22:35 UTC (rev 237) @@ -42,8 +42,8 @@ using namespace salt; using namespace std; -ImageRender::ImageRender(): // kerosin::CustomRender(), - mDataSize(0), mWidth(0), mHeight(0) +ImageRender::ImageRender(): kerosin::CustomRender(), + mDataSize(0), mWidth(0), mHeight(0), mRequested(false) { } @@ -98,7 +98,7 @@ void ImageRender::Render() { - if ( + if ( (!mRequested) || (mOpenGLServer.expired()) || (mRenderServer.expired()) ) @@ -166,4 +166,5 @@ #endif mRenderServer->SetCamera(oldCamera); + mRequested = false; } Modified: trunk/spark/plugin/imageperceptor/imagerender.h =================================================================== --- trunk/spark/plugin/imageperceptor/imagerender.h 2010-12-17 00:22:16 UTC (rev 236) +++ trunk/spark/plugin/imageperceptor/imagerender.h 2010-12-17 00:22:35 UTC (rev 237) @@ -51,6 +51,8 @@ int GetHeight() const { return mHeight; } + void RequestRender() { mRequested = true; } + private: boost::shared_ptr<oxygen::Camera> mCamera; @@ -64,6 +66,7 @@ int mDataSize; int mWidth; int mHeight; + bool mRequested; unsigned int mFBOId; unsigned int mRBOId; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |