X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fprimitive%2Fprimitive-visual.cpp;h=e949728e0e7dbb8b60abf43f620c49a67932c3af;hp=c85a7a0f43d498fb240879e8485acffd474b9c8e;hb=4ed6dc168df9f847235529aa22d90e316f99a71f;hpb=6cb03e371972cf2707a35ab860c73f1a87470747 diff --git a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp index c85a7a0..e949728 100644 --- a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp +++ b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp @@ -22,11 +22,14 @@ #include #include #include +#include #include #include // INTERNAL INCLUDES +#include #include +#include namespace Dali { @@ -74,7 +77,7 @@ const float DEFAULT_SCALE_HEIGHT = 3.0; ///< For all conics const float DEFAULT_SCALE_RADIUS = 1.0; ///< For cylinders const float DEFAULT_BEVEL_PERCENTAGE = 0.0; ///< For bevelled cubes const float DEFAULT_BEVEL_SMOOTHNESS = 0.0; ///< For bevelled cubes -const Vector4 DEFAULT_COLOR = Vector4( 0.5, 0.5, 0.5, 0.0 ); ///< Grey, for all. +const Vector4 DEFAULT_COLOR = Vector4( 0.5, 0.5, 0.5, 1.0 ); ///< Grey, for all. //Property limits const int MIN_SLICES = 3; ///< Minimum number of slices for spheres and conics @@ -96,7 +99,7 @@ const char * const BEVELLED_CUBE_LABEL( "BEVELLED_CUBE" ); //Shader properties const char * const OBJECT_MATRIX_UNIFORM_NAME( "uObjectMatrix" ); -const char * const COLOR_UNIFORM_NAME( "uColor" ); +const char * const COLOR_UNIFORM_NAME( "mixColor" ); const char * const OBJECT_DIMENSIONS_UNIFORM_NAME( "uObjectDimensions" ); const char * const STAGE_OFFSET_UNIFORM_NAME( "uStageOffset" ); @@ -121,13 +124,26 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec3 lightPosition;\n uniform mediump vec2 uStageOffset;\n - void main()\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 - float xRatio = uSize.x / uObjectDimensions.x;\n - float yRatio = uSize.y / uObjectDimensions.y;\n - float scaleFactor = min( xRatio, yRatio );\n + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw );\n + float scaleFactor = min( visualSize.x / uObjectDimensions.x, visualSize.y / uObjectDimensions.y );\n + vec3 originFlipY = vec3(origin.x, -origin.y, 0.0); + vec3 anchorPointFlipY = vec3( anchorPoint.x, -anchorPoint.y, 0.0); + vec3 offset = vec3( ( offset / uSize.xy ) * offsetSizeMode.xy + offset * (1.0-offsetSizeMode.xy), 0.0) * vec3(1.0,-1.0,1.0);\n + return vec4( (aPosition + anchorPointFlipY)*scaleFactor + (offset + originFlipY)*uSize, 1.0 );\n + }\n - vec4 normalisedVertexPosition = vec4( aPosition * scaleFactor, 1.0 );\n + void main()\n + {\n + vec4 normalisedVertexPosition = ComputeVertexPosition();\n vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;\n vertexPosition = uMvpMatrix * vertexPosition;\n @@ -151,14 +167,23 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( precision mediump float;\n varying mediump vec3 vIllumination;\n uniform lowp vec4 uColor;\n + uniform lowp vec4 mixColor;\n void main()\n {\n - gl_FragColor = vec4( vIllumination.rgb * uColor.rgb, uColor.a );\n + vec4 baseColor = mixColor * uColor;\n + gl_FragColor = vec4( vIllumination.rgb * baseColor.rgb, baseColor.a );\n }\n ); -} // namespace +} // unnamed namespace + +PrimitiveVisualPtr PrimitiveVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties ) +{ + PrimitiveVisualPtr primitiveVisualPtr( new PrimitiveVisual( factoryCache ) ); + primitiveVisualPtr->SetProperties( properties ); + return primitiveVisualPtr; +} PrimitiveVisual::PrimitiveVisual( VisualFactoryCache& factoryCache ) : Visual::Base( factoryCache ), @@ -180,7 +205,7 @@ PrimitiveVisual::~PrimitiveVisual() { } -void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) +void PrimitiveVisual::DoSetProperties( const Property::Map& propertyMap ) { //Find out which shape to renderer. Property::Value* primitiveTypeValue = propertyMap.Find( Toolkit::PrimitiveVisual::Property::SHAPE, PRIMITIVE_SHAPE ); @@ -365,14 +390,7 @@ void PrimitiveVisual::DoInitialize( Actor& actor, const Property::Map& propertyM } } -void PrimitiveVisual::SetSize( const Vector2& size ) -{ - Visual::Base::SetSize( size ); - - // ToDo: renderer responds to the size change -} - -void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize ) const +void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize ) { naturalSize.x = mObjectDimensions.x; naturalSize.y = mObjectDimensions.y; @@ -381,12 +399,14 @@ void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize ) const void PrimitiveVisual::DoSetOnStage( Actor& actor ) { InitializeRenderer(); + + actor.AddRenderer( mImpl->mRenderer ); } void PrimitiveVisual::DoCreatePropertyMap( Property::Map& map ) const { map.Clear(); - map.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::PRIMITIVE ); + map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::PRIMITIVE ); map.Insert( Toolkit::PrimitiveVisual::Property::SHAPE, mPrimitiveType ); map.Insert( Toolkit::PrimitiveVisual::Property::MIX_COLOR, mColor ); map.Insert( Toolkit::PrimitiveVisual::Property::SLICES, mSlices ); @@ -401,6 +421,14 @@ void PrimitiveVisual::DoCreatePropertyMap( Property::Map& map ) const map.Insert( Toolkit::PrimitiveVisual::Property::LIGHT_POSITION, mLightPosition ); } +void PrimitiveVisual::OnSetTransform() +{ + if( mImpl->mRenderer ) + { + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); + } +} + void PrimitiveVisual::InitializeRenderer() { if( !mGeometry ) @@ -415,6 +443,9 @@ void PrimitiveVisual::InitializeRenderer() mImpl->mRenderer = Renderer::New( mGeometry, mShader ); mImpl->mRenderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); + + //Register transform properties + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); } void PrimitiveVisual::UpdateShaderUniforms() @@ -430,7 +461,7 @@ void PrimitiveVisual::UpdateShaderUniforms() mShader.RegisterProperty( STAGE_OFFSET_UNIFORM_NAME, Vector2( width, height ) / 2.0f ); mShader.RegisterProperty( LIGHT_POSITION_UNIFORM_NAME, mLightPosition ); mShader.RegisterProperty( OBJECT_MATRIX_UNIFORM_NAME, scaleMatrix ); - mShader.RegisterProperty( Toolkit::PrimitiveVisual::Property::MIX_COLOR, COLOR_UNIFORM_NAME, mColor ); + DevelHandle::RegisterProperty( mShader, Toolkit::PrimitiveVisual::Property::MIX_COLOR, COLOR_UNIFORM_NAME, mColor ); mShader.RegisterProperty( OBJECT_DIMENSIONS_UNIFORM_NAME, mObjectDimensions ); } @@ -529,7 +560,8 @@ void PrimitiveVisual::CreateConic( Vector& vertices, Vector& vertices, Vector& indices, Vector3 dimensions, float bevelPercentage, float bevelSmoothness ) { - dimensions.Normalize(); + float maxDimension = std::max( std::max( dimensions.x, dimensions.y ), dimensions.z ); + dimensions = dimensions / maxDimension; if( bevelPercentage <= MIN_BEVEL_PERCENTAGE ) //No bevel, form a cube. {