コード例 #1
0
ファイル: spread-filter.cpp プロジェクト: Tarnyko/dal-toolkit
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 );
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
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);
}
コード例 #5
0
ファイル: shadow-view-impl.cpp プロジェクト: mettalla/dali
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();
}
コード例 #6
0
ファイル: bubble-emitter-impl.cpp プロジェクト: mettalla/dali
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;
}
コード例 #7
0
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;
}
コード例 #8
0
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 );
    }
}