X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Feffects-view%2Feffects-view-impl.cpp;h=752f26806ae8779778fb98fb6a725b3820a1a7d4;hp=9d4d08999111d838d0472293bbb17637831c536f;hb=b1e8521ad77e7b4e62b59613b2edef64429130e9;hpb=7bc9bb47cb9c552982e9144b202861190eeadc96 diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp index 9d4d089..752f268 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -21,20 +21,21 @@ // EXTERNAL INCLUDES #include #include -#include +#include +#include #include #include #include #include #include -#include // INTERNAL INCLUDES #include -#include +#include #include #include #include +#include namespace Dali { @@ -61,7 +62,7 @@ DALI_TYPE_REGISTRATION_END() const Pixel::Format EFFECTS_VIEW_DEFAULT_PIXEL_FORMAT = Pixel::RGBA8888; const float ARBITRARY_FIELD_OF_VIEW = Math::PI / 4.0f; -const Vector4 EFFECTS_VIEW_DEFAULT_BACKGROUND_COLOR( 1.0f, 1.0f, 1.0f, 0.0 ); +const Vector4 EFFECTS_VIEW_DEFAULT_BACKGROUND_COLOR( 0.0f, 0.0f, 0.0f, 0.0 ); const bool EFFECTS_VIEW_REFRESH_ON_DEMAND(false); #define DALI_COMPOSE_SHADER(STR) #STR @@ -135,7 +136,7 @@ Toolkit::EffectsView EffectsView::New() } EffectsView::EffectsView() -: Control( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ), +: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ), mChildrenRoot(Actor::New()), mBackgroundColor( EFFECTS_VIEW_DEFAULT_BACKGROUND_COLOR ), mTargetSize( Vector2::ZERO ), @@ -144,7 +145,7 @@ EffectsView::EffectsView() mEffectType( Toolkit::EffectsView::INVALID_TYPE ), mPixelFormat( EFFECTS_VIEW_DEFAULT_PIXEL_FORMAT ), mEnabled( false ), - mRefreshOnDemand(EFFECTS_VIEW_REFRESH_ON_DEMAND) + mRefreshOnDemand( EFFECTS_VIEW_REFRESH_ON_DEMAND ) { } @@ -160,8 +161,6 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type ) RemoveFilters(); Actor self = Self(); - Property::Map rendererMap; - rendererMap.Insert( "rendererType", "image" ); switch( type ) { @@ -184,12 +183,6 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type ) } } - Property::Map customShader; - customShader[ "vertexShader" ] = EFFECTS_VIEW_VERTEX_SOURCE; - customShader[ "fragmentShader" ] = EFFECTS_VIEW_FRAGMENT_SOURCE; - rendererMap[ "shader" ] = customShader; - InitializeControlRenderer( self, mRendererPostFilter, rendererMap ); - mEffectType = type; } } @@ -210,8 +203,8 @@ void EffectsView::Enable() void EffectsView::Disable() { // stop render tasks processing - // Note: render target resources are automatically freed since we set the Image::Unused flag RemoveRenderTasks(); + mLastSize = Vector2::ZERO; // Ensure resources are reallocated on subsequent enable mEnabled = false; } @@ -272,14 +265,12 @@ int EffectsView::GetEffectSize() void EffectsView::OnInitialize() { CustomActor self = Self(); - mChildrenRoot.SetParentOrigin( ParentOrigin::CENTER ); + mChildrenRoot.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); self.Add( mChildrenRoot ); } void EffectsView::OnSizeSet(const Vector3& targetSize) { - Control::OnSizeSet( targetSize ); - mTargetSize = Vector2(targetSize); // if we are already on stage, need to update render target sizes now to reflect the new size of this actor @@ -292,28 +283,33 @@ void EffectsView::OnSizeSet(const Vector3& targetSize) Enable(); } - mChildrenRoot.SetSize( targetSize ); + mChildrenRoot.SetProperty( Actor::Property::SIZE, targetSize ); + + Control::OnSizeSet( targetSize ); } -void EffectsView::OnStageConnection( int depth ) +void EffectsView::OnSceneConnection( int depth ) { - Control::OnStageConnection( depth ); + Actor self( Self() ); + + // Create renderers + mRendererPostFilter = CreateRenderer( EFFECTS_VIEW_VERTEX_SOURCE, EFFECTS_VIEW_FRAGMENT_SOURCE ); + mRendererPostFilter.SetProperty( Dali::Renderer::Property::DEPTH_INDEX, DepthIndex::CONTENT ); + self.AddRenderer( mRendererPostFilter ); + + mRendererForChildren = CreateRenderer( BASIC_VERTEX_SOURCE, BASIC_FRAGMENT_SOURCE ); + mRendererForChildren.SetProperty( Dali::Renderer::Property::DEPTH_INDEX, DepthIndex::CONTENT + 1 ); + self.AddRenderer( mRendererForChildren ); Enable(); - Actor self = Self(); - if( mRendererPostFilter ) - { - mRendererPostFilter.SetOnStage( self ); - } - if( mRendererForChildren ) - { - mRendererForChildren.SetOnStage( self ); - } + Control::OnSceneConnection( depth ); } -void EffectsView::OnStageDisconnection() +void EffectsView::OnSceneDisconnection() { + Actor self( Self() ); + Disable(); const size_t numFilters( mFilters.Size() ); @@ -322,27 +318,24 @@ void EffectsView::OnStageDisconnection() mFilters[i]->Disable(); } - Actor self = Self(); - if( mRendererPostFilter ) - { - mRendererPostFilter.SetOffStage( self ); - } - if( mRendererForChildren ) - { - mRendererForChildren.SetOffStage( self ); - } + // Remove renderers + self.RemoveRenderer( mRendererForChildren ); + mRendererForChildren.Reset(); + + self.RemoveRenderer( mRendererPostFilter ); + mRendererPostFilter.Reset(); - Control::OnStageDisconnection(); + Control::OnSceneDisconnection(); } void EffectsView::OnChildAdd( Actor& child ) { - Control::OnChildAdd( child ); - if( child != mChildrenRoot && child != mCameraForChildren ) { mChildrenRoot.Add( child ); } + + Control::OnChildAdd( child ); } void EffectsView::OnChildRemove( Actor& child ) @@ -359,8 +352,8 @@ void EffectsView::SetupFilters() case Toolkit::EffectsView::DROP_SHADOW: { SpreadFilter* spreadFilter = static_cast< SpreadFilter* >( mFilters[0] ); - spreadFilter->SetInputImage( mImageForChildren ); - spreadFilter->SetOutputImage( mImagePostFilter ); + spreadFilter->SetInputTexture( mFrameBufferForChildren.GetColorTexture() ); + spreadFilter->SetOutputFrameBuffer( mFrameBufferPostFilter ); spreadFilter->SetRootActor( mChildrenRoot ); spreadFilter->SetBackgroundColor( mBackgroundColor ); spreadFilter->SetPixelFormat( mPixelFormat ); @@ -368,8 +361,8 @@ void EffectsView::SetupFilters() spreadFilter->SetSpread( mEffectSize ); BlurTwoPassFilter* blurFilter = static_cast< BlurTwoPassFilter* >( mFilters[1] ); - blurFilter->SetInputImage( mImagePostFilter ); - blurFilter->SetOutputImage( mImagePostFilter ); + blurFilter->SetInputTexture( mFrameBufferPostFilter.GetColorTexture() ); + blurFilter->SetOutputFrameBuffer( mFrameBufferPostFilter ); blurFilter->SetRootActor( mChildrenRoot ); blurFilter->SetBackgroundColor( mBackgroundColor ); blurFilter->SetPixelFormat( mPixelFormat ); @@ -392,8 +385,8 @@ void EffectsView::SetupFilters() case Toolkit::EffectsView::EMBOSS: { SpreadFilter* spreadFilter = static_cast< SpreadFilter* >( mFilters[0] ); - spreadFilter->SetInputImage( mImageForChildren ); - spreadFilter->SetOutputImage( mImagePostFilter ); + spreadFilter->SetInputTexture( mFrameBufferForChildren.GetColorTexture() ); + spreadFilter->SetOutputFrameBuffer( mFrameBufferPostFilter ); spreadFilter->SetRootActor( mChildrenRoot ); spreadFilter->SetBackgroundColor( mBackgroundColor ); spreadFilter->SetPixelFormat( Pixel::RGBA8888 ); @@ -401,16 +394,16 @@ void EffectsView::SetupFilters() spreadFilter->SetSpread( mEffectSize ); EmbossFilter* embossFilter = static_cast< EmbossFilter* >( mFilters[1] ); - embossFilter->SetInputImage( mImagePostFilter ); - embossFilter->SetOutputImage( mImagePostFilter ); + embossFilter->SetInputTexture( mFrameBufferPostFilter.GetColorTexture() ); + embossFilter->SetOutputFrameBuffer( mFrameBufferPostFilter ); embossFilter->SetRootActor( mChildrenRoot ); embossFilter->SetBackgroundColor( mBackgroundColor ); embossFilter->SetPixelFormat( Pixel::RGBA8888 ); embossFilter->SetSize( mTargetSize ); BlurTwoPassFilter* blurFilter = static_cast< BlurTwoPassFilter* >( mFilters[2] ); - blurFilter->SetInputImage( mImagePostFilter ); - blurFilter->SetOutputImage( mImagePostFilter ); + blurFilter->SetInputTexture( mFrameBufferPostFilter.GetColorTexture() ); + blurFilter->SetOutputFrameBuffer( mFrameBufferPostFilter ); blurFilter->SetRootActor( mChildrenRoot ); blurFilter->SetBackgroundColor( Vector4( 0.5f, 0.5f, 0.5f, 0.0 ) ); blurFilter->SetPixelFormat( Pixel::RGBA8888 ); @@ -425,6 +418,7 @@ void EffectsView::SetupFilters() } } } + void EffectsView::AllocateResources() { if(mTargetSize != mLastSize) @@ -434,15 +428,17 @@ void EffectsView::AllocateResources() Actor self( Self() ); - mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED ); - InitializeControlRenderer( self, mRendererForChildren, mImageForChildren ); - mRendererForChildren.SetDepthIndex( DepthIndex::CONTENT+1 ); + mFrameBufferForChildren = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture textureForChildren = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferForChildren.AttachColorTexture( textureForChildren ); + + SetRendererTexture( mRendererForChildren, textureForChildren ); + + mFrameBufferPostFilter = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture texturePostFilter = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferPostFilter.AttachColorTexture( texturePostFilter ); - mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED ); - TextureSet textureSet = TextureSet::New(); - TextureSetImage( textureSet, 0u, mImagePostFilter ); - self.GetRendererAt( 0 ).SetTextures( textureSet ); - mRendererPostFilter.SetDepthIndex( DepthIndex::CONTENT ); + SetRendererTexture( mRendererPostFilter, texturePostFilter ); SetupFilters(); } @@ -454,7 +450,7 @@ void EffectsView::SetupCameras() { // Create a camera for the children render, corresponding to its render target size mCameraForChildren = CameraActor::New(mTargetSize); - mCameraForChildren.SetParentOrigin(ParentOrigin::CENTER); + mCameraForChildren.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER ); mCameraForChildren.SetInvertYAxis( true ); Self().Add( mCameraForChildren ); } @@ -466,8 +462,8 @@ void EffectsView::SetupCameras() mCameraForChildren.SetNearClippingPlane(1.0f); mCameraForChildren.SetAspectRatio(mTargetSize.width / mTargetSize.height); mCameraForChildren.SetType(Dali::Camera::FREE_LOOK); // camera orientation based solely on actor - mCameraForChildren.SetPosition(0.0f, 0.0f, mTargetSize.height * cameraPosScale); - mCameraForChildren.SetZ( mTargetSize.height * cameraPosScale ); + mCameraForChildren.SetProperty( Actor::Property::POSITION, Vector3( 0.0f, 0.0f, mTargetSize.height * cameraPosScale ) ); + mCameraForChildren.SetProperty( Actor::Property::POSITION_Z, mTargetSize.height * cameraPosScale ); } } @@ -487,7 +483,7 @@ void EffectsView::CreateRenderTasks() mRenderTaskForChildren.SetInputEnabled( false ); mRenderTaskForChildren.SetClearColor( mBackgroundColor ); mRenderTaskForChildren.SetClearEnabled( true ); - mRenderTaskForChildren.SetTargetFrameBuffer( mImageForChildren ); + mRenderTaskForChildren.SetFrameBuffer( mFrameBufferForChildren ); mRenderTaskForChildren.SetCameraActor(mCameraForChildren); // use camera that covers render target exactly // Enable image filters