void SpreadFilter::CreateRenderTasks() { RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); // perform a horizontal blur targeting the internal buffer mRenderTaskForHorz = taskList.CreateTask(); mRenderTaskForHorz.SetRefreshRate( mRefreshOnDemand ? RenderTask::REFRESH_ONCE : RenderTask::REFRESH_ALWAYS ); mRenderTaskForHorz.SetSourceActor( mActorForInput ); mRenderTaskForHorz.SetExclusive(true); mRenderTaskForHorz.SetInputEnabled( false ); mRenderTaskForHorz.SetClearEnabled( true ); mRenderTaskForHorz.SetClearColor( mBackgroundColor ); mRenderTaskForHorz.SetTargetFrameBuffer( mImageForHorz ); mRenderTaskForHorz.SetCameraActor( mCameraActor ); // use the internal buffer and perform a horizontal blur targeting the output buffer mRenderTaskForVert = taskList.CreateTask(); mRenderTaskForVert.SetRefreshRate( mRefreshOnDemand ? RenderTask::REFRESH_ONCE : RenderTask::REFRESH_ALWAYS ); mRenderTaskForVert.SetSourceActor( mActorForHorz ); mRenderTaskForVert.SetExclusive(true); mRenderTaskForVert.SetInputEnabled( false ); mRenderTaskForVert.SetClearEnabled( true ); mRenderTaskForVert.SetClearColor( mBackgroundColor ); mRenderTaskForVert.SetTargetFrameBuffer( mOutputImage ); mRenderTaskForVert.SetCameraActor( mCameraActor ); }
int UtcDaliRenderTaskListGetTask(void) { TestApplication application; tet_infoline("Testing RenderTaskList::GetTask()"); RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); RenderTask defaultTask = taskList.GetTask( 0u ); DALI_TEST_CHECK( 1u == taskList.GetTaskCount() ); DALI_TEST_CHECK( defaultTask ); DALI_TEST_CHECK( defaultTask == taskList.GetTask( 0u ) ); RenderTask newTask = taskList.CreateTask(); DALI_TEST_CHECK( 2u == taskList.GetTaskCount() ); RenderTask temp = taskList.GetTask( 0u ); RenderTask temp2 = taskList.GetTask( 1u ); DALI_TEST_CHECK( newTask ); DALI_TEST_CHECK( defaultTask != newTask ); DALI_TEST_CHECK( taskList.GetTask( 0u ) == defaultTask ); DALI_TEST_CHECK( taskList.GetTask( 1u ) == newTask ); DALI_TEST_CHECK( taskList.GetTask( 1u ) != defaultTask ); taskList.RemoveTask( taskList.GetTask(0u) ); DALI_TEST_CHECK( 1u == taskList.GetTaskCount() ); DALI_TEST_CHECK( taskList.GetTask( 0u ) != defaultTask ); DALI_TEST_CHECK( taskList.GetTask( 0u ) == newTask ); END_TEST; }
int UtcDaliRenderTaskListCreateTask(void) { TestApplication application; tet_infoline("Testing RenderTaskList::CreateTask()"); RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); DALI_TEST_CHECK( 1u == taskList.GetTaskCount() ); taskList.CreateTask(); DALI_TEST_CHECK( 2u == taskList.GetTaskCount() ); END_TEST; }
void Magnifier::InitializeRenderTask() { Stage stage = Stage::GetCurrent(); RenderTaskList taskList = stage.GetRenderTaskList(); mTask = taskList.CreateTask(); mTask.SetInputEnabled(false); mTask.SetClearColor(Vector4(0.5f, 0.5f, 0.5f, 1.0f)); mTask.SetClearEnabled(true); mCameraActor = CameraActor::New(); mCameraActor.SetType(Camera::FREE_LOOK); mCameraActor.SetRotation(Quaternion(M_PI, Vector3::YAXIS)); // Look at stage stage.Add(mCameraActor); mTask.SetCameraActor( mCameraActor ); SetFrameVisibility(true); }
void ShadowView::CreateRenderTasks() { RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); // We want the first task to render the scene from the light mRenderSceneTask = taskList.CreateTask(); mRenderSceneTask.SetCameraActor( mCameraActor ); mRenderSceneTask.SetSourceActor( mChildrenRoot ); mRenderSceneTask.SetTargetFrameBuffer( mSceneFromLightRenderTarget ); mRenderSceneTask.SetInputEnabled( false ); mRenderSceneTask.SetClearEnabled( true ); // background color for render task should be the shadow color, but with alpha 0 // we don't want to blend the edges of the content with a BLACK at alpha 0, but // the same shadow color at alpha 0. mRenderSceneTask.SetClearColor( mCachedBackgroundColor ); mBlurFilter.Enable(); }
void BubbleEmitter::SetBackground( Image bgImage, const Vector3& hsvDelta ) { mBackgroundImage = bgImage; mHSVDelta = hsvDelta; ImageActor sourceActor = ImageActor::New( bgImage ); sourceActor.SetSize( mMovementArea ); sourceActor.SetParentOrigin(ParentOrigin::CENTER); Stage::GetCurrent().Add( sourceActor ); ShaderEffect colorAdjuster = CreateColorAdjuster( hsvDelta, true /*ignore alpha to make bubble color always*/ ); sourceActor.SetShaderEffect( colorAdjuster ); RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); RenderTask task = taskList.CreateTask(); task.SetRefreshRate( RenderTask::REFRESH_ONCE ); task.SetSourceActor( sourceActor ); task.SetExclusive(true); task.SetCameraActor(mCameraActor); task.GetCameraActor().SetInvertYAxis(true); task.SetTargetFrameBuffer( mEffectImage ); task.FinishedSignal().Connect(this, &BubbleEmitter::OnRenderFinished); mRenderTaskRunning = true; }
int UtcDaliHitTestAlgorithmWithFunctorOnRenderTask(void) { TestApplication application; tet_infoline("Testing Dali::HitTestAlgorithm functor, specific to a given render task"); Stage stage = Stage::GetCurrent(); Size stageSize = stage.GetSize(); RenderTaskList taskList = stage.GetRenderTaskList(); Actor actor[2]; for( int i=0; i<2; i++ ) { actor[i] = Actor::New(); actor[i].SetSize(100.f, 100.f); actor[i].SetParentOrigin(ParentOrigin::TOP_LEFT); actor[i].SetAnchorPoint(AnchorPoint::TOP_LEFT); actor[i].SetName("HittableActor"); stage.Add(actor[i]); } Vector2 position( 50.f, 40.f ); actor[1].SetPosition( position.x, position.y ); RenderTask renderTask[2]; renderTask[0] = taskList.GetTask( 0u ); FrameBufferImage frameBufferImage = FrameBufferImage::New(stageSize.width, stageSize.height, Pixel::A8, Image::Never); renderTask[1] = taskList.CreateTask(); renderTask[1].SetSourceActor( actor[1] ); renderTask[1].SetExclusive( true ); renderTask[1].SetInputEnabled( true ); renderTask[1].SetTargetFrameBuffer( frameBufferImage ); renderTask[1].SetRefreshRate( RenderTask::REFRESH_ONCE ); renderTask[1].SetScreenToFrameBufferFunction( RenderTask::FULLSCREEN_FRAMEBUFFER_FUNCTION ); // Render and notify application.SendNotification(); application.Render(); application.Render(); application.SendNotification(); // Perform a hit-test at the given screen coordinates with different render tasks Dali::HitTestAlgorithm::Results results; Vector2 screenCoordinates( 25.f, 25.f ); Dali::HitTestAlgorithm::HitTest( renderTask[0], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( results.actor == actor[0] ); DALI_TEST_EQUALS( screenCoordinates, results.actorCoordinates, 0.1f, TEST_LOCATION ); results.actor = Actor(); results.actorCoordinates = Vector2::ZERO; Dali::HitTestAlgorithm::HitTest( renderTask[1], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( !results.actor ); DALI_TEST_EQUALS( Vector2::ZERO, results.actorCoordinates, 0.1f, TEST_LOCATION ); screenCoordinates.x = 80.f; screenCoordinates.y = 70.f; results.actor = Actor(); results.actorCoordinates = Vector2::ZERO; Dali::HitTestAlgorithm::HitTest( renderTask[0], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( results.actor == actor[0] ); DALI_TEST_EQUALS( screenCoordinates, results.actorCoordinates, 0.1f, TEST_LOCATION ); results.actor = Actor(); results.actorCoordinates = Vector2::ZERO; Dali::HitTestAlgorithm::HitTest( renderTask[1], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( results.actor == actor[1]); DALI_TEST_EQUALS( screenCoordinates - position, results.actorCoordinates, 0.1f, TEST_LOCATION ); screenCoordinates.x = 120.f; screenCoordinates.y = 130.f; results.actor = Actor(); results.actorCoordinates = Vector2::ZERO; Dali::HitTestAlgorithm::HitTest( renderTask[0], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( results.actor == actor[1] ); DALI_TEST_EQUALS( screenCoordinates - position, results.actorCoordinates, 0.1f, TEST_LOCATION ); results.actor = Actor(); results.actorCoordinates = Vector2::ZERO; Dali::HitTestAlgorithm::HitTest( renderTask[1], screenCoordinates, results, IsActorHittableFunction ); DALI_TEST_CHECK( results.actor == actor[1]); DALI_TEST_EQUALS( screenCoordinates - position, results.actorCoordinates, 0.1f, TEST_LOCATION ); END_TEST; }
void GaussianBlurView::CreateRenderTasks() { RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); if(!mBlurUserImage) { // create render task to render our child actors to offscreen buffer mRenderChildrenTask = taskList.CreateTask(); mRenderChildrenTask.SetSourceActor( mChildrenRoot ); mRenderChildrenTask.SetExclusive(true); mRenderChildrenTask.SetInputEnabled( false ); mRenderChildrenTask.SetClearEnabled( true ); mRenderChildrenTask.SetClearColor( mBackgroundColor ); mRenderChildrenTask.SetCameraActor(mRenderFullSizeCamera); mRenderChildrenTask.SetTargetFrameBuffer( mRenderTargetForRenderingChildren ); } // perform a horizontal blur targeting the second buffer mHorizBlurTask = taskList.CreateTask(); mHorizBlurTask.SetSourceActor( mImageActorHorizBlur ); mHorizBlurTask.SetExclusive(true); mHorizBlurTask.SetInputEnabled( false ); mHorizBlurTask.SetClearEnabled( true ); mHorizBlurTask.SetClearColor( mBackgroundColor ); if( mRenderOnce && mBlurUserImage ) { mHorizBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE); } // use the second buffer and perform a horizontal blur targeting the first buffer mVertBlurTask = taskList.CreateTask(); mVertBlurTask.SetSourceActor( mImageActorVertBlur ); mVertBlurTask.SetExclusive(true); mVertBlurTask.SetInputEnabled( false ); mVertBlurTask.SetClearEnabled( true ); mVertBlurTask.SetClearColor( mBackgroundColor ); if( mRenderOnce && mBlurUserImage ) { mVertBlurTask.SetRefreshRate(RenderTask::REFRESH_ONCE); mVertBlurTask.FinishedSignal().Connect( this, &GaussianBlurView::OnRenderTaskFinished ); } // use the completed blur in the first buffer and composite with the original child actors render if(!mBlurUserImage) { mCompositeTask = taskList.CreateTask(); mCompositeTask.SetSourceActor( mImageActorComposite ); mCompositeTask.SetExclusive(true); mCompositeTask.SetInputEnabled( false ); mCompositeTask.SetCameraActor(mRenderFullSizeCamera); mCompositeTask.SetTargetFrameBuffer( mRenderTargetForRenderingChildren ); } mHorizBlurTask.SetCameraActor(mRenderDownsampledCamera); mVertBlurTask.SetCameraActor(mRenderDownsampledCamera); mHorizBlurTask.SetTargetFrameBuffer( mRenderTarget2 ); if(mUserOutputRenderTarget) { mVertBlurTask.SetTargetFrameBuffer( mUserOutputRenderTarget ); } else { mVertBlurTask.SetTargetFrameBuffer( mRenderTarget1 ); } }