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=dee09e905b2de76e9c4fe6cbf151b1d415f82dac;hp=4fb7e85729907da6076b3d4f7585b52b6e823596;hb=8a647e87a01c5c78451653c1264a9eea81ac9b20;hpb=b83826885c880591d542619f44a1e728e41d9f97 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 4fb7e85..dee09e9 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,22 @@ // EXTERNAL INCLUDES #include #include -#include +#include +#include #include #include #include #include #include -#include // INTERNAL INCLUDES #include -#include +#include #include #include #include +#include +#include namespace Dali { @@ -61,7 +63,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 +137,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,8 +146,12 @@ 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 ) { + DevelControl::SetAccessibilityConstructor( Self(), []( Dali::Actor actor ) { + return std::unique_ptr< Dali::Accessibility::Accessible >( + new Control::Impl::AccessibleImpl( actor, Dali::Accessibility::Role::FILLER ) ); + } ); } EffectsView::~EffectsView() @@ -160,8 +166,6 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type ) RemoveFilters(); Actor self = Self(); - Property::Map rendererMap; - rendererMap.Insert( "rendererType", "IMAGE" ); switch( type ) { @@ -184,12 +188,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 +208,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 +270,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 +288,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 +323,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 +357,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 +366,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 +390,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 +399,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 +423,7 @@ void EffectsView::SetupFilters() } } } + void EffectsView::AllocateResources() { if(mTargetSize != mLastSize) @@ -434,15 +433,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 +455,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 +467,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 +488,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