2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/public-api/render-tasks/render-task.h>
22 #include <dali/public-api/common/constants.h>
23 #include <dali/internal/event/actors/actor-impl.h>
24 #include <dali/internal/event/actors/camera-actor-impl.h>
25 #include <dali/internal/event/render-tasks/render-task-impl.h>
30 static bool DefaultScreenToFrameBufferFunction( Vector2& coordinates )
35 static bool FullScreenFrameBufferFunction( Vector2& coordinates )
37 // Don't need to modify frameBufferCoords
41 RenderTask::ConstScreenToFrameBufferFunction RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION = DefaultScreenToFrameBufferFunction;
42 RenderTask::ConstScreenToFrameBufferFunction RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION = FullScreenFrameBufferFunction;
44 const bool RenderTask::DEFAULT_EXCLUSIVE = false;
45 const bool RenderTask::DEFAULT_INPUT_ENABLED = true;
46 const Vector4 RenderTask::DEFAULT_CLEAR_COLOR = Vector4( 0.0f, 0.0f, 0.0f, 1.0f ); // cannot use Color::Black because it may or may not be initialized yet
47 const bool RenderTask::DEFAULT_CLEAR_ENABLED = false;
48 const bool RenderTask::DEFAULT_CULL_MODE = true;
49 const unsigned int RenderTask::DEFAULT_REFRESH_RATE = REFRESH_ALWAYS;
51 RenderTask::RenderTask()
55 RenderTask RenderTask::DownCast( BaseHandle handle )
57 return RenderTask( dynamic_cast<Dali::Internal::RenderTask*>( handle.GetObjectPtr() ) );
60 RenderTask::~RenderTask()
64 RenderTask::RenderTask(const RenderTask& handle)
69 RenderTask& RenderTask::operator=(const RenderTask& rhs)
71 BaseHandle::operator=(rhs);
75 void RenderTask::SetSourceActor( Actor actor )
77 // NULL handle is allowed
78 Internal::Actor* actorImpl( NULL );
81 actorImpl = &GetImplementation( actor );
84 GetImplementation(*this).SetSourceActor( actorImpl );
87 Actor RenderTask::GetSourceActor() const
89 return Dali::Actor(GetImplementation(*this).GetSourceActor());
92 void RenderTask::SetExclusive( bool exclusive )
94 GetImplementation(*this).SetExclusive( exclusive );
97 bool RenderTask::IsExclusive() const
99 return GetImplementation(*this).IsExclusive();
102 void RenderTask::SetCameraActor( CameraActor cameraActor )
104 // NULL handle is allowed
105 Internal::CameraActor* actorImpl( NULL );
108 actorImpl = &GetImplementation( cameraActor );
111 GetImplementation(*this).SetCameraActor( actorImpl );
114 CameraActor RenderTask::GetCameraActor() const
116 return Dali::CameraActor(GetImplementation(*this).GetCameraActor());
119 void RenderTask::SetTargetFrameBuffer( FrameBufferImage frameBuffer )
121 GetImplementation(*this).SetTargetFrameBuffer( frameBuffer );
124 FrameBufferImage RenderTask::GetTargetFrameBuffer() const
126 return GetImplementation(*this).GetTargetFrameBuffer();
129 void RenderTask::SetScreenToFrameBufferFunction( ScreenToFrameBufferFunction conversionFunction )
131 GetImplementation(*this).SetScreenToFrameBufferFunction( conversionFunction );
134 RenderTask::ScreenToFrameBufferFunction RenderTask::GetScreenToFrameBufferFunction() const
136 return GetImplementation(*this).GetScreenToFrameBufferFunction();
139 void RenderTask::SetScreenToFrameBufferMappingActor( Dali::Actor mappingActor )
141 // NULL handle is allowed
142 Internal::Actor* actorImpl( NULL );
145 actorImpl = &GetImplementation( mappingActor );
148 GetImplementation(*this).SetScreenToFrameBufferMappingActor( actorImpl );
151 Dali::Actor RenderTask::GetScreenToFrameBufferMappingActor() const
153 return Dali::Actor(GetImplementation(*this).GetScreenToFrameBufferMappingActor());
156 void RenderTask::SetViewportPosition( Vector2 position )
158 GetImplementation(*this).SetViewportPosition( position );
161 Vector2 RenderTask::GetCurrentViewportPosition() const
163 return GetImplementation(*this).GetCurrentViewportPosition();
166 void RenderTask::SetViewportSize( Vector2 size )
168 GetImplementation(*this).SetViewportSize( size );
171 Vector2 RenderTask::GetCurrentViewportSize() const
173 return GetImplementation(*this).GetCurrentViewportSize();
176 void RenderTask::SetViewport( Viewport viewport )
178 GetImplementation(*this).SetViewport( viewport );
181 Viewport RenderTask::GetViewport() const
184 GetImplementation(*this).GetViewport( result );
188 void RenderTask::SetClearColor( const Vector4& color )
190 GetImplementation(*this).SetClearColor( color );
193 Vector4 RenderTask::GetClearColor() const
195 return GetImplementation(*this).GetClearColor();
198 void RenderTask::SetClearEnabled( bool enabled )
200 GetImplementation(*this).SetClearEnabled( enabled );
203 bool RenderTask::GetClearEnabled() const
205 return GetImplementation(*this).GetClearEnabled();
208 void RenderTask::SetCullMode( bool mode )
210 GetImplementation(*this).SetCullMode( mode );
213 bool RenderTask::GetCullMode() const
215 return GetImplementation(*this).GetCullMode();
218 void RenderTask::SetRefreshRate( unsigned int refreshRate )
220 GetImplementation(*this).SetRefreshRate( refreshRate );
223 unsigned int RenderTask::GetRefreshRate() const
225 return GetImplementation(*this).GetRefreshRate();
228 RenderTask::RenderTaskSignalType& RenderTask::FinishedSignal()
230 return GetImplementation(*this).FinishedSignal();
233 void RenderTask::SetInputEnabled( bool enabled )
235 GetImplementation(*this).SetInputEnabled( enabled );
238 bool RenderTask::GetInputEnabled() const
240 return GetImplementation(*this).GetInputEnabled();
243 bool RenderTask::WorldToViewport(const Vector3 &position, float& viewportX, float& viewportY) const
245 return GetImplementation(*this).WorldToViewport(position, viewportX, viewportY);
248 bool RenderTask::ViewportToLocal(Actor actor, float viewportX, float viewportY, float &localX, float &localY) const
252 Internal::Actor* actorImpl( &GetImplementation( actor ) );
253 return GetImplementation(*this).ViewportToLocal( actorImpl, viewportX, viewportY, localX, localY );
262 RenderTask::RenderTask( Internal::RenderTask* internal )