|
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.
|