// CLASS HEADER
#include <dali/internal/event/render-tasks/render-task-impl.h>
+// EXTERNAL INCLUDES
+#include <cstring> // for strcmp
+
// INTERNAL INCLUDES
#include <dali/public-api/common/dali-common.h>
#include <dali/public-api/object/type-registry.h>
#include <dali/internal/event/actors/camera-actor-impl.h>
#include <dali/internal/event/common/property-helper.h>
#include <dali/internal/event/common/stage-impl.h>
+#include <dali/internal/event/common/projection.h>
#include <dali/internal/event/images/frame-buffer-image-impl.h>
#include <dali/internal/update/nodes/node.h>
+#include <dali/internal/event/render-tasks/render-task-list-impl.h>
#include <dali/internal/update/render-tasks/scene-graph-render-task.h>
#if defined(DEBUG_ENABLED)
// Name Type writable animatable constraint-input enum for index-checking
DALI_PROPERTY_TABLE_BEGIN
-DALI_PROPERTY( "viewport-position", VECTOR2, true, true, true, Dali::RenderTask::Property::VIEWPORT_POSITION )
-DALI_PROPERTY( "viewport-size", VECTOR2, true, true, true, Dali::RenderTask::Property::VIEWPORT_SIZE )
-DALI_PROPERTY( "clear-color", VECTOR4, true, true, true, Dali::RenderTask::Property::CLEAR_COLOR )
+DALI_PROPERTY( "viewportPosition", VECTOR2, true, true, true, Dali::RenderTask::Property::VIEWPORT_POSITION )
+DALI_PROPERTY( "viewportSize", VECTOR2, true, true, true, Dali::RenderTask::Property::VIEWPORT_SIZE )
+DALI_PROPERTY( "clearColor", VECTOR4, true, true, true, Dali::RenderTask::Property::CLEAR_COLOR )
DALI_PROPERTY_TABLE_END( DEFAULT_OBJECT_PROPERTY_START_INDEX )
// Signals
void RenderTask::SetSourceActor( Actor* actor )
{
+ const Stage* stage = Stage::GetCurrent();
+ if ( stage )
+ {
+ stage->GetRenderTaskList().SetExclusive( this, mExclusive );
+ }
mSourceConnector.SetActor( actor );
}
{
mExclusive = exclusive;
+ const Stage* stage = Stage::GetCurrent();
+ if ( stage )
+ {
+ stage->GetRenderTaskList().SetExclusive( this, exclusive );
+ }
+
if ( mSceneObject )
{
// mSceneObject is being used in a separate thread; queue a message to set the value
}
else
{
- Vector2 size( Stage::GetCurrent()->GetSize() );
- viewPort.x = viewPort.y = 0;
- viewPort.width = size.width;
- viewPort.height = size.height;
+ Internal::Stage* stage = Internal::Stage::GetCurrent();
+ if ( stage )
+ {
+ Vector2 size( stage->GetSize() );
+ viewPort.x = viewPort.y = 0;
+ viewPort.width = size.width;
+ viewPort.height = size.height;
+ }
}
}
else
{
CameraActor* localCamera = GetCameraActor();
StagePtr stage = Stage::GetCurrent();
- CameraActor& defaultCamera = stage->GetDefaultCameraActor();
- if( localCamera )
+ if( stage )
{
- Viewport viewport;
- Vector2 size( stage->GetSize() );
- viewport.x = viewport.y = 0;
- viewport.width = size.width;
- viewport.height = size.height;
-
- float localX, localY;
- inside = mMappingConnector.mActor->ScreenToLocal(defaultCamera.GetViewMatrix(), defaultCamera.GetProjectionMatrix(), viewport, localX, localY, screenCoords.x, screenCoords.y);
- Vector3 actorSize = mMappingConnector.mActor->GetCurrentSize();
- if( inside && localX >= 0.f && localX <= actorSize.x && localY >= 0.f && localY <= actorSize.y)
+ CameraActor& defaultCamera = stage->GetDefaultCameraActor();
+ if( localCamera )
{
- screenCoords.x = localX;
- screenCoords.y = localY;
+ Viewport viewport;
+ Vector2 size( stage->GetSize() );
+ viewport.x = viewport.y = 0;
+ viewport.width = size.width;
+ viewport.height = size.height;
+
+ float localX, localY;
+ inside = mMappingConnector.mActor->ScreenToLocal(defaultCamera.GetViewMatrix(), defaultCamera.GetProjectionMatrix(), viewport, localX, localY, screenCoords.x, screenCoords.y);
+ Vector3 actorSize = mMappingConnector.mActor->GetCurrentSize();
+ if( inside && localX >= 0.f && localX <= actorSize.x && localY >= 0.f && localY <= actorSize.y)
+ {
+ screenCoords.x = localX;
+ screenCoords.y = localY;
+ }
+ else
+ {
+ inside = false;
+ }
}
else
{
inside = false;
}
}
- else
- {
- inside = false;
- }
}
else if ( mFrameBufferImage && mScreenToFrameBufferFunction )
{
return mIsSystemLevel;
}
+bool RenderTask::WorldToViewport(const Vector3 &position, float& viewportX, float& viewportY) const
+{
+ CameraActor* cam = GetCameraActor();
+
+ Vector4 pos(position);
+ pos.w = 1.0;
+
+ Vector4 viewportPosition;
+
+ Viewport viewport;
+ GetViewport( viewport );
+
+ bool ok = ProjectFull(pos,
+ cam->GetViewMatrix(),
+ cam->GetProjectionMatrix(),
+ viewport.x,
+ viewport.y,
+ viewport.width,
+ viewport.height,
+ viewportPosition);
+ if(ok)
+ {
+ viewportX = viewportPosition.x;
+ viewportY = viewportPosition.y;
+ }
+
+ return ok;
+}
+
+bool RenderTask::ViewportToLocal(Actor* actor, float viewportX, float viewportY, float &localX, float &localY) const
+{
+ return actor->ScreenToLocal( *this, localX, localY, viewportX, viewportY );
+}
+
SceneGraph::RenderTask* RenderTask::CreateSceneObject()
{
// This should only be called once, with no existing scene-object
void RenderTask::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
{
- indices.reserve( DEFAULT_PROPERTY_COUNT );
+ indices.Reserve( DEFAULT_PROPERTY_COUNT );
for ( int i = 0; i < DEFAULT_PROPERTY_COUNT; ++i )
{
- indices.push_back( i );
+ indices.PushBack( i );
}
}
void RenderTask::Connector::ObjectDestroyed( Object& object )
{
+ if ( SOURCE_CONNECTOR == mType )
+ {
+ const Stage* stage = Stage::GetCurrent();
+ if ( stage )
+ {
+ stage->GetRenderTaskList().SetExclusive( &mRenderTask, false );
+ }
+ }
+
mActor = NULL;
UpdateRenderTask();