X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fmesh%2Fmesh-visual.cpp;h=f0ba67bd3c38b498b81ee39e70827b02f9311d05;hb=refs%2Fchanges%2F32%2F98732%2F1;hp=28ff3d1761812903b5c36447458a4887d7eee3a5;hpb=29d3264d67c7dac9c3e7059140fa7eef3592a823;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp index 28ff3d1..f0ba67b 100644 --- a/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp +++ b/dali-toolkit/internal/visuals/mesh/mesh-visual.cpp @@ -28,7 +28,9 @@ #include //INTERNAL INCLUDES +#include #include +#include namespace Dali { @@ -119,9 +121,26 @@ const char* SIMPLE_VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec3 lightPosition;\n uniform mediump vec2 uStageOffset;\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 + float scaleFactor = min( visualSize.x, visualSize.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 + void main()\n {\n - vec4 normalisedVertexPosition = vec4( aPosition * min( uSize.x, uSize.y ), 1.0 );\n + vec4 normalisedVertexPosition = ComputeVertexPosition();\n vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;\n vertexPosition = uMvpMatrix * vertexPosition;\n @@ -169,9 +188,26 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump vec3 lightPosition;\n uniform mediump vec2 uStageOffset;\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 + float scaleFactor = min( visualSize.x, visualSize.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 + void main() {\n - vec4 normalisedVertexPosition = vec4( aPosition * min( uSize.x, uSize.y ), 1.0 );\n + vec4 normalisedVertexPosition = ComputeVertexPosition();\n vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;\n vertexPosition = uMvpMatrix * vertexPosition;\n @@ -232,9 +268,27 @@ const char* NORMAL_MAP_VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump mat4 uObjectMatrix;\n uniform mediump vec3 lightPosition;\n uniform mediump vec2 uStageOffset;\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 + float scaleFactor = min( visualSize.x, visualSize.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 + void main() {\n - vec4 normalisedVertexPosition = vec4( aPosition * min( uSize.x, uSize.y ), 1.0 );\n + vec4 normalisedVertexPosition = ComputeVertexPosition();\n vec4 vertexPosition = uObjectMatrix * normalisedVertexPosition;\n vertexPosition = uMvpMatrix * vertexPosition;\n @@ -308,7 +362,7 @@ MeshVisual::~MeshVisual() { } -void MeshVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) +void MeshVisual::DoSetProperties( const Property::Map& propertyMap ) { Property::Value* objectUrl = propertyMap.Find( Toolkit::MeshVisual::Property::OBJECT_URL, OBJECT_URL_NAME ); if( !objectUrl || !objectUrl->Get( mObjectUrl ) ) @@ -367,11 +421,12 @@ void MeshVisual::DoInitialize( Actor& actor, const Property::Map& propertyMap ) } } -void MeshVisual::SetSize( const Vector2& size ) +void MeshVisual::OnSetTransform() { - Visual::Base::SetSize( size ); - - // ToDo: renderer responds to the size change + if( mImpl->mRenderer ) + { + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); + } } void MeshVisual::DoSetOnStage( Actor& actor ) @@ -384,7 +439,7 @@ void MeshVisual::DoSetOnStage( Actor& actor ) void MeshVisual::DoCreatePropertyMap( Property::Map& map ) const { map.Clear(); - map.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::MESH ); + map.Insert( Toolkit::VisualProperty::TYPE, Toolkit::Visual::MESH ); map.Insert( Toolkit::MeshVisual::Property::OBJECT_URL, mObjectUrl ); map.Insert( Toolkit::MeshVisual::Property::MATERIAL_URL, mMaterialUrl ); map.Insert( Toolkit::MeshVisual::Property::TEXTURES_PATH, mTexturesPath ); @@ -444,6 +499,9 @@ void MeshVisual::InitializeRenderer() mImpl->mRenderer.SetTextures( mTextureSet ); mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::ON ); mImpl->mRenderer.SetProperty( Renderer::Property::DEPTH_TEST_MODE, DepthTestMode::ON ); + + //Register transform properties + mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); } void MeshVisual::SupplyEmptyGeometry()