X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Ftext%2Ftext-visual.cpp;h=2e7fa6dee9ee64385bb9832c59d92c6677ce28e0;hb=caf7677175a0e8b9c690d4f2ab73adc295f22c0e;hp=e7b40a88fb263eb57de0411e4da4f55c7a92519a;hpb=dcee19c07c4f38251b88ca0ad849c9a666cf20eb;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index e7b40a8..2e7fa6d 100644 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -94,9 +94,13 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( uniform mediump mat4 uMvpMatrix;\n uniform mediump vec3 uSize;\n uniform mediump vec4 pixelArea; + + uniform mediump mat4 uModelMatrix;\n + uniform mediump mat4 uViewMatrix;\n + uniform mediump mat4 uProjection;\n + varying mediump vec2 vTexCoord;\n \n - //Visual size and offset uniform mediump vec2 offset;\n uniform mediump vec2 size;\n @@ -113,7 +117,10 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( void main()\n {\n - mediump vec4 vertexPosition = uMvpMatrix *ComputeVertexPosition();\n + mediump vec4 nonAlignedVertex = uViewMatrix*uModelMatrix*ComputeVertexPosition();\n + mediump vec4 pixelAlignedVertex = vec4 ( floor(nonAlignedVertex.xyz), 1.0 );\n + mediump vec4 vertexPosition = uProjection*pixelAlignedVertex;\n + vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5) );\n gl_Position = vertexPosition;\n }\n @@ -134,12 +141,14 @@ const char* FRAGMENT_SHADER_ATLAS_CLAMP = DALI_COMPOSE_SHADER( } // unnamed namespace -TextVisualPtr TextVisual::New( VisualFactoryCache& factoryCache ) +TextVisualPtr TextVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties ) { - return new TextVisual( factoryCache ); + TextVisualPtr TextVisualPtr( new TextVisual( factoryCache ) ); + TextVisualPtr->SetProperties( properties ); + return TextVisualPtr; } -float TextVisual::GetHeightForWidth( float width ) const +float TextVisual::GetHeightForWidth( float width ) { return mController->GetHeightForWidth( width ); } @@ -266,12 +275,9 @@ void TextVisual::DoSetOnStage( Actor& actor ) mFactoryCache.SaveGeometry( VisualFactoryCache::QUAD_GEOMETRY , geometry ); } - Shader shader = mFactoryCache.GetShader( VisualFactoryCache::IMAGE_SHADER_ATLAS_DEFAULT_WRAP ); - if( !shader ) - { - shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_ATLAS_CLAMP ); - mFactoryCache.SaveShader( VisualFactoryCache::IMAGE_SHADER_ATLAS_DEFAULT_WRAP, shader ); - } + Shader shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_ATLAS_CLAMP ); + mFactoryCache.SaveShader( VisualFactoryCache::IMAGE_SHADER_ATLAS_DEFAULT_WRAP, shader ); + shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); mImpl->mRenderer = Renderer::New( geometry, shader ); @@ -430,29 +436,23 @@ void TextVisual::UpdateRenderer() PixelData data = mTypesetter->Render( relayoutSize ); Vector4 atlasRect = FULL_TEXTURE_RECT; - TextureSet textureSet = mFactoryCache.GetAtlasManager()->Add( atlasRect, data ); - if( textureSet ) - { - mImpl->mFlags |= Impl::IS_ATLASING_APPLIED; - } - else - { - // It may happen the image atlas can't handle a pixel data it exceeds the maximum size. - // In that case, create a texture. TODO: should tile the text. + // Texture set not retrieved from Atlas Manager whilst pixel offset visible. - Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, - data.GetPixelFormat(), - data.GetWidth(), - data.GetHeight() ); + // It may happen the image atlas can't handle a pixel data it exceeds the maximum size. + // In that case, create a texture. TODO: should tile the text. - texture.Upload( data ); + Texture texture = Texture::New( Dali::TextureType::TEXTURE_2D, + data.GetPixelFormat(), + data.GetWidth(), + data.GetHeight() ); - textureSet = TextureSet::New(); - textureSet.SetTexture( 0u, texture ); + texture.Upload( data ); - mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED; - } + TextureSet textureSet = TextureSet::New(); + textureSet.SetTexture( 0u, texture ); + + mImpl->mFlags &= ~Impl::IS_ATLASING_APPLIED; mImpl->mRenderer.RegisterProperty( ATLAS_RECT_UNIFORM_NAME, atlasRect );