X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fwireframe%2Fwireframe-visual.cpp;h=ead87c0db16832ecd815aae867e1619f8df412e1;hp=4299eb69c94c7f2c4a221ba40c3a84dcf0c3a866;hb=ab447436de92a2e8bc8cd1393f4807f19ef6b316;hpb=b81c20064def5a5017e77876effd01ddc5bb39d6 diff --git a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp index 4299eb6..ead87c0 100644 --- a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp +++ b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -15,7 +15,6 @@ * */ - // CLASS HEADER #include "wireframe-visual.h" @@ -25,6 +24,7 @@ #include #include #include +#include namespace Dali { @@ -39,64 +39,129 @@ namespace { const char * const POSITION_ATTRIBUTE_NAME("aPosition"); const char * const INDEX_NAME("indices"); +} -const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( -attribute mediump vec2 aPosition;\n -uniform mediump mat4 uMvpMatrix;\n -uniform mediump vec3 uSize;\n -\n -void main()\n -{\n - mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n - vertexPosition.xyz *= uSize;\n - gl_Position = uMvpMatrix * vertexPosition;\n -}\n -); +WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties ) +{ + Visual::BasePtr emtptyVisual; -const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(\n -uniform lowp vec4 uColor;\n -\n -void main()\n -{\n - gl_FragColor = uColor;\n -}\n -); + return New(factoryCache, emtptyVisual, properties); +} +WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual ) +{ + WireframeVisualPtr wireframeVisual(new WireframeVisual(factoryCache, actualVisual)); + wireframeVisual->Initialize(); + return wireframeVisual; } +WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual, const Property::Map& properties ) +{ + WireframeVisualPtr wireframeVisual( new WireframeVisual( factoryCache, actualVisual ) ); + + // Instead of calling SetProperties, looking for the only valid property 'transform' + Property::Value* transformValue = properties.Find( Toolkit::Visual::Property::TRANSFORM, TRANSFORM ); + Property::Map transformMap; + if( transformValue && transformValue->Get( transformMap ) ) + { + wireframeVisual->SetTransformAndSize( transformMap, Vector2::ZERO ); + } + wireframeVisual->Initialize(); + return wireframeVisual; +} -WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache ) -: Visual::Base( factoryCache ) +WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual ) +: Visual::Base( factoryCache, Visual::FittingMode::FILL, actualVisual ? actualVisual->GetType() : Toolkit::Visual::WIREFRAME ), + mActualVisual( actualVisual ) { } WireframeVisual::~WireframeVisual() -{} +{ +} -void WireframeVisual::DoSetOnStage( Actor& actor ) +float WireframeVisual::GetHeightForWidth( float width ) { - InitializeRenderer(); + if( mActualVisual ) + { + return mActualVisual->GetHeightForWidth( width ); + } + else + { + return Visual::Base::GetHeightForWidth( width ); + } +} - actor.AddRenderer( mImpl->mRenderer ); +void WireframeVisual::GetNaturalSize( Vector2& naturalSize ) +{ + if( mActualVisual ) + { + mActualVisual->GetNaturalSize( naturalSize ); + } + else + { + Visual::Base::GetNaturalSize( naturalSize ); + } } void WireframeVisual::DoCreatePropertyMap( Property::Map& map ) const { - map.Clear(); - map.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::WIREFRAME ); + if( mActualVisual ) + { + mActualVisual->CreatePropertyMap( map ); + } + else + { + map.Clear(); + map.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::WIREFRAME ); + } } -void WireframeVisual::InitializeRenderer() +void WireframeVisual::DoCreateInstancePropertyMap( Property::Map& map ) const { - mImpl->mRenderer = mFactoryCache.GetWireframeRenderer(); - if( !mImpl->mRenderer ) + // Do nothing +} + +void WireframeVisual::DoSetProperties( const Property::Map& propertyMap ) +{ + Property::Value* mixValue = propertyMap.Find( Toolkit::Visual::Property::MIX_COLOR, MIX_COLOR ); + if( mixValue ) + { + Vector4 mixColor; + mixValue->Get( mixColor ); + SetMixColor( mixColor ); + } +} + +void WireframeVisual::DoSetOnScene( Actor& actor ) +{ + actor.AddRenderer( mImpl->mRenderer ); + + // Wireframe generated and ready to display + ResourceReady( Toolkit::Visual::ResourceStatus::READY ); +} + +void WireframeVisual::OnInitialize() +{ + Shader shader = mFactoryCache.GetShader( VisualFactoryCache::WIREFRAME_SHADER ); + if( !shader ) { - Geometry geometry = CreateQuadWireframeGeometry(); - Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + shader = Shader::New( SHADER_WIREFRAME_VISUAL_SHADER_VERT, SHADER_WIREFRAME_VISUAL_SHADER_FRAG ); + mFactoryCache.SaveShader( VisualFactoryCache::WIREFRAME_SHADER, shader ); + } - mImpl->mRenderer = Renderer::New( geometry, shader); - mFactoryCache.CacheWireframeRenderer( mImpl->mRenderer ); + Geometry geometry = mFactoryCache.GetGeometry( VisualFactoryCache::WIREFRAME_GEOMETRY ); + if( !geometry ) + { + geometry = CreateQuadWireframeGeometry(); + mFactoryCache.SaveGeometry( VisualFactoryCache::WIREFRAME_GEOMETRY, geometry ); } + + //Create the renderer + mImpl->mRenderer = Renderer::New( geometry, shader); + + //Register transform properties + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); } Geometry WireframeVisual::CreateQuadWireframeGeometry() @@ -114,7 +179,7 @@ Geometry WireframeVisual::CreateQuadWireframeGeometry() Property::Map quadVertexFormat; quadVertexFormat[POSITION_ATTRIBUTE_NAME] = Property::VECTOR2; - PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat ); + VertexBuffer quadVertices = VertexBuffer::New( quadVertexFormat ); quadVertices.SetData( quadVertexData, 4 ); // Create indices @@ -129,6 +194,25 @@ Geometry WireframeVisual::CreateQuadWireframeGeometry() return geometry; } +void WireframeVisual::OnSetTransform() +{ + if( mImpl->mRenderer ) + { + //Register transform properties + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); + } +} + +Visual::Base& WireframeVisual::GetVisualObject() +{ + if( mActualVisual ) + { + return *mActualVisual.Get(); + } + + return *this; +} + } // namespace Internal } // namespace Toolkit