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=5fd3160f7f8e9e95effb5071e0f89801d87d7abf;hp=2e1e4a369cdab46770520382d89d5e38c5c52f8e;hb=8baeadfe23cbb78ccc879aec3350edde7bf8424a;hpb=a1e6ba9ce55ab38ec56cbd718cb62624a8c656a3 diff --git a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp index 2e1e4a3..5fd3160 100644 --- a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp +++ b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp @@ -20,7 +20,7 @@ #include "wireframe-visual.h" // INTERNAL INCLUDES -#include +#include #include #include #include @@ -45,11 +45,24 @@ attribute mediump vec2 aPosition;\n uniform mediump mat4 uMvpMatrix;\n uniform mediump vec3 uSize;\n \n + +//Visual size and offset +uniform mediump vec2 offset;\n +uniform mediump vec2 size;\n +uniform mediump vec4 offsetSizeMode;\n +uniform mediump vec2 origin;\n +uniform mediump vec2 anchorPoint;\n + +vec4 ComputeVertexPosition()\n +{\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n + return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\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 + gl_Position = uMvpMatrix * ComputeVertexPosition();\n }\n ); @@ -64,60 +77,113 @@ void main()\n } -WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache ) +WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties ) { - return new WireframeVisual( factoryCache ); + Visual::BasePtr emtptyVisual; + + return New(factoryCache, emtptyVisual, properties); } -WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache ) -: Visual::Base( factoryCache ) +WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual ) { + return new WireframeVisual( factoryCache, actualVisual ); } -WireframeVisual::~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( DevelVisual::Property::TRANSFORM, TRANSFORM ); + Property::Map transformMap; + if( transformValue && transformValue->Get( transformMap ) ) + { + wireframeVisual->SetTransformAndSize( transformMap, Vector2::ZERO ); + } + + return wireframeVisual; } -void WireframeVisual::DoSetProperties( const Property::Map& propertyMap ) +WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual ) +: Visual::Base( factoryCache ), + mActualVisual( actualVisual ) { - // no properties supported at the moment } -void WireframeVisual::DoSetOnStage( Actor& actor ) +WireframeVisual::~WireframeVisual() { - InitializeRenderer(); +} - actor.AddRenderer( mImpl->mRenderer ); +float WireframeVisual::GetHeightForWidth( float width ) +{ + if( mActualVisual ) + { + return mActualVisual->GetHeightForWidth( width ); + } + else + { + return Visual::Base::GetHeightForWidth( width ); + } +} + +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::VisualProperty::TYPE, Toolkit::Visual::WIREFRAME ); + if( mActualVisual ) + { + mActualVisual->CreatePropertyMap( map ); + } + else + { + map.Clear(); + map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::WIREFRAME ); + } } -void WireframeVisual::DoSetProperty( Dali::Property::Index index, const Dali::Property::Value& propertyValue ) +void WireframeVisual::DoSetProperties( const Property::Map& propertyMap ) { - // TODO + // no properties supported at the moment } -Dali::Property::Value WireframeVisual::DoGetProperty( Dali::Property::Index index ) +void WireframeVisual::DoSetOnStage( Actor& actor ) { - // TODO - return Dali::Property::Value(); + InitializeRenderer(); + + actor.AddRenderer( mImpl->mRenderer ); } void WireframeVisual::InitializeRenderer() { - mImpl->mRenderer = mFactoryCache.GetWireframeRenderer(); - if( !mImpl->mRenderer ) + Shader shader = mFactoryCache.GetShader( VisualFactoryCache::WIREFRAME_SHADER ); + if( !shader ) { - Geometry geometry = CreateQuadWireframeGeometry(); - Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER ); + 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() @@ -150,6 +216,15 @@ Geometry WireframeVisual::CreateQuadWireframeGeometry() return geometry; } +void WireframeVisual::OnSetTransform() +{ + if( mImpl->mRenderer ) + { + //Register transform properties + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); + } +} + } // namespace Internal } // namespace Toolkit