From db57c8806f8336c6228645f3cd52abe353257d1d Mon Sep 17 00:00:00 2001 From: Paul Wisbey Date: Fri, 12 Jul 2019 17:02:58 +0100 Subject: [PATCH] Remove FrameBufferImage Change-Id: Ib3b33834977c2f754dcef47983a87ba5da9b916b --- .../src/dali-toolkit/utc-Dali-Builder.cpp | 120 ------------- dali-toolkit/devel-api/builder/builder.cpp | 5 - dali-toolkit/devel-api/builder/builder.h | 9 - dali-toolkit/internal/builder/builder-impl.cpp | 55 ------ dali-toolkit/internal/builder/builder-impl.h | 12 -- .../controls/bloom-view/bloom-view-impl.cpp | 112 ++++++------ .../internal/controls/bloom-view/bloom-view-impl.h | 12 +- .../controls/control/control-renderers.cpp | 190 +++++++++++++++++++++ .../internal/controls/control/control-renderers.h | 68 ++++++++ .../controls/effects-view/effects-view-impl.cpp | 84 ++++----- .../controls/effects-view/effects-view-impl.h | 20 +-- .../gaussian-blur-view/gaussian-blur-view-impl.cpp | 108 +----------- .../controls/shadow-view/shadow-view-impl.cpp | 60 +++---- .../controls/shadow-view/shadow-view-impl.h | 6 +- .../super-blur-view/super-blur-view-impl.cpp | 99 +---------- dali-toolkit/internal/file.list | 1 + .../internal/filters/blur-two-pass-filter.cpp | 81 +++++---- .../internal/filters/blur-two-pass-filter.h | 15 +- dali-toolkit/internal/filters/emboss-filter.cpp | 63 +++---- dali-toolkit/internal/filters/emboss-filter.h | 18 +- dali-toolkit/internal/filters/image-filter.cpp | 8 +- dali-toolkit/internal/filters/image-filter.h | 20 ++- dali-toolkit/internal/filters/spread-filter.cpp | 31 ++-- dali-toolkit/internal/filters/spread-filter.h | 11 +- 24 files changed, 533 insertions(+), 675 deletions(-) create mode 100644 dali-toolkit/internal/controls/control/control-renderers.cpp create mode 100644 dali-toolkit/internal/controls/control/control-renderers.h diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Builder.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Builder.cpp index 4d8bfe0..41c7153 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Builder.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Builder.cpp @@ -1204,126 +1204,6 @@ int UtcDaliBuilderAddActorsP(void) END_TEST; } -int UtcDaliBuilderFrameBufferP(void) -{ - ToolkitTestApplication application; - - // JSON with a quit event when the actor is touched - std::string json( - "{\n" - " \"constants\":\n" - " {\n" - " \"FB_WIDTH\": 200.0,\n" - " \"FB_HEIGHT\": 200.0,\n" - " \"FB_SIZE\": [200,200],\n" - " \"FB_ASPECT_RATIO\": 1\n" - " },\n" - " \"stage\": [\n" - " {\n" - " \"type\": \"ImageView\",\n" - " \"name\": \"fbOnStage\",\n" - " \"position\": [\n" - " 0.40461349487305,\n" - " 0.9150390625,\n" - " 0.0\n" - " ],\n" - " \"parentOrigin\": [0.5, 0.5, 0.5],\n" - " \"size\": [300, 300, 0],\n" - " \"image\": \"fb0\",\n" - " \"clearColor\": [1,0,0,1]\n" - " },\n" - " {\n" - " \"type\": \"ImageView\",\n" - " \"name\": \"Image1\",\n" - " \"size\": [200, 200, 0],\n" - " \"parentOrigin\": [0.5, 0.5, 0.5],\n" - " \"effect\": \"Ripple2D\",\n" - " \"image\": {\n" - " \"url\": \"{DALI_IMAGE_DIR}gallery-medium-25.jpg\"\n" - " },\n" - " \"signals\": [\n" - " {\n" - " \"name\": \"onStage\",\n" - " \"action\": \"play\",\n" - " \"animation\": \"Animation_1\"\n" - " }\n" - " ]\n" - " },\n" - " {\n" - " \"type\":\"CameraActor\",\n" - " \"name\":\"fbCam\",\n" - " \"aspectRatio\": \"{FB_ASPECT_RATIO}\",\n" - " \"projectionMode\": \"PERSPECTIVE_PROJECTION\",\n" - " \"fieldOfView\": 0.785,\n" - " \"invertYAxis\": true\n" - " }\n" - " ],\n" - " \"frameBufferImages\":\n" - " {\n" - " \"fb0\":\n" - " {\n" - " \"type\": \"FrameBufferImage\",\n" - " \"width\": { \"typeCast\":\"float\", \"value\":\"{FB_WIDTH}\" },\n" - " \"height\": { \"typeCast\":\"float\", \"value\":\"{FB_HEIGHT}\" }\n" - " }\n" - " },\n" - " \"renderTasks\":\n" - " {\n" - " \"stage\":\n" - " [\n" - " {\n" - " \"sourceActor\": \"fbOnStage\"\n" - " },\n" - " {\n" - " \"sourceActor\": \"Image1\",\n" - " \"targetFrameBuffer\": \"fb0\",\n" - " \"viewportSize\":\"{FB_SIZE}\",\n" - " \"cameraActor\":\"fbCam\"\n" - " }\n" - " ]\n" - " },\n" - " \"paths\": {},\n" - " \"animations\": {\n" - " \"Animation_1\": {\n" - " \"loop\":true,\n" - " \"properties\": [\n" - " {\n" - " \"actor\": \"Image1\",\n" - " \"property\": \"uTime\",\n" - " \"value\": 10.0,\n" - " \"alphaFunction\": \"LINEAR\",\n" - " \"timePeriod\": {\n" - " \"delay\": 0,\n" - " \"duration\": 10.0\n" - " },\n" - " \"gui-builder-timeline-color\": \"#8dc0da\"\n" - " }\n" - " ]\n" - " }\n" - " }\n" - "}\n"); - - Builder builder = Builder::New(); - - // frame buffer coverage - builder.LoadFromString( json ); - - // Render and notify - application.SendNotification(); - application.Render(); - - Dali::FrameBufferImage frameBuffer = builder.GetFrameBufferImage( "fb0" ); - DALI_TEST_CHECK( frameBuffer ); - - Dali::FrameBufferImage frameBuffer2 = builder.GetFrameBufferImage( "fb0" ); - DALI_TEST_CHECK( frameBuffer2 ); - DALI_TEST_CHECK( frameBuffer == frameBuffer2 ); - - DALI_TEST_CHECK( true ); - - END_TEST; -} - int UtcDaliBuilderPathConstraintsP(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/devel-api/builder/builder.cpp b/dali-toolkit/devel-api/builder/builder.cpp index 64a08a0..b66beb0 100644 --- a/dali-toolkit/devel-api/builder/builder.cpp +++ b/dali-toolkit/devel-api/builder/builder.cpp @@ -139,11 +139,6 @@ void Builder::CreateRenderTask( const std::string &name ) GetImpl(*this).CreateRenderTask( name ); } -FrameBufferImage Builder::GetFrameBufferImage( const std::string &name ) -{ - return GetImpl(*this).GetFrameBufferImage( name ); -} - Path Builder::GetPath( const std::string &name ) { return GetImpl(*this).GetPath( name ); diff --git a/dali-toolkit/devel-api/builder/builder.h b/dali-toolkit/devel-api/builder/builder.h index f3975f6..1f8ea4a 100755 --- a/dali-toolkit/devel-api/builder/builder.h +++ b/dali-toolkit/devel-api/builder/builder.h @@ -394,15 +394,6 @@ class DALI_TOOLKIT_API Builder : public BaseHandle void CreateRenderTask( const std::string &name ); /** - * Get or create FrameBufferImage from the FrameBufferImage instance library. - * An empty handle is returned otherwise. - * @pre The Builder has been initialized. - * @param name The name of a FrameBufferImage in the loaded representation - * @return A handle to a FrameBufferImage if found, otherwise empty - */ - FrameBufferImage GetFrameBufferImage( const std::string &name ); - - /** * Get or create Path from the Path instance library. * An empty handle is returned otherwise. * @pre The Builder has been initialized. diff --git a/dali-toolkit/internal/builder/builder-impl.cpp b/dali-toolkit/internal/builder/builder-impl.cpp index 73facc7..78000be 100644 --- a/dali-toolkit/internal/builder/builder-impl.cpp +++ b/dali-toolkit/internal/builder/builder-impl.cpp @@ -458,48 +458,6 @@ void Builder::CreateRenderTask( const std::string &name ) } } -FrameBufferImage Builder::GetFrameBufferImage( const std::string &name ) -{ - Replacement constant( mReplacementMap ); - return GetFrameBufferImage(name, constant); -} - -FrameBufferImage Builder::GetFrameBufferImage( const std::string &name, const Replacement& constant ) -{ - DALI_ASSERT_ALWAYS(mParser.GetRoot() && "Builder script not loaded"); - - FrameBufferImage ret; - - ImageLut::const_iterator iter( mFrameBufferImageLut.find( name ) ); - if( iter != mFrameBufferImageLut.end() ) - { - ret = iter->second; - } - else - { - if( OptionalChild images = IsChild( *mParser.GetRoot(), "frameBufferImages") ) - { - if( OptionalChild image = IsChild( *images, name ) ) - { - Dali::Property::Value property(Property::MAP); - if( DeterminePropertyFromNode( *image, Property::MAP, property, constant ) ) - { - Property::Map* map = property.GetMap(); - - if( map ) - { - (*map)[ KEYNAME_TYPE ] = Property::Value(std::string("FrameBufferImage") ); - ret = FrameBufferImage::DownCast( Dali::Scripting::NewImage( property ) ); - mFrameBufferImageLut[ name ] = ret; - } - } - } - } - } - - return ret; -} - Path Builder::GetPath( const std::string& name ) { DALI_ASSERT_ALWAYS(mParser.GetRoot() && "Builder script not loaded"); @@ -1114,19 +1072,6 @@ void Builder::SetupTask( RenderTask& task, const TreeNode& node, const Replaceme } } - if( OptionalString s = constant.IsString( IsChild(node, "targetFrameBuffer") ) ) - { - FrameBufferImage fb = GetFrameBufferImage( *s, constant ); - if(fb) - { - task.SetTargetFrameBuffer( fb ); - } - else - { - DALI_SCRIPT_WARNING("Cannot find target frame buffer '%s'\n", (*s).c_str() ); - } - } - if( OptionalString s = constant.IsString( IsChild(node, "screenToFrameBufferFunction") ) ) { if("DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION" == *s) diff --git a/dali-toolkit/internal/builder/builder-impl.h b/dali-toolkit/internal/builder/builder-impl.h index 2eb4a2b..7830e68 100755 --- a/dali-toolkit/internal/builder/builder-impl.h +++ b/dali-toolkit/internal/builder/builder-impl.h @@ -188,16 +188,6 @@ public: void CreateRenderTask( const std::string &name ); /** - * @copydoc Toolkit::Builder::GetFrameBufferImage - */ - FrameBufferImage GetFrameBufferImage( const std::string &name ); - - /** - * @copydoc Toolkit::Builder::GetFrameBufferImage - */ - FrameBufferImage GetFrameBufferImage( const std::string &name, const Replacement& constant ); - - /** * @copydoc Toolkit::Builder::GetPath */ Path GetPath( const std::string &name ); @@ -251,7 +241,6 @@ private: typedef struct{ std::string name; Dali::PathConstrainer pathConstrainer; } PathConstrainerEntry; typedef std::vector PathConstrainerLut; typedef std::map PathLut; - typedef std::map ImageLut; private: // Undefined @@ -385,7 +374,6 @@ private: private: Toolkit::JsonParser mParser; - ImageLut mFrameBufferImageLut; PathLut mPathLut; PathConstrainerLut mPathConstrainerLut; LinearConstrainerLut mLinearConstrainerLut; diff --git a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp index 8d99d68..14f179b 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -29,13 +29,12 @@ #include #include #include -#include // INTERNAL INCLUDES #include #include -#include #include +#include namespace Dali { @@ -230,16 +229,16 @@ void BloomView::OnInitialize() // Create actors // Create an image view for rendering from the scene texture to the bloom texture - mBloomExtractImageView = Toolkit::ImageView::New(); - mBloomExtractImageView.SetParentOrigin( ParentOrigin::CENTER ); + mBloomExtractActor = Actor::New(); + mBloomExtractActor.SetParentOrigin( ParentOrigin::CENTER ); // Create an image view for compositing the result (scene and bloom textures) to output - mCompositeImageView = Toolkit::ImageView::New(); - mCompositeImageView.SetParentOrigin( ParentOrigin::CENTER ); + mCompositeActor = Actor::New(); + mCompositeActor.SetParentOrigin( ParentOrigin::CENTER ); // Create an image view for holding final result, i.e. the blurred image. This will get rendered to screen later, via default / user render task - mTargetImageView = Toolkit::ImageView::New(); - mTargetImageView.SetParentOrigin( ParentOrigin::CENTER ); + mTargetActor = Actor::New(); + mTargetActor.SetParentOrigin( ParentOrigin::CENTER ); // Create the Gaussian Blur object + render tasks // Note that we use mBloomExtractTarget as the source image and also re-use this as the gaussian blur final render target. This saves the gaussian blur code from creating it @@ -264,10 +263,10 @@ void BloomView::OnInitialize() // Connect to actor tree Self().Add( mChildrenRoot ); Self().Add( mInternalRoot ); - mInternalRoot.Add( mBloomExtractImageView ); + mInternalRoot.Add( mBloomExtractActor ); mInternalRoot.Add( mGaussianBlurView ); - mInternalRoot.Add( mCompositeImageView ); - mInternalRoot.Add( mTargetImageView ); + mInternalRoot.Add( mCompositeActor ); + mInternalRoot.Add( mTargetActor ); mInternalRoot.Add( mRenderDownsampledCamera ); mInternalRoot.Add( mRenderFullSizeCamera ); @@ -279,8 +278,8 @@ void BloomView::OnSizeSet(const Vector3& targetSize) { mTargetSize = Vector2(targetSize); mChildrenRoot.SetSize(targetSize); - mCompositeImageView.SetSize(targetSize); - mTargetImageView.SetSize(targetSize); + mCompositeActor.SetSize(targetSize); + mTargetActor.SetSize(targetSize); // Children render camera must move when GaussianBlurView object is // resized. This is since we cannot change render target size - so we need @@ -336,7 +335,6 @@ void BloomView::AllocateResources() // Create and place a camera for the renders corresponding to the (potentially downsampled) render targets' size mRenderDownsampledCamera.SetFieldOfView(ARBITRARY_FIELD_OF_VIEW); - // TODO: how do we pick a reasonable value for near clip? Needs to relate to normal camera the user renders with, but we don't have a handle on it mRenderDownsampledCamera.SetNearClippingPlane(1.0f); mRenderDownsampledCamera.SetAspectRatio(mDownsampledWidth / mDownsampledHeight); mRenderDownsampledCamera.SetType(Dali::Camera::FREE_LOOK); // camera orientation based solely on actor @@ -345,7 +343,6 @@ void BloomView::AllocateResources() // Create and place a camera for the children render, corresponding to its render target size mRenderFullSizeCamera.SetFieldOfView(ARBITRARY_FIELD_OF_VIEW); - // TODO: how do we pick a reasonable value for near clip? Needs to relate to normal camera the user renders with, but we don't have a handle on it mRenderFullSizeCamera.SetNearClippingPlane(1.0f); mRenderFullSizeCamera.SetAspectRatio(mTargetSize.width / mTargetSize.height); mRenderFullSizeCamera.SetType(Dali::Camera::FREE_LOOK); // camera orientation based solely on actor @@ -364,7 +361,9 @@ void BloomView::AllocateResources() // Create render targets // create off screen buffer of new size to render our child actors to - mRenderTargetForRenderingChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mRenderTargetForRenderingChildren = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture textureForChildren = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mRenderTargetForRenderingChildren.AttachColorTexture( textureForChildren ); mBloomExtractTarget = FrameBuffer::New( mDownsampledWidth, mDownsampledHeight, FrameBuffer::Attachment::NONE ); Texture texture = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mDownsampledWidth), unsigned(mDownsampledHeight) ); @@ -374,34 +373,33 @@ void BloomView::AllocateResources() texture = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mDownsampledWidth), unsigned(mDownsampledHeight) ); blurExtractTarget.AttachColorTexture( texture ); - mOutputRenderTarget = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mOutputRenderTarget = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture outputTexture = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mOutputRenderTarget.AttachColorTexture( outputTexture ); ////////////////////////////////////////////////////// // Point actors and render tasks at new render targets - mBloomExtractImageView.SetImage( mRenderTargetForRenderingChildren ); - mBloomExtractImageView.SetSize(mDownsampledWidth, mDownsampledHeight); // size needs to match render target - // Create shader used for extracting the bright parts of an image - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = BLOOM_EXTRACT_FRAGMENT_SOURCE; - Property::Map visualMap; - visualMap.Insert( Toolkit::Visual::Property::SHADER, customShader ); - mBloomExtractImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); + Renderer bloomRenderer = CreateRenderer( BASIC_VERTEX_SOURCE, BLOOM_EXTRACT_FRAGMENT_SOURCE ); + SetRendererTexture( bloomRenderer, mRenderTargetForRenderingChildren ); + mBloomExtractActor.AddRenderer( bloomRenderer ); + mBloomExtractActor.SetSize( mDownsampledWidth, mDownsampledHeight ); // size needs to match render target // set GaussianBlurView to blur our extracted bloom mGaussianBlurView.SetUserImageAndOutputRenderTarget( mBloomExtractTarget.GetColorTexture(), blurExtractTarget ); // use the completed blur in the first buffer and composite with the original child actors render - mCompositeImageView.SetImage( mRenderTargetForRenderingChildren ); - // Create shader used to composite bloom and original image to output render target - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = COMPOSITE_FRAGMENT_SOURCE; - visualMap[ Toolkit::Visual::Property::SHADER ] = customShader; - mCompositeImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); - TextureSet textureSet = mCompositeImageView.GetRendererAt(0).GetTextures(); + Renderer compositeRenderer = CreateRenderer( BASIC_VERTEX_SOURCE, COMPOSITE_FRAGMENT_SOURCE ); + SetRendererTexture( compositeRenderer, mRenderTargetForRenderingChildren ); + TextureSet textureSet = compositeRenderer.GetTextures(); + textureSet.SetTexture( 0u, mRenderTargetForRenderingChildren.GetColorTexture() ); textureSet.SetTexture( 1u, blurExtractTarget.GetColorTexture() ); + mCompositeActor.AddRenderer( compositeRenderer ); // set up target actor for rendering result, i.e. the blurred image - mTargetImageView.SetImage(mOutputRenderTarget); + Renderer targetRenderer = CreateRenderer( BASIC_VERTEX_SOURCE, BASIC_FRAGMENT_SOURCE ); + SetRendererTexture( targetRenderer, mOutputRenderTarget ); + mTargetActor.AddRenderer( targetRenderer ); } } @@ -416,11 +414,11 @@ void BloomView::CreateRenderTasks() mRenderChildrenTask.SetInputEnabled( false ); mRenderChildrenTask.SetClearEnabled( true ); mRenderChildrenTask.SetCameraActor(mRenderFullSizeCamera); // use camera that covers render target exactly - mRenderChildrenTask.SetTargetFrameBuffer( mRenderTargetForRenderingChildren ); + mRenderChildrenTask.SetFrameBuffer( mRenderTargetForRenderingChildren ); // Extract the bright part of the image and render to a new buffer. Downsampling also occurs at this stage to save pixel fill, if it is set up. mBloomExtractTask = taskList.CreateTask(); - mBloomExtractTask.SetSourceActor( mBloomExtractImageView ); + mBloomExtractTask.SetSourceActor( mBloomExtractActor ); mBloomExtractTask.SetExclusive(true); mBloomExtractTask.SetInputEnabled( false ); mBloomExtractTask.SetClearEnabled( true ); @@ -432,12 +430,12 @@ void BloomView::CreateRenderTasks() // Use an image view displaying the children render and composite it with the blurred bloom buffer, targeting the output mCompositeTask = taskList.CreateTask(); - mCompositeTask.SetSourceActor( mCompositeImageView ); + mCompositeTask.SetSourceActor( mCompositeActor ); mCompositeTask.SetExclusive(true); mCompositeTask.SetInputEnabled( false ); mCompositeTask.SetClearEnabled( true ); mCompositeTask.SetCameraActor(mRenderFullSizeCamera); - mCompositeTask.SetTargetFrameBuffer( mOutputRenderTarget ); + mCompositeTask.SetFrameBuffer( mOutputRenderTarget ); } void BloomView::RemoveRenderTasks() @@ -471,9 +469,9 @@ void BloomView::Deactivate() mOutputRenderTarget.Reset(); // Reset children - mBloomExtractImageView.SetImage( "" ); - mTargetImageView.SetImage( "" ); - mCompositeImageView.SetImage( "" ); + mBloomExtractActor.RemoveRenderer( 0u ); + mTargetActor.RemoveRenderer( 0u ); + mCompositeActor.RemoveRenderer( 0u ); mGaussianBlurView.SetVisible( false ); @@ -506,19 +504,19 @@ void BloomView::SetupProperties() // bloom threshold // set defaults, makes sure properties are registered with shader - mBloomExtractImageView.RegisterProperty( BLOOM_THRESHOLD_PROPERTY_NAME, BLOOM_THRESHOLD_DEFAULT ); - mBloomExtractImageView.RegisterProperty( RECIP_ONE_MINUS_BLOOM_THRESHOLD_PROPERTY_NAME, 1.0f / (1.0f - BLOOM_THRESHOLD_DEFAULT) ); + mBloomExtractActor.RegisterProperty( BLOOM_THRESHOLD_PROPERTY_NAME, BLOOM_THRESHOLD_DEFAULT ); + mBloomExtractActor.RegisterProperty( RECIP_ONE_MINUS_BLOOM_THRESHOLD_PROPERTY_NAME, 1.0f / (1.0f - BLOOM_THRESHOLD_DEFAULT) ); // Register a property that the user can control to change the bloom threshold mBloomThresholdPropertyIndex = self.RegisterProperty(BLOOM_THRESHOLD_PROPERTY_NAME, BLOOM_THRESHOLD_DEFAULT); - Property::Index shaderBloomThresholdPropertyIndex = mBloomExtractImageView.GetPropertyIndex(BLOOM_THRESHOLD_PROPERTY_NAME); - Constraint bloomThresholdConstraint = Constraint::New( mBloomExtractImageView, shaderBloomThresholdPropertyIndex, EqualToConstraint()); + Property::Index shaderBloomThresholdPropertyIndex = mBloomExtractActor.GetPropertyIndex(BLOOM_THRESHOLD_PROPERTY_NAME); + Constraint bloomThresholdConstraint = Constraint::New( mBloomExtractActor, shaderBloomThresholdPropertyIndex, EqualToConstraint()); bloomThresholdConstraint.AddSource( Source(self, mBloomThresholdPropertyIndex) ); bloomThresholdConstraint.Apply(); // precalc 1.0 / (1.0 - threshold) on CPU to save shader insns, using constraint to tie to the normal threshold property - Property::Index shaderRecipOneMinusBloomThresholdPropertyIndex = mBloomExtractImageView.GetPropertyIndex(RECIP_ONE_MINUS_BLOOM_THRESHOLD_PROPERTY_NAME); - Constraint thresholdConstraint = Constraint::New( mBloomExtractImageView, shaderRecipOneMinusBloomThresholdPropertyIndex, RecipOneMinusConstraint()); + Property::Index shaderRecipOneMinusBloomThresholdPropertyIndex = mBloomExtractActor.GetPropertyIndex(RECIP_ONE_MINUS_BLOOM_THRESHOLD_PROPERTY_NAME); + Constraint thresholdConstraint = Constraint::New( mBloomExtractActor, shaderRecipOneMinusBloomThresholdPropertyIndex, RecipOneMinusConstraint()); thresholdConstraint.AddSource( LocalSource(shaderBloomThresholdPropertyIndex) ); thresholdConstraint.Apply(); @@ -538,9 +536,9 @@ void BloomView::SetupProperties() // Register a property that the user can control to fade the bloom intensity via internally hidden shader mBloomIntensityPropertyIndex = self.RegisterProperty(BLOOM_INTENSITY_PROPERTY_NAME, BLOOM_INTENSITY_DEFAULT); - mCompositeImageView.RegisterProperty( BLOOM_INTENSITY_PROPERTY_NAME, BLOOM_INTENSITY_DEFAULT ); - Property::Index shaderBloomIntensityPropertyIndex = mCompositeImageView.GetPropertyIndex(BLOOM_INTENSITY_PROPERTY_NAME); - Constraint bloomIntensityConstraint = Constraint::New( mCompositeImageView, shaderBloomIntensityPropertyIndex, EqualToConstraint()); + mCompositeActor.RegisterProperty( BLOOM_INTENSITY_PROPERTY_NAME, BLOOM_INTENSITY_DEFAULT ); + Property::Index shaderBloomIntensityPropertyIndex = mCompositeActor.GetPropertyIndex(BLOOM_INTENSITY_PROPERTY_NAME); + Constraint bloomIntensityConstraint = Constraint::New( mCompositeActor, shaderBloomIntensityPropertyIndex, EqualToConstraint()); bloomIntensityConstraint.AddSource( Source(self, mBloomIntensityPropertyIndex) ); bloomIntensityConstraint.Apply(); @@ -550,9 +548,9 @@ void BloomView::SetupProperties() // Register a property that the user can control to fade the bloom saturation via internally hidden shader mBloomSaturationPropertyIndex = self.RegisterProperty(BLOOM_SATURATION_PROPERTY_NAME, BLOOM_SATURATION_DEFAULT); - mCompositeImageView.RegisterProperty( BLOOM_SATURATION_PROPERTY_NAME, BLOOM_SATURATION_DEFAULT ); - Property::Index shaderBloomSaturationPropertyIndex = mCompositeImageView.GetPropertyIndex(BLOOM_SATURATION_PROPERTY_NAME); - Constraint bloomSaturationConstraint = Constraint::New( mCompositeImageView, shaderBloomSaturationPropertyIndex, EqualToConstraint()); + mCompositeActor.RegisterProperty( BLOOM_SATURATION_PROPERTY_NAME, BLOOM_SATURATION_DEFAULT ); + Property::Index shaderBloomSaturationPropertyIndex = mCompositeActor.GetPropertyIndex(BLOOM_SATURATION_PROPERTY_NAME); + Constraint bloomSaturationConstraint = Constraint::New( mCompositeActor, shaderBloomSaturationPropertyIndex, EqualToConstraint()); bloomSaturationConstraint.AddSource( Source(self, mBloomSaturationPropertyIndex) ); bloomSaturationConstraint.Apply(); @@ -562,9 +560,9 @@ void BloomView::SetupProperties() // Register a property that the user can control to fade the image intensity via internally hidden shader mImageIntensityPropertyIndex = self.RegisterProperty(IMAGE_INTENSITY_PROPERTY_NAME, IMAGE_INTENSITY_DEFAULT); - mCompositeImageView.RegisterProperty( IMAGE_INTENSITY_PROPERTY_NAME, IMAGE_INTENSITY_DEFAULT ); - Property::Index shaderImageIntensityPropertyIndex = mCompositeImageView.GetPropertyIndex(IMAGE_INTENSITY_PROPERTY_NAME); - Constraint imageIntensityConstraint = Constraint::New( mCompositeImageView, shaderImageIntensityPropertyIndex, EqualToConstraint()); + mCompositeActor.RegisterProperty( IMAGE_INTENSITY_PROPERTY_NAME, IMAGE_INTENSITY_DEFAULT ); + Property::Index shaderImageIntensityPropertyIndex = mCompositeActor.GetPropertyIndex(IMAGE_INTENSITY_PROPERTY_NAME); + Constraint imageIntensityConstraint = Constraint::New( mCompositeActor, shaderImageIntensityPropertyIndex, EqualToConstraint()); imageIntensityConstraint.AddSource( Source(self, mImageIntensityPropertyIndex) ); imageIntensityConstraint.Apply(); @@ -574,9 +572,9 @@ void BloomView::SetupProperties() // Register a property that the user can control to fade the image saturation via internally hidden shader mImageSaturationPropertyIndex = self.RegisterProperty(IMAGE_SATURATION_PROPERTY_NAME, IMAGE_SATURATION_DEFAULT); - mCompositeImageView.RegisterProperty( IMAGE_SATURATION_PROPERTY_NAME, IMAGE_SATURATION_DEFAULT ); - Property::Index shaderImageSaturationPropertyIndex = mCompositeImageView.GetPropertyIndex(IMAGE_SATURATION_PROPERTY_NAME); - Constraint imageSaturationConstraint = Constraint::New( mCompositeImageView, shaderImageSaturationPropertyIndex, EqualToConstraint()); + mCompositeActor.RegisterProperty( IMAGE_SATURATION_PROPERTY_NAME, IMAGE_SATURATION_DEFAULT ); + Property::Index shaderImageSaturationPropertyIndex = mCompositeActor.GetPropertyIndex(IMAGE_SATURATION_PROPERTY_NAME); + Constraint imageSaturationConstraint = Constraint::New( mCompositeActor, shaderImageSaturationPropertyIndex, EqualToConstraint()); imageSaturationConstraint.AddSource( Source(self, mImageSaturationPropertyIndex) ); imageSaturationConstraint.Apply(); } diff --git a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.h b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.h index 71ed4c7..0377146 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.h +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include // INTERNAL INCLUDES #include @@ -133,14 +133,14 @@ private: ///////////////////////////////////////////////////////////// // for rendering all user added children to offscreen target - FrameBufferImage mRenderTargetForRenderingChildren; + FrameBuffer mRenderTargetForRenderingChildren; RenderTask mRenderChildrenTask; ///////////////////////////////////////////////////////////// // for extracting bright parts of image to an offscreen target FrameBuffer mBloomExtractTarget; // for rendering bright parts of image into separate texture, also used as target for gaussian blur RenderTask mBloomExtractTask; - Toolkit::ImageView mBloomExtractImageView; + Actor mBloomExtractActor; ///////////////////////////////////////////////////////////// // for blurring extracted bloom @@ -150,12 +150,12 @@ private: // for compositing bloom and children renders to offscreen target RenderTask mCompositeTask; - Toolkit::ImageView mCompositeImageView; + Actor mCompositeActor; ///////////////////////////////////////////////////////////// // for holding blurred result - FrameBufferImage mOutputRenderTarget; - Toolkit::ImageView mTargetImageView; + FrameBuffer mOutputRenderTarget; + Actor mTargetActor; ///////////////////////////////////////////////////////////// // Properties for setting by user, e.g. by animations diff --git a/dali-toolkit/internal/controls/control/control-renderers.cpp b/dali-toolkit/internal/controls/control/control-renderers.cpp new file mode 100644 index 0000000..052d822 --- /dev/null +++ b/dali-toolkit/internal/controls/control/control-renderers.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// INTERNAL INCLUDES +#include + +namespace Dali +{ +namespace Toolkit +{ +namespace Internal +{ + +#define DALI_COMPOSE_SHADER(STR) #STR + +const char * const BASIC_VERTEX_SOURCE = DALI_COMPOSE_SHADER( + precision mediump float;\n + attribute mediump vec2 aPosition;\n + varying mediump vec2 vTexCoord;\n + uniform mediump mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + \n + void main()\n + {\n + mediump vec4 vertexPosition = vec4(aPosition * uSize.xy, 0.0, 1.0);\n + vTexCoord = aPosition + vec2(0.5); + gl_Position = uMvpMatrix * vertexPosition;\n + }\n +); + +const char * const BASIC_FRAGMENT_SOURCE = DALI_COMPOSE_SHADER( + precision mediump float;\n + varying mediump vec2 vTexCoord;\n + uniform sampler2D sTexture;\n + uniform vec4 uColor;\n + \n + void main()\n + {\n + gl_FragColor = texture2D(sTexture, vTexCoord);\n + gl_FragColor *= uColor; + }\n +); + +Geometry CreateGridGeometry( Uint16Pair gridSize ) +{ + uint16_t gridWidth = gridSize.GetWidth(); + uint16_t gridHeight = gridSize.GetHeight(); + + // Create vertices + Vector< Vector2 > vertices; + vertices.Reserve( ( gridWidth + 1 ) * ( gridHeight + 1 ) ); + + for( int y = 0; y < gridHeight + 1; ++y ) + { + for( int x = 0; x < gridWidth + 1; ++x ) + { + vertices.PushBack( Vector2( (float)x/gridWidth - 0.5f, (float)y/gridHeight - 0.5f) ); + } + } + + // Create indices + Vector< unsigned short > indices; + indices.Reserve( (gridWidth+2)*gridHeight*2 - 2); + + for( unsigned int row = 0u; row < gridHeight; ++row ) + { + unsigned int rowStartIndex = row*(gridWidth+1u); + unsigned int nextRowStartIndex = rowStartIndex + gridWidth +1u; + + if( row != 0u ) // degenerate index on non-first row + { + indices.PushBack( rowStartIndex ); + } + + for( unsigned int column = 0u; column < gridWidth+1u; column++) // main strip + { + indices.PushBack( rowStartIndex + column); + indices.PushBack( nextRowStartIndex + column); + } + + if( row != gridHeight-1u ) // degenerate index on non-last row + { + indices.PushBack( nextRowStartIndex + gridWidth ); + } + } + + Property::Map vertexFormat; + vertexFormat[ "aPosition" ] = Property::VECTOR2; + PropertyBuffer vertexPropertyBuffer = PropertyBuffer::New( vertexFormat ); + if( vertices.Size() > 0 ) + { + vertexPropertyBuffer.SetData( &vertices[ 0 ], vertices.Size() ); + } + + // Create the geometry object + Geometry geometry = Geometry::New(); + geometry.AddVertexBuffer( vertexPropertyBuffer ); + if( indices.Size() > 0 ) + { + geometry.SetIndexBuffer( &indices[ 0 ], indices.Size() ); + } + + geometry.SetType( Geometry::TRIANGLE_STRIP ); + + return geometry; +} + +Dali::Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc ) +{ + Dali::Shader shader = Dali::Shader::New( vertexSrc, fragmentSrc ); + + Dali::Geometry texturedQuadGeometry = Dali::Geometry::New(); + + struct VertexPosition { Dali::Vector2 position; }; + struct VertexTexture { Dali::Vector2 texture; }; + + VertexPosition positionArray[] = + { + { Dali::Vector2( -0.5f, -0.5f ) }, + { Dali::Vector2( 0.5f, -0.5f ) }, + { Dali::Vector2( -0.5f, 0.5f ) }, + { Dali::Vector2( 0.5f, 0.5f ) } + }; + uint32_t numberOfVertices = sizeof(positionArray)/sizeof(VertexPosition); + + Dali::Property::Map positionVertexFormat; + positionVertexFormat["aPosition"] = Dali::Property::VECTOR2; + Dali::PropertyBuffer positionVertices = Dali::PropertyBuffer::New( positionVertexFormat ); + positionVertices.SetData( positionArray, numberOfVertices ); + texturedQuadGeometry.AddVertexBuffer( positionVertices ); + + const uint16_t indices[] = { 0, 3, 1, 0, 2, 3 }; + texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); + + Dali::Renderer renderer = Dali::Renderer::New( texturedQuadGeometry, shader ); + + Dali::TextureSet textureSet = Dali::TextureSet::New(); + renderer.SetTextures( textureSet ); + + return renderer; +} + +Dali::Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc, Dali::Shader::Hint::Value hints, Uint16Pair gridSize ) +{ + Dali::Shader shader = Dali::Shader::New( vertexSrc, fragmentSrc, hints ); + + Dali::Geometry gridGeometry = CreateGridGeometry( gridSize ); + + Dali::Renderer renderer = Dali::Renderer::New( gridGeometry, shader ); + + Dali::TextureSet textureSet = Dali::TextureSet::New(); + renderer.SetTextures( textureSet ); + + return renderer; +} + +void SetRendererTexture( Dali::Renderer renderer, Dali::Texture texture ) +{ + if( renderer ) + { + Dali::TextureSet textureSet = renderer.GetTextures(); + textureSet.SetTexture( 0u, texture ); + } +} + +void SetRendererTexture( Dali::Renderer renderer, Dali::FrameBuffer frameBuffer ) +{ + if( frameBuffer ) + { + Dali::Texture texture = frameBuffer.GetColorTexture(); + SetRendererTexture( renderer, texture ); + } +} + +} // namespace Internal +} // namespace Toolkit +} // namespace Dali diff --git a/dali-toolkit/internal/controls/control/control-renderers.h b/dali-toolkit/internal/controls/control/control-renderers.h new file mode 100644 index 0000000..320528c --- /dev/null +++ b/dali-toolkit/internal/controls/control/control-renderers.h @@ -0,0 +1,68 @@ +#ifndef DALI_TOOLKIT_INTERNAL_CONTROL_RENDERERS_H +#define DALI_TOOLKIT_INTERNAL_CONTROL_RENDERERS_H + +/* + * Copyright (c) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +namespace Dali +{ +namespace Toolkit +{ +namespace Internal +{ + +extern const char* const BASIC_VERTEX_SOURCE; + +extern const char* const BASIC_FRAGMENT_SOURCE; + +/** + * Helper method for rendering an image with custom shader. + * @param[in] vertextSrc The custom vertex shader. + * @param[in] fragmentSrc The custom fragment shader. + * @return A newly created renderer. + */ +Dali::Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc ); + +/** + * Helper method for rendering an image with custom shader. + * @param[in] vertextSrc The custom vertex shader. + * @param[in] fragmentSrc The custom fragment shader. + * @param[in] gridSize The number of grid sub-divisions required. + * @return A newly created renderer. + */ +Dali::Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc, Dali::Shader::Hint::Value hints, Dali::Uint16Pair gridSize ); + +/** + * Helper method for setting the first texture passed to a renderer. + * @param[in] renderer The renderer using the texture. + * @param[in] texture The texture to set. + */ +void SetRendererTexture( Dali::Renderer renderer, Dali::Texture texture ); + +/** + * Helper method for setting the first texture passed to a renderer. + * @param[in] renderer The renderer using the texture. + * @param[in] framebuffer A frame buffer color texture attached. + */ +void SetRendererTexture( Dali::Renderer renderer, Dali::FrameBuffer frameBuffer ); + +} // namespace Internal +} // namespace Toolkit +} // namespace Dali + +#endif // DALI_TOOLKIT_INTERNAL_CONTROL_RENDERERS_H 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 d2e188d..0c34673 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -28,18 +28,14 @@ #include #include #include -#include // INTERNAL INCLUDES -#include #include #include -#include #include #include #include -#include -#include +#include namespace Dali { @@ -69,10 +65,6 @@ const float ARBITRARY_FIELD_OF_VIEW = Math::PI / 4.0f; 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,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 ) { } @@ -191,16 +183,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 +203,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; @@ -309,6 +290,17 @@ void EffectsView::OnSizeSet(const Vector3& targetSize) void EffectsView::OnStageConnection( 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 ); @@ -316,6 +308,8 @@ void EffectsView::OnStageConnection( int depth ) void EffectsView::OnStageDisconnection() { + Actor self( Self() ); + Disable(); const size_t numFilters( mFilters.Size() ); @@ -324,6 +318,13 @@ void EffectsView::OnStageDisconnection() mFilters[i]->Disable(); } + // Remove renderers + self.RemoveRenderer( mRendererForChildren ); + mRendererForChildren.Reset(); + + self.RemoveRenderer( mRendererPostFilter ); + mRendererPostFilter.Reset(); + Control::OnStageDisconnection(); } @@ -351,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 ); @@ -360,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 ); @@ -384,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 ); @@ -393,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 ); @@ -417,6 +418,7 @@ void EffectsView::SetupFilters() } } } + void EffectsView::AllocateResources() { if(mTargetSize != mLastSize) @@ -426,15 +428,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(); } @@ -479,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 diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.h b/dali-toolkit/internal/controls/effects-view/effects-view-impl.h index 54527d3..0703f63 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.h +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.h @@ -22,11 +22,12 @@ #include #include #include +#include +#include // INTERNAL INCLUDES #include #include -#include namespace Dali { @@ -57,15 +58,6 @@ public: EffectsView(); /** - * Constructor. - * @copydoc Toolkit::EffectsView New(const unsigned int,const float,const Pixel::Format,const float,const float) - */ - EffectsView(const unsigned int numSamples, const float blurBellCurveWidth, const int spread, - const Pixel::Format pixelFormat, - const float downsampleWidthScale, const float downsampleHeightScale, - FrameBufferImage image); - - /** * A reference counted object may only be deleted by calling Unreference() */ virtual ~EffectsView(); @@ -214,8 +206,8 @@ private: // attributes/properties ///////////////////////////////////////////////////////////// // for rendering all user added children to offscreen target - FrameBufferImage mImageForChildren; - Toolkit::Visual::Base mVisualForChildren; + FrameBuffer mFrameBufferForChildren; + Renderer mRendererForChildren; RenderTask mRenderTaskForChildren; CameraActor mCameraForChildren; Actor mChildrenRoot; // for creating a subtree for all user added child actors @@ -230,8 +222,8 @@ private: // attributes/properties Vector2 mLastSize; ///////////////////////////////////////////////////////////// // post blur image - FrameBufferImage mImagePostFilter; - Toolkit::Visual::Base mVisualPostFilter; + FrameBuffer mFrameBufferPostFilter; + Renderer mRendererPostFilter; Vector mFilters; diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp index 987acbe..d83ed24 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp @@ -35,6 +35,7 @@ // INTERNAL INCLUDES #include +#include // TODO: // pixel format / size - set from JSON @@ -100,37 +101,6 @@ const float GAUSSIAN_BLUR_VIEW_DEFAULT_DOWNSAMPLE_HEIGHT_SCALE = 0.5f; const float ARBITRARY_FIELD_OF_VIEW = Math::PI / 4.0f; -#define DALI_COMPOSE_SHADER(STR) #STR - -const char * const BASIC_VERTEX_SOURCE = DALI_COMPOSE_SHADER( - precision mediump float;\n - attribute mediump vec2 aPosition;\n - attribute mediump vec2 aTexture;\n - varying mediump vec2 vTexCoord;\n - uniform mediump mat4 uMvpMatrix;\n - uniform mediump vec3 uSize;\n - \n - void main()\n - {\n - mediump vec4 vertexPosition = vec4(aPosition * uSize.xy, 0.0, 1.0);\n - vTexCoord = aTexture;\n - gl_Position = uMvpMatrix * vertexPosition;\n - }\n -); - -const char * const BASIC_FRAGMENT_SOURCE = DALI_COMPOSE_SHADER( - precision mediump float;\n - varying mediump vec2 vTexCoord;\n - uniform sampler2D sTexture;\n - uniform vec4 uColor;\n - \n - void main()\n - {\n - gl_FragColor = texture2D(sTexture, vTexCoord);\n - gl_FragColor *= uColor; - }\n -); - const char* const GAUSSIAN_BLUR_FRAGMENT_SOURCE = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n @@ -149,72 +119,6 @@ const char* const GAUSSIAN_BLUR_FRAGMENT_SOURCE = DALI_COMPOSE_SHADER( }\n ); -Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc ) -{ - Shader shader = Shader::New( vertexSrc, fragmentSrc ); - - Geometry texturedQuadGeometry = Geometry::New(); - - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - - VertexPosition positionArray[] = - { - { Vector2( -0.5f, -0.5f ) }, - { Vector2( 0.5f, -0.5f ) }, - { Vector2( -0.5f, 0.5f ) }, - { Vector2( 0.5f, 0.5f ) } - }; - uint32_t numberOfVertices = sizeof(positionArray)/sizeof(VertexPosition); - - VertexTexture uvArray[] = - { - { Vector2( 0.0f, 0.0f ) }, - { Vector2( 1.0f, 0.0f ) }, - { Vector2( 0.0f, 1.0f ) }, - { Vector2( 1.0f, 1.0f ) } - }; - - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( positionArray, numberOfVertices ); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( uvArray, numberOfVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - - const uint16_t indices[] = { 0, 3, 1, 0, 2, 3 }; - texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); - - Renderer renderer = Renderer::New( texturedQuadGeometry, shader ); - - TextureSet textureSet = TextureSet::New(); - renderer.SetTextures( textureSet ); - - return renderer; -} - -void SetTexture( Actor actor, Texture texture ) -{ - if( Renderer renderer = actor.GetRendererAt(0) ) - { - TextureSet textureSet = renderer.GetTextures(); - textureSet.SetTexture( 0u, texture ); - } -} - -void SetTexture( Actor actor, FrameBuffer frameBuffer ) -{ - if( frameBuffer ) - { - SetTexture( actor, frameBuffer.GetColorTexture() ); - } -} - } // namespace @@ -322,7 +226,7 @@ void GaussianBlurView::SetUserImageAndOutputRenderTarget(Texture inputImage, Fra mUserInputImage = inputImage; - SetTexture( mHorizBlurActor, inputImage ); + SetRendererTexture( mHorizBlurActor.GetRendererAt(0), inputImage ); mUserOutputRenderTarget = outputRenderTarget; } @@ -519,7 +423,7 @@ void GaussianBlurView::AllocateResources() mRenderTargetForRenderingChildren.AttachColorTexture( texture ); // Set actor for performing a horizontal blur - SetTexture( mHorizBlurActor, mRenderTargetForRenderingChildren ); + SetRendererTexture( mHorizBlurActor.GetRendererAt(0), mRenderTargetForRenderingChildren ); // Create offscreen buffer for vert blur pass mRenderTarget1 = FrameBuffer::New( mDownsampledWidth, mDownsampledHeight, FrameBuffer::Attachment::NONE ); @@ -527,10 +431,10 @@ void GaussianBlurView::AllocateResources() mRenderTarget1.AttachColorTexture( texture ); // use the completed blur in the first buffer and composite with the original child actors render - SetTexture( mCompositingActor, mRenderTarget1 ); + SetRendererTexture( mCompositingActor.GetRendererAt(0), mRenderTarget1 ); // set up target actor for rendering result, i.e. the blurred image - SetTexture( mTargetActor, mRenderTargetForRenderingChildren ); + SetRendererTexture( mTargetActor.GetRendererAt(0), mRenderTargetForRenderingChildren ); } // Create offscreen buffer for horiz blur pass @@ -543,7 +447,7 @@ void GaussianBlurView::AllocateResources() // size needs to match render target mVertBlurActor.SetSize(mDownsampledWidth, mDownsampledHeight); - SetTexture( mVertBlurActor, mRenderTarget2 ); + SetRendererTexture( mVertBlurActor.GetRendererAt(0), mRenderTarget2 ); // set gaussian blur up for new sized render targets SetShaderConstants(); diff --git a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp index 70fd250..0233991 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -31,6 +31,7 @@ // INTERNAL INCLUDES #include +#include #include #include @@ -153,19 +154,22 @@ void ShadowView::SetShadowPlaneBackground(Actor shadowPlaneBackground) { mShadowPlaneBg = shadowPlaneBackground; - mShadowPlane = Toolkit::ImageView::New( mOutputImage ); + mShadowPlane = Actor::New(); mShadowPlane.SetName( "SHADOW_PLANE" ); - mShadowPlane.SetParentOrigin(ParentOrigin::CENTER); - mShadowPlane.SetAnchorPoint(AnchorPoint::CENTER); + mShadowPlane.SetParentOrigin( ParentOrigin::CENTER ); + mShadowPlane.SetAnchorPoint( AnchorPoint::CENTER ); + Renderer shadowRenderer = CreateRenderer( RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE, Shader::Hint::OUTPUT_IS_TRANSPARENT, Uint16Pair(20,20) ); + TextureSet textureSet = shadowRenderer.GetTextures(); + textureSet.SetTexture( 0u, mOutputFrameBuffer.GetColorTexture() ); + mShadowPlane.AddRenderer( shadowRenderer ); - mShadowPlane.SetProperty( Toolkit::ImageView::Property::IMAGE, mShadowVisualMap ); SetShaderConstants(); // Rather than parent the shadow plane drawable and have constraints to move it to the same // position, instead parent the shadow plane drawable on the shadow plane passed in. - mShadowPlaneBg.Add(mShadowPlane); - mShadowPlane.SetParentOrigin(ParentOrigin::CENTER); - mShadowPlane.SetZ(1.0f); + mShadowPlaneBg.Add( mShadowPlane ); + mShadowPlane.SetParentOrigin( ParentOrigin::CENTER ); + mShadowPlane.SetZ( 1.0f ); ConstrainCamera(); @@ -242,22 +246,14 @@ void ShadowView::OnInitialize() mCameraActor.SetOrientation(Radian(Degree(180)), Vector3::YAXIS); mCameraActor.SetPosition(DEFAULT_LIGHT_POSITION); - - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = RENDER_SHADOW_VERTEX_SOURCE; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = RENDER_SHADOW_FRAGMENT_SOURCE; - - customShader[ Toolkit::Visual::Shader::Property::SUBDIVIDE_GRID_X ] = 20; - customShader[ Toolkit::Visual::Shader::Property::SUBDIVIDE_GRID_Y ] = 20; - - customShader[ Toolkit::Visual::Shader::Property::HINTS ] = Shader::Hint::OUTPUT_IS_TRANSPARENT; - - mShadowVisualMap[ Toolkit::Visual::Property::SHADER ] = customShader; - // Create render targets needed for rendering from light's point of view - mSceneFromLightRenderTarget = FrameBufferImage::New( stageSize.width, stageSize.height, Pixel::RGBA8888 ); + mSceneFromLightRenderTarget = FrameBuffer::New( stageSize.width, stageSize.height, FrameBuffer::Attachment::NONE ); + Texture textureFromLight = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, unsigned(stageSize.width), unsigned(stageSize.height) ); + mSceneFromLightRenderTarget.AttachColorTexture( textureFromLight ); - mOutputImage = FrameBufferImage::New( stageSize.width * 0.5f, stageSize.height * 0.5f, Pixel::RGBA8888 ); + mOutputFrameBuffer = FrameBuffer::New( stageSize.width * 0.5f, stageSize.height * 0.5f, FrameBuffer::Attachment::NONE ); + Texture outputTexture = Texture::New( TextureType::TEXTURE_2D, Pixel::RGBA8888, unsigned(stageSize.width * 0.5f), unsigned(stageSize.height * 0.5f) ); + mOutputFrameBuffer.AttachColorTexture( outputTexture ); ////////////////////////////////////////////////////// // Connect to actor tree @@ -265,23 +261,23 @@ void ShadowView::OnInitialize() Self().Add( mChildrenRoot ); Stage::GetCurrent().Add( mCameraActor ); - mBlurFilter.SetRefreshOnDemand(false); - mBlurFilter.SetInputImage(mSceneFromLightRenderTarget); - mBlurFilter.SetOutputImage(mOutputImage); - mBlurFilter.SetSize(stageSize * 0.5f); - mBlurFilter.SetPixelFormat(Pixel::RGBA8888); + mBlurFilter.SetRefreshOnDemand( false ); + mBlurFilter.SetInputTexture( mSceneFromLightRenderTarget.GetColorTexture() ); + mBlurFilter.SetOutputFrameBuffer( mOutputFrameBuffer ); + mBlurFilter.SetSize( stageSize * 0.5f ); + mBlurFilter.SetPixelFormat( Pixel::RGBA8888 ); mBlurRootActor = Actor::New(); mBlurRootActor.SetName( "BLUR_ROOT_ACTOR" ); // Turn off inheritance to ensure filter renders properly mBlurRootActor.SetParentOrigin( ParentOrigin::CENTER ); - mBlurRootActor.SetInheritPosition(false); - mBlurRootActor.SetInheritOrientation(false); - mBlurRootActor.SetInheritScale(false); - mBlurRootActor.SetColorMode(USE_OWN_COLOR); + mBlurRootActor.SetInheritPosition( false ); + mBlurRootActor.SetInheritOrientation( false ); + mBlurRootActor.SetInheritScale( false ); + mBlurRootActor.SetColorMode( USE_OWN_COLOR ); - Self().Add(mBlurRootActor); + Self().Add( mBlurRootActor ); mBlurFilter.SetRootActor(mBlurRootActor); mBlurFilter.SetBackgroundColor(Vector4::ZERO); @@ -340,7 +336,7 @@ void ShadowView::CreateRenderTasks() mRenderSceneTask.SetCameraActor( mCameraActor ); mRenderSceneTask.SetSourceActor( mChildrenRoot ); - mRenderSceneTask.SetTargetFrameBuffer( mSceneFromLightRenderTarget ); + mRenderSceneTask.SetFrameBuffer( mSceneFromLightRenderTarget ); mRenderSceneTask.SetInputEnabled( false ); mRenderSceneTask.SetClearEnabled( true ); diff --git a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h index bd0b376..1cc97ca 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h @@ -137,14 +137,14 @@ private: void CreateBlurFilter(); private: - Toolkit::ImageView mShadowPlane; // Shadow renders into this actor + Actor mShadowPlane; // Shadow renders into this actor Actor mShadowPlaneBg; // mShadowPlane renders directly in front of this actor Actor mPointLight; // Shadow is cast from this point light ///////////////////////////////////////////////////////////// - FrameBufferImage mSceneFromLightRenderTarget; // for rendering normal scene seen from light to texture instead of the screen + FrameBuffer mSceneFromLightRenderTarget; // for rendering normal scene seen from light to texture instead of the screen - FrameBufferImage mOutputImage; + FrameBuffer mOutputFrameBuffer; Actor mChildrenRoot; // Subtree for all user added child actors that should be rendered normally Actor mBlurRootActor; // Root actor for blur filter processing diff --git a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp index 78f354b..70bd49d 100644 --- a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp @@ -32,6 +32,7 @@ // INTERNAL_INCLUDES #include #include +#include #include #include @@ -95,104 +96,6 @@ struct ActorOpacityConstraint Vector2 mRange; }; -#define DALI_COMPOSE_SHADER(STR) #STR - -const char * const BASIC_VERTEX_SOURCE = DALI_COMPOSE_SHADER( - precision mediump float;\n - attribute mediump vec2 aPosition;\n - attribute mediump vec2 aTexture;\n - varying mediump vec2 vTexCoord;\n - uniform mediump mat4 uMvpMatrix;\n - uniform mediump vec3 uSize;\n - \n - void main()\n - {\n - mediump vec4 vertexPosition = vec4(aPosition * uSize.xy, 0.0, 1.0);\n - vTexCoord = aTexture;\n - gl_Position = uMvpMatrix * vertexPosition;\n - }\n -); - -const char * const BASIC_FRAGMENT_SOURCE = DALI_COMPOSE_SHADER( - precision mediump float;\n - varying mediump vec2 vTexCoord;\n - uniform sampler2D sTexture;\n - uniform vec4 uColor;\n - \n - void main()\n - {\n - gl_FragColor = texture2D(sTexture, vTexCoord);\n - gl_FragColor *= uColor; - }\n -); - -Renderer CreateRenderer( const char* vertexSrc, const char* fragmentSrc ) -{ - Shader shader = Shader::New( vertexSrc, fragmentSrc ); - - Geometry texturedQuadGeometry = Geometry::New(); - - struct VertexPosition { Vector2 position; }; - struct VertexTexture { Vector2 texture; }; - - VertexPosition positionArray[] = - { - { Vector2( -0.5f, -0.5f ) }, - { Vector2( 0.5f, -0.5f ) }, - { Vector2( -0.5f, 0.5f ) }, - { Vector2( 0.5f, 0.5f ) } - }; - uint32_t numberOfVertices = sizeof(positionArray)/sizeof(VertexPosition); - - VertexTexture uvArray[] = - { - { Vector2( 0.0f, 0.0f ) }, - { Vector2( 1.0f, 0.0f ) }, - { Vector2( 0.0f, 1.0f ) }, - { Vector2( 1.0f, 1.0f ) } - }; - - Property::Map positionVertexFormat; - positionVertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer positionVertices = PropertyBuffer::New( positionVertexFormat ); - positionVertices.SetData( positionArray, numberOfVertices ); - texturedQuadGeometry.AddVertexBuffer( positionVertices ); - - Property::Map textureVertexFormat; - textureVertexFormat["aTexture"] = Property::VECTOR2; - PropertyBuffer textureVertices = PropertyBuffer::New( textureVertexFormat ); - textureVertices.SetData( uvArray, numberOfVertices ); - texturedQuadGeometry.AddVertexBuffer( textureVertices ); - - const uint16_t indices[] = { 0, 3, 1, 0, 2, 3 }; - texturedQuadGeometry.SetIndexBuffer ( &indices[0], sizeof( indices )/ sizeof( indices[0] ) ); - - Renderer renderer = Renderer::New( texturedQuadGeometry, shader ); - - TextureSet textureSet = TextureSet::New(); - renderer.SetTextures( textureSet ); - - return renderer; -} - -void SetRendererTexture( Renderer& renderer, Texture& texture ) -{ - if( renderer ) - { - TextureSet textureSet = renderer.GetTextures(); - textureSet.SetTexture( 0u, texture ); - } -} - -void SetRendererTexture( Renderer& renderer, FrameBuffer& frameBuffer ) -{ - if( frameBuffer ) - { - Texture texture = frameBuffer.GetColorTexture(); - SetRendererTexture( renderer, texture ); - } -} - } // namespace namespace Dali diff --git a/dali-toolkit/internal/file.list b/dali-toolkit/internal/file.list index c2b60e2..5d23e8f 100755 --- a/dali-toolkit/internal/file.list +++ b/dali-toolkit/internal/file.list @@ -56,6 +56,7 @@ toolkit_src_files = \ $(toolkit_src_dir)/controls/buttons/toggle-button-impl.cpp \ $(toolkit_src_dir)/controls/control/control-data-impl.cpp \ $(toolkit_src_dir)/controls/control/control-debug.cpp \ + $(toolkit_src_dir)/controls/control/control-renderers.cpp \ $(toolkit_src_dir)/controls/effects-view/effects-view-impl.cpp \ $(toolkit_src_dir)/controls/flex-container/flex-container-impl.cpp \ $(toolkit_src_dir)/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp \ diff --git a/dali-toolkit/internal/filters/blur-two-pass-filter.cpp b/dali-toolkit/internal/filters/blur-two-pass-filter.cpp index f2689ef..5dabfb7 100644 --- a/dali-toolkit/internal/filters/blur-two-pass-filter.cpp +++ b/dali-toolkit/internal/filters/blur-two-pass-filter.cpp @@ -25,10 +25,9 @@ #include #include #include -#include // INTERNAL INCLUDES -#include +#include namespace Dali { @@ -116,7 +115,7 @@ BlurTwoPassFilter::BlurTwoPassFilter() { // create blending actor and register the property in constructor // to make sure that GetBlurStrengthPropertyIndex() always returns a valid index - mActorForBlending = Toolkit::ImageView::New(); + mActorForBlending = Actor::New(); mBlurStrengthPropertyIndex = mActorForBlending.RegisterProperty( BLUR_STRENGTH_UNIFORM_NAME, 1.f ); } @@ -126,32 +125,54 @@ BlurTwoPassFilter::~BlurTwoPassFilter() void BlurTwoPassFilter::Enable() { + // create custom shader effect + if( !GetKernelSize() ) + { + CreateKernel( DEFAULT_KERNEL4, sizeof(DEFAULT_KERNEL4)/sizeof(DEFAULT_KERNEL4[0]) ); + } + int kernelSize( static_cast< int >(GetKernelSize()) ); + + // Set up blur-two-pass custom shader + std::ostringstream sstream; + sstream << "#define NUM_SAMPLES " << kernelSize << "\n"; + sstream << BLUR_TWO_PASS_FRAGMENT_SOURCE; + std::string fragmentSource( sstream.str() ); + // create actor to render input with applied emboss effect - mActorForInput = Toolkit::ImageView::New( mInputImage ); + mActorForInput = Actor::New(); mActorForInput.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput.SetSize( mTargetSize ); + Renderer rendererForInput = CreateRenderer( BASIC_VERTEX_SOURCE, fragmentSource.c_str() ); + SetRendererTexture( rendererForInput, mInputTexture ); + mActorForInput.AddRenderer( rendererForInput ); // create internal offscreen for result of horizontal pass - mImageForHorz = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mFrameBufferForHorz = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture textureForHorz = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferForHorz.AttachColorTexture( textureForHorz ); + // create an actor to render mImageForHorz for vertical blur pass - mActorForHorz = Toolkit::ImageView::New( mImageForHorz ); + mActorForHorz = Actor::New(); mActorForHorz.SetParentOrigin( ParentOrigin::CENTER ); mActorForHorz.SetSize( mTargetSize ); + Renderer rendererForHorz = CreateRenderer( BASIC_VERTEX_SOURCE, fragmentSource.c_str() ); + SetRendererTexture( rendererForHorz, textureForHorz ); + mActorForHorz.AddRenderer( rendererForHorz ); // create internal offscreen for result of the two pass blurred image - mBlurredImage = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mBlurredFrameBuffer = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture blurredTexture = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mBlurredFrameBuffer.AttachColorTexture( blurredTexture ); + // create an actor to blend the blurred image and the input image with the given blur strength - mActorForBlending.SetImage( mBlurredImage ); + Renderer rendererForBlending = CreateRenderer( BASIC_VERTEX_SOURCE, BLEND_TWO_IMAGES_FRAGMENT_SOURCE ); + TextureSet textureSetForBlending = rendererForBlending.GetTextures(); + textureSetForBlending.SetTexture( 0u, blurredTexture ); + textureSetForBlending.SetTexture( 1u, mInputTexture ); + mActorForBlending.AddRenderer( rendererForBlending ); mActorForBlending.SetParentOrigin( ParentOrigin::CENTER ); mActorForBlending.SetSize( mTargetSize ); - // create custom shader effect - if( !GetKernelSize() ) - { - CreateKernel( DEFAULT_KERNEL4, sizeof(DEFAULT_KERNEL4)/sizeof(DEFAULT_KERNEL4[0]) ); - } - int kernelSize( static_cast< int >(GetKernelSize()) ); - for( int i = 0; i < kernelSize; ++i ) { const std::string offsetUniform( GetOffsetUniformName( i ) ); @@ -164,34 +185,10 @@ void BlurTwoPassFilter::Enable() mActorForHorz.RegisterProperty( weightUniform, mKernel[i].z ); } - // Set up blur-two-pass custom shader - std::ostringstream fragmentSource; - fragmentSource << "#define NUM_SAMPLES " << kernelSize << "\n"; - fragmentSource << BLUR_TWO_PASS_FRAGMENT_SOURCE; - - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentSource.str(); - Property::Map visualMap; - visualMap.Insert( Toolkit::Visual::Property::SHADER, customShader ); - mActorForInput.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); - mActorForHorz.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); - - // Set up blend-two-image custom shader - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = BLEND_TWO_IMAGES_FRAGMENT_SOURCE; - visualMap[ Toolkit::Visual::Property::SHADER ] = customShader; - mActorForBlending.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); - mRootActor.Add( mActorForInput ); mRootActor.Add( mActorForHorz ); mRootActor.Add( mActorForBlending ); - // Add effect texture to blend-two-image custom shader - TextureSet textureSet = mActorForBlending.GetRendererAt(0).GetTextures(); - if( textureSet ) - { - TextureSetImage( textureSet, 1u, mInputImage ); - } - SetupCamera(); CreateRenderTasks(); } @@ -289,7 +286,7 @@ void BlurTwoPassFilter::CreateRenderTasks() mRenderTaskForHorz.SetInputEnabled( false ); mRenderTaskForHorz.SetClearEnabled( true ); mRenderTaskForHorz.SetClearColor( mBackgroundColor ); - mRenderTaskForHorz.SetTargetFrameBuffer( mImageForHorz ); + mRenderTaskForHorz.SetFrameBuffer( mFrameBufferForHorz ); mRenderTaskForHorz.SetCameraActor( mCameraActor ); // use the internal buffer and perform a horizontal blur targeting the output buffer @@ -300,7 +297,7 @@ void BlurTwoPassFilter::CreateRenderTasks() mRenderTaskForVert.SetInputEnabled( false ); mRenderTaskForVert.SetClearEnabled( true ); mRenderTaskForVert.SetClearColor( mBackgroundColor ); - mRenderTaskForVert.SetTargetFrameBuffer( mBlurredImage ); + mRenderTaskForVert.SetFrameBuffer( mBlurredFrameBuffer ); mRenderTaskForVert.SetCameraActor( mCameraActor ); //Perform a blending between the blurred image and the input image @@ -311,7 +308,7 @@ void BlurTwoPassFilter::CreateRenderTasks() mRenderTaskForBlending.SetInputEnabled( false ); mRenderTaskForBlending.SetClearEnabled( true ); mRenderTaskForBlending.SetClearColor( mBackgroundColor ); - mRenderTaskForBlending.SetTargetFrameBuffer( mOutputImage ); + mRenderTaskForBlending.SetFrameBuffer( mOutputFrameBuffer ); mRenderTaskForBlending.SetCameraActor( mCameraActor ); } diff --git a/dali-toolkit/internal/filters/blur-two-pass-filter.h b/dali-toolkit/internal/filters/blur-two-pass-filter.h index 438761d..9dd33af 100644 --- a/dali-toolkit/internal/filters/blur-two-pass-filter.h +++ b/dali-toolkit/internal/filters/blur-two-pass-filter.h @@ -20,7 +20,6 @@ // EXTERNAL INCLUDES #include -#include // INTERNAL INCLUDES #include "image-filter.h" @@ -89,19 +88,19 @@ private: private: // Attributes - // To perform horizontal blur from mInputImage to mImageForHorz + // To perform horizontal blur from mInputTexture to mFrameBufferForHorz RenderTask mRenderTaskForHorz; - Toolkit::ImageView mActorForInput; - FrameBufferImage mImageForHorz; + Actor mActorForInput; + FrameBuffer mFrameBufferForHorz; - // To perform vertical blur from mImageForHorz to mOutputImage + // To perform vertical blur from mFrameBufferForHorz to mOutputFrameBuffer RenderTask mRenderTaskForVert; - Toolkit::ImageView mActorForHorz; - FrameBufferImage mBlurredImage; + Actor mActorForHorz; + FrameBuffer mBlurredFrameBuffer; // To blend the blurred image and input image according to the blur strength RenderTask mRenderTaskForBlending; - Toolkit::ImageView mActorForBlending; + Actor mActorForBlending; Actor mRootActorForBlending; Property::Index mBlurStrengthPropertyIndex; diff --git a/dali-toolkit/internal/filters/emboss-filter.cpp b/dali-toolkit/internal/filters/emboss-filter.cpp index 7f6dd18..d8349da 100644 --- a/dali-toolkit/internal/filters/emboss-filter.cpp +++ b/dali-toolkit/internal/filters/emboss-filter.cpp @@ -25,13 +25,9 @@ #include #include #include -#include // INTERNAL INCLUDES -#include -#include -#include -#include +#include namespace Dali { @@ -91,32 +87,36 @@ EmbossFilter::~EmbossFilter() void EmbossFilter::Enable() { - mImageForEmboss1 = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); - mImageForEmboss2 = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mFrameBufferForEmboss1 = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture texture1 = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferForEmboss1.AttachColorTexture( texture1 ); - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = EMBOSS_FRAGMENT_SOURCE; - Property::Map visualMap; - visualMap.Insert( Toolkit::Visual::Property::SHADER, customShader ); + mFrameBufferForEmboss2 = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture texture2 = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferForEmboss2.AttachColorTexture( texture2 ); // create actor to render input with applied emboss effect - mActorForInput1 = Toolkit::ImageView::New(mInputImage); + mActorForInput1 = Actor::New(); mActorForInput1.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput1.SetSize(mTargetSize); Vector2 textureScale( 1.5f/mTargetSize.width, 1.5f/mTargetSize.height); mActorForInput1.RegisterProperty( TEX_SCALE_UNIFORM_NAME, textureScale ); mActorForInput1.RegisterProperty( COEFFICIENT_UNIFORM_NAME, Vector3( 2.f, -1.f, -1.f ) ); // set EMBOSS custom shader - mActorForInput1.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); + Renderer renderer1 = CreateRenderer( BASIC_VERTEX_SOURCE, EMBOSS_FRAGMENT_SOURCE ); + SetRendererTexture( renderer1, mInputTexture ); + mActorForInput1.AddRenderer( renderer1 ); mRootActor.Add( mActorForInput1 ); - mActorForInput2 = Toolkit::ImageView::New(mInputImage); + mActorForInput2 = Actor::New(); mActorForInput2.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput2.SetSize(mTargetSize); mActorForInput2.RegisterProperty( TEX_SCALE_UNIFORM_NAME, textureScale ); mActorForInput2.RegisterProperty( COEFFICIENT_UNIFORM_NAME, Vector3( -1.f, -1.f, 2.f ) ); // set EMBOSS custom shader - mActorForInput2.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); + Renderer renderer2 = CreateRenderer( BASIC_VERTEX_SOURCE, EMBOSS_FRAGMENT_SOURCE ); + SetRendererTexture( renderer2, mInputTexture ); + mActorForInput2.AddRenderer( renderer2 ); mRootActor.Add( mActorForInput2 ); mActorForComposite = Actor::New(); @@ -124,16 +124,17 @@ void EmbossFilter::Enable() mActorForComposite.SetSize(mTargetSize); mActorForComposite.SetColor( Color::BLACK ); - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = COMPOSITE_FRAGMENT_SOURCE; - mRootActor.Add( mActorForComposite ); - Internal::InitializeVisual( mActorForComposite, mVisualForEmboss1, mImageForEmboss1 ); - Toolkit::GetImplementation( mVisualForEmboss1 ).SetCustomShader( customShader ); - mActorForComposite.GetRendererAt(0).RegisterProperty( COLOR_UNIFORM_NAME, Color::BLACK ); - Internal::InitializeVisual( mActorForComposite, mVisualForEmboss2, mImageForEmboss2 ); - Toolkit::GetImplementation( mVisualForEmboss2 ).SetCustomShader( customShader ); - mActorForComposite.GetRendererAt(1).RegisterProperty( COLOR_UNIFORM_NAME, Color::WHITE ); + mRendererForEmboss1 = CreateRenderer( BASIC_VERTEX_SOURCE, COMPOSITE_FRAGMENT_SOURCE ); + SetRendererTexture( mRendererForEmboss1, mFrameBufferForEmboss1 ); + mRendererForEmboss1.RegisterProperty( COLOR_UNIFORM_NAME, Color::BLACK ); + mActorForComposite.AddRenderer( mRendererForEmboss1 ); + + mRendererForEmboss2 = CreateRenderer( BASIC_VERTEX_SOURCE, COMPOSITE_FRAGMENT_SOURCE ); + SetRendererTexture( mRendererForEmboss2, mFrameBufferForEmboss2 ); + mRendererForEmboss2.RegisterProperty( COLOR_UNIFORM_NAME, Color::WHITE ); + mActorForComposite.AddRenderer( mRendererForEmboss2 ); SetupCamera(); CreateRenderTasks(); @@ -163,10 +164,12 @@ void EmbossFilter::Disable() if( mActorForComposite ) { - Toolkit::GetImplementation(mVisualForEmboss1).SetOffStage( mActorForComposite ); - Toolkit::GetImplementation(mVisualForEmboss2).SetOffStage( mActorForComposite ); - mVisualForEmboss1.Reset(); - mVisualForEmboss2.Reset(); + mActorForComposite.RemoveRenderer( mRendererForEmboss1 ); + mRendererForEmboss1.Reset(); + + mActorForComposite.RemoveRenderer( mRendererForEmboss2 ); + mRendererForEmboss2.Reset(); + mRootActor.Remove( mActorForComposite ); mActorForComposite.Reset(); } @@ -231,7 +234,7 @@ void EmbossFilter::CreateRenderTasks() mRenderTaskForEmboss1.SetInputEnabled( false ); mRenderTaskForEmboss1.SetClearColor( Vector4( 0.0f, 0.0f, 0.0f, 0.0f ) ); mRenderTaskForEmboss1.SetClearEnabled( true ); - mRenderTaskForEmboss1.SetTargetFrameBuffer( mImageForEmboss1 ); + mRenderTaskForEmboss1.SetFrameBuffer( mFrameBufferForEmboss1 ); mRenderTaskForEmboss1.SetCameraActor( mCameraActor ); mRenderTaskForEmboss2 = taskList.CreateTask(); @@ -241,7 +244,7 @@ void EmbossFilter::CreateRenderTasks() mRenderTaskForEmboss2.SetInputEnabled( false ); mRenderTaskForEmboss2.SetClearColor( Vector4( 1.0f, 1.0f, 1.0f, 0.0f ) ); mRenderTaskForEmboss2.SetClearEnabled( true ); - mRenderTaskForEmboss2.SetTargetFrameBuffer( mImageForEmboss2 ); + mRenderTaskForEmboss2.SetFrameBuffer( mFrameBufferForEmboss2 ); mRenderTaskForEmboss2.SetCameraActor( mCameraActor ); mRenderTaskForOutput = taskList.CreateTask(); @@ -251,7 +254,7 @@ void EmbossFilter::CreateRenderTasks() mRenderTaskForOutput.SetInputEnabled( false ); mRenderTaskForOutput.SetClearColor( Vector4( 0.5f, 0.5f, 0.5f, 0.0f ) ); mRenderTaskForOutput.SetClearEnabled( true ); - mRenderTaskForOutput.SetTargetFrameBuffer( mOutputImage ); + mRenderTaskForOutput.SetFrameBuffer( mOutputFrameBuffer ); mRenderTaskForOutput.SetCameraActor( mCameraActor ); } diff --git a/dali-toolkit/internal/filters/emboss-filter.h b/dali-toolkit/internal/filters/emboss-filter.h index d61a823..2d58538 100644 --- a/dali-toolkit/internal/filters/emboss-filter.h +++ b/dali-toolkit/internal/filters/emboss-filter.h @@ -20,8 +20,10 @@ // EXTERNAL INCLUDES #include -#include -#include +#include +#include + +// INTERNAL INCLUDES #include "image-filter.h" namespace Dali @@ -77,12 +79,12 @@ private: // Attributes RenderTask mRenderTaskForEmboss1; RenderTask mRenderTaskForEmboss2; RenderTask mRenderTaskForOutput; - FrameBufferImage mImageForEmboss1; - FrameBufferImage mImageForEmboss2; - Toolkit::ImageView mActorForInput1; - Toolkit::ImageView mActorForInput2; - Toolkit::Visual::Base mVisualForEmboss1; - Toolkit::Visual::Base mVisualForEmboss2; + FrameBuffer mFrameBufferForEmboss1; + FrameBuffer mFrameBufferForEmboss2; + Actor mActorForInput1; + Actor mActorForInput2; + Renderer mRendererForEmboss1; + Renderer mRendererForEmboss2; Actor mActorForComposite; }; // class EmbossFilter diff --git a/dali-toolkit/internal/filters/image-filter.cpp b/dali-toolkit/internal/filters/image-filter.cpp index f564c96..e90e07e 100644 --- a/dali-toolkit/internal/filters/image-filter.cpp +++ b/dali-toolkit/internal/filters/image-filter.cpp @@ -51,14 +51,14 @@ void ImageFilter::SetRefreshOnDemand( bool onDemand ) mRefreshOnDemand = onDemand; } -void ImageFilter::SetInputImage( Image image ) +void ImageFilter::SetInputTexture( Texture texture ) { - mInputImage = image; + mInputTexture = texture; } -void ImageFilter::SetOutputImage( FrameBufferImage image ) +void ImageFilter::SetOutputFrameBuffer( FrameBuffer frameBuffer ) { - mOutputImage = image; + mOutputFrameBuffer = frameBuffer; } void ImageFilter::SetSize( const Vector2& size ) diff --git a/dali-toolkit/internal/filters/image-filter.h b/dali-toolkit/internal/filters/image-filter.h index dbab5b1..d73f9e6 100644 --- a/dali-toolkit/internal/filters/image-filter.h +++ b/dali-toolkit/internal/filters/image-filter.h @@ -20,6 +20,8 @@ // EXTERNAL INCLUDES #include +#include +#include // INTERNAL INCLUDES #include @@ -36,7 +38,7 @@ namespace Internal /** * An interface class that provides a interface for image filters that perform - * a simple shader effect on an input image, rendering the output to a FrameBufferImage. + * a simple shader effect on an input texture, rendering the output to a FrameBuffer. */ class ImageFilter { @@ -76,16 +78,16 @@ public: void SetRefreshOnDemand( bool onDemand ); /** - * Set the input image - * @param[in] The input/original image. + * Set the input texture + * @param[in] The input/original texture. */ - void SetInputImage( Image image ); + void SetInputTexture( Texture texture ); /** - * Set the output image - * @return The output image. + * Set the output frame buffer + * @return The output frame buffer. */ - void SetOutputImage( FrameBufferImage image ); + void SetOutputFrameBuffer( FrameBuffer frameBuffer ); /** * Set size of ImageFilter. Used to create internal offscreen buffers @@ -145,8 +147,8 @@ protected: void SetupCamera(); protected: - Image mInputImage; - FrameBufferImage mOutputImage; + Texture mInputTexture; + FrameBuffer mOutputFrameBuffer; FilterKernel mKernel; Actor mRootActor; CameraActor mCameraActor; diff --git a/dali-toolkit/internal/filters/spread-filter.cpp b/dali-toolkit/internal/filters/spread-filter.cpp index 0ed7934..5100821 100644 --- a/dali-toolkit/internal/filters/spread-filter.cpp +++ b/dali-toolkit/internal/filters/spread-filter.cpp @@ -25,7 +25,7 @@ #include // INTERNAL INCLUDES -#include +#include namespace Dali { @@ -83,31 +83,32 @@ void SpreadFilter::SetSpread( float spread ) void SpreadFilter::Enable() { // create actor to render input with applied emboss effect - mActorForInput = Toolkit::ImageView::New( mInputImage ); + mActorForInput = Actor::New(); mActorForInput.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput.SetSize(mTargetSize); // register properties as shader uniforms mActorForInput.RegisterProperty( SPREAD_UNIFORM_NAME, mSpread ); mActorForInput.RegisterProperty( TEX_SCALE_UNIFORM_NAME, Vector2( 1.0f / mTargetSize.width, 0.0f ) ); + Renderer rendererForInput = CreateRenderer( BASIC_VERTEX_SOURCE, SPREAD_FRAGMENT_SOURCE ); + SetRendererTexture( rendererForInput, mInputTexture ); + mActorForInput.AddRenderer( rendererForInput ); + // create internal offscreen for result of horizontal pass - mImageForHorz = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat ); + mFrameBufferForHorz = FrameBuffer::New( mTargetSize.width, mTargetSize.height, FrameBuffer::Attachment::NONE ); + Texture textureForHorz = Texture::New( TextureType::TEXTURE_2D, mPixelFormat, unsigned(mTargetSize.width), unsigned(mTargetSize.height) ); + mFrameBufferForHorz.AttachColorTexture( textureForHorz ); + // create an actor to render mImageForHorz for vertical blur pass - mActorForHorz = Toolkit::ImageView::New( mImageForHorz ); + mActorForHorz = Actor::New(); mActorForHorz.SetParentOrigin( ParentOrigin::CENTER ); mActorForHorz.SetSize(mTargetSize); // register properties as shader uniforms mActorForHorz.RegisterProperty( SPREAD_UNIFORM_NAME, mSpread ); mActorForHorz.RegisterProperty( TEX_SCALE_UNIFORM_NAME, Vector2( 0.0f, 1.0f / mTargetSize.height ) ); - - Property::Map customShader; - customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = SPREAD_FRAGMENT_SOURCE; - Property::Map visualMap; - visualMap.Insert( Toolkit::Visual::Property::SHADER, customShader ); - - // set SPREAD custom shader - mActorForInput.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); - mActorForHorz.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap ); + Renderer rendererForHorz = CreateRenderer( BASIC_VERTEX_SOURCE, SPREAD_FRAGMENT_SOURCE ); + SetRendererTexture( rendererForHorz, textureForHorz ); + mActorForHorz.AddRenderer( rendererForHorz ); mRootActor.Add( mActorForInput ); mRootActor.Add( mActorForHorz ); @@ -191,7 +192,7 @@ void SpreadFilter::CreateRenderTasks() mRenderTaskForHorz.SetInputEnabled( false ); mRenderTaskForHorz.SetClearEnabled( true ); mRenderTaskForHorz.SetClearColor( mBackgroundColor ); - mRenderTaskForHorz.SetTargetFrameBuffer( mImageForHorz ); + mRenderTaskForHorz.SetFrameBuffer( mFrameBufferForHorz ); mRenderTaskForHorz.SetCameraActor( mCameraActor ); // use the internal buffer and perform a horizontal blur targeting the output buffer @@ -202,7 +203,7 @@ void SpreadFilter::CreateRenderTasks() mRenderTaskForVert.SetInputEnabled( false ); mRenderTaskForVert.SetClearEnabled( true ); mRenderTaskForVert.SetClearColor( mBackgroundColor ); - mRenderTaskForVert.SetTargetFrameBuffer( mOutputImage ); + mRenderTaskForVert.SetFrameBuffer( mOutputFrameBuffer ); mRenderTaskForVert.SetCameraActor( mCameraActor ); } diff --git a/dali-toolkit/internal/filters/spread-filter.h b/dali-toolkit/internal/filters/spread-filter.h index bc498de..83809f1 100644 --- a/dali-toolkit/internal/filters/spread-filter.h +++ b/dali-toolkit/internal/filters/spread-filter.h @@ -20,7 +20,6 @@ // EXTERNAL INCLUDES #include -#include // INTERNAL INCLUDES #include "image-filter.h" @@ -82,14 +81,14 @@ private: private: // Attributes - // To perform horizontal spread from mInputImage to mImageForHorz + // To perform horizontal spread from mInputTexture to mFrameBufferForHorz RenderTask mRenderTaskForHorz; - Toolkit::ImageView mActorForInput; - FrameBufferImage mImageForHorz; + Actor mActorForInput; + FrameBuffer mFrameBufferForHorz; - // To perform vertical spread from mImageForHorz to mOutputImage + // To perform vertical spread from mFrameBufferForHorz to mOutputFrameBuffer RenderTask mRenderTaskForVert; - Toolkit::ImageView mActorForHorz; + Actor mActorForHorz; int mSpread; }; // class SpreadFilter -- 2.7.4