X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Frender-tasks%2Frender-task-impl.cpp;h=f80167ddffcebabdec4a9ef106709e01c1f8a164;hb=ef69dab91f1e3d7f0b7cb345933ef22046bf70a8;hp=25c7c965dfdc34d1f3e220120a2812fa13135c1e;hpb=3097b08c7ca6bd59481f1e0bdf9f8558332789a2;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/render-tasks/render-task-impl.cpp b/dali/internal/event/render-tasks/render-task-impl.cpp index 25c7c96..f80167d 100644 --- a/dali/internal/event/render-tasks/render-task-impl.cpp +++ b/dali/internal/event/render-tasks/render-task-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +58,7 @@ DALI_PROPERTY_TABLE_BEGIN 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( "requiresSync", BOOLEAN, true, false, false, Dali::RenderTask::Property::REQUIRES_SYNC ) DALI_PROPERTY_TABLE_END( DEFAULT_OBJECT_PROPERTY_START_INDEX ) // Signals @@ -128,6 +130,14 @@ bool RenderTask::GetInputEnabled() const void RenderTask::SetCameraActor( CameraActor* cameraActor ) { + if( cameraActor ) + { + mCameraConnector.mCamera = cameraActor->GetCamera(); + } + else + { + mCameraConnector.mCamera = NULL; + } mCameraConnector.SetActor( cameraActor ); } @@ -173,6 +183,25 @@ void RenderTask::SetTargetFrameBuffer( Dali::FrameBufferImage image ) } } +void RenderTask::SetFrameBuffer( Dali::FrameBuffer frameBuffer ) +{ + if( frameBuffer ) + { + mFrameBuffer = Internal::FrameBufferPtr( &GetImplementation( frameBuffer ) ); + SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, mFrameBuffer->GetRenderObject() ); + } + else + { + mFrameBuffer.Reset(); + SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, NULL ); + } +} + +FrameBuffer* RenderTask::GetFrameBuffer() const +{ + return mFrameBuffer.Get(); +} + Dali::FrameBufferImage RenderTask::GetTargetFrameBuffer() const { return mFrameBufferImage; @@ -278,6 +307,25 @@ const Vector4& RenderTask::GetClearColor() const return mSceneObject->GetClearColor( GetEventThreadServices().GetEventBufferIndex() ); } +void RenderTask::SetSyncRequired( bool requiresSync ) +{ + if( mRequiresSync != requiresSync ) + { + mRequiresSync = requiresSync; + + if( mSceneObject ) + { + // mSceneObject is being used in a separate thread; queue a message to set the value + SetSyncRequiredMessage( GetEventThreadServices(), *mSceneObject, requiresSync ); + } + } +} + +bool RenderTask::IsSyncRequired() const +{ + return mRequiresSync; +} + void RenderTask::SetClearEnabled( bool enabled ) { if ( mClearEnabled != enabled ) @@ -415,6 +463,40 @@ bool RenderTask::IsSystemLevel() const return mIsSystemLevel; } +bool RenderTask::WorldToViewport(const Vector3 &position, float& viewportX, float& viewportY) const +{ + CameraActor* cam = GetCameraActor(); + + Vector4 pos(position); + pos.w = 1.f; + + 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 @@ -558,6 +640,11 @@ void RenderTask::SetDefaultProperty( Property::Index index, const Property::Valu SetClearColor( property.Get() ); break; } + case Dali::RenderTask::Property::REQUIRES_SYNC: + { + SetSyncRequired( property.Get() ); + break; + } default: { // nothing to do @@ -588,6 +675,11 @@ Property::Value RenderTask::GetDefaultProperty(Property::Index index) const value = GetClearColor(); break; } + case Dali::RenderTask::Property::REQUIRES_SYNC: + { + value = IsSyncRequired(); + break; + } default: { @@ -651,7 +743,7 @@ const PropertyInputImpl* RenderTask::GetSceneObjectInputProperty( Property::Inde break; case Dali::RenderTask::Property::CLEAR_COLOR: - property = &mSceneObject->mViewportSize; + property = &mSceneObject->mClearColor; break; default: @@ -725,7 +817,8 @@ RenderTask::RenderTask( bool isSystemLevel ) mInputEnabled( Dali::RenderTask::DEFAULT_INPUT_ENABLED ), mClearEnabled( Dali::RenderTask::DEFAULT_CLEAR_ENABLED ), mCullMode( Dali::RenderTask::DEFAULT_CULL_MODE ), - mIsSystemLevel( isSystemLevel ) + mIsSystemLevel( isSystemLevel ), + mRequiresSync( false ) { DALI_LOG_INFO(gLogRender, Debug::General, "RenderTask::RenderTask(this:%p)\n", this); } @@ -740,7 +833,8 @@ RenderTask::~RenderTask() RenderTask::Connector::Connector( Type type, RenderTask& renderTask ) : mType( type ), mRenderTask( renderTask ), - mActor( NULL ) + mActor( NULL ), + mCamera( NULL ) { } @@ -791,6 +885,7 @@ void RenderTask::Connector::ObjectDestroyed( Object& object ) } mActor = NULL; + mCamera = NULL; // only meaningful for the camera connector but no simple way to distinguish UpdateRenderTask(); } @@ -821,7 +916,7 @@ void RenderTask::Connector::UpdateRenderTask() } else if( CAMERA_CONNECTOR == mType ) { - SetCameraNodeMessage( mRenderTask.GetEventThreadServices(), *(mRenderTask.mSceneObject), node ); + SetCameraMessage( mRenderTask.GetEventThreadServices(), *(mRenderTask.mSceneObject), node, mCamera ); } } }