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=8adc19d4f493b418ed092c1cb768b5ed7867c4f2;hb=8a647e87a01c5c78451653c1264a9eea81ac9b20;hpb=eaebf2e8aa5903e4acbb37ae46050e009863146c 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 8adc19d..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) 2017 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,25 +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 -#include +#include +#include namespace Dali { @@ -66,13 +63,9 @@ 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); -// Visuals are not stylable or public -const Property::Index CHILD_VISUAL( Toolkit::EffectsView::ANIMATABLE_PROPERTY_START_INDEX - 1); -const Property::Index POST_FILTER_VISUAL( CHILD_VISUAL-1 ); - #define DALI_COMPOSE_SHADER(STR) #STR const char* EFFECTS_VIEW_VERTEX_SOURCE = DALI_COMPOSE_SHADER( @@ -153,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() @@ -191,16 +188,6 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type ) } } - FrameBufferImage dummyImage = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); - - Internal::InitializeVisual( self, mVisualPostFilter, dummyImage ); - DevelControl::RegisterVisual( *this, POST_FILTER_VISUAL, mVisualPostFilter ); - - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = EFFECTS_VIEW_VERTEX_SOURCE; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = EFFECTS_VIEW_FRAGMENT_SOURCE; - Toolkit::GetImplementation( mVisualPostFilter ).SetCustomShader( customShader ); - mEffectType = type; } } @@ -221,7 +208,6 @@ 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; @@ -284,7 +270,7 @@ int EffectsView::GetEffectSize() void EffectsView::OnInitialize() { CustomActor self = Self(); - mChildrenRoot.SetParentOrigin( ParentOrigin::CENTER ); + mChildrenRoot.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); self.Add( mChildrenRoot ); } @@ -302,20 +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 ) { + 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(); - Control::OnStageConnection( depth ); + Control::OnSceneConnection( depth ); } -void EffectsView::OnStageDisconnection() +void EffectsView::OnSceneDisconnection() { + Actor self( Self() ); + Disable(); const size_t numFilters( mFilters.Size() ); @@ -324,7 +323,14 @@ void EffectsView::OnStageDisconnection() mFilters[i]->Disable(); } - Control::OnStageDisconnection(); + // Remove renderers + self.RemoveRenderer( mRendererForChildren ); + mRendererForChildren.Reset(); + + self.RemoveRenderer( mRendererPostFilter ); + mRendererPostFilter.Reset(); + + Control::OnSceneDisconnection(); } void EffectsView::OnChildAdd( Actor& child ) @@ -351,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 ); @@ -360,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 ); @@ -384,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 ); @@ -393,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 ); @@ -417,6 +423,7 @@ void EffectsView::SetupFilters() } } } + void EffectsView::AllocateResources() { if(mTargetSize != mLastSize) @@ -426,15 +433,17 @@ void EffectsView::AllocateResources() Actor self( Self() ); - mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); - Internal::InitializeVisual( self, mVisualForChildren, mImageForChildren ); - DevelControl::RegisterVisual( *this, CHILD_VISUAL, mVisualForChildren, 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 ); - TextureSet textureSet = TextureSet::New(); - TextureSetImage( textureSet, 0u, mImagePostFilter ); - self.GetRendererAt( 0 ).SetTextures( textureSet ); - mVisualPostFilter.SetDepthIndex( DepthIndex::CONTENT ); + SetRendererTexture( mRendererPostFilter, texturePostFilter ); SetupFilters(); } @@ -446,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 ); } @@ -458,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 ); } } @@ -479,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