X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fgradient%2Fgradient-visual.cpp;h=826797311bd2072f04b49bf50980245133c78ef1;hb=82442f05b91524bdc363c0768407b811b9a794fa;hp=896b095777a8e72a13a5ec653c4b591b0be9f71c;hpb=bec29ac2161270780a4bbde4b825051c845407b6;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp index 896b095..8267973 100644 --- a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp +++ b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -25,6 +25,7 @@ #include #include #include +#include #include // INTERNAL INCLUDES @@ -46,6 +47,8 @@ namespace Internal { namespace { +static constexpr int32_t CUSTOM_PROPERTY_COUNT(1); // alignment + DALI_ENUM_TO_STRING_TABLE_BEGIN(UNITS) DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::GradientVisual::Units, OBJECT_BOUNDING_BOX) DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::GradientVisual::Units, USER_SPACE) @@ -58,30 +61,31 @@ DALI_ENUM_TO_STRING_TABLE_BEGIN(SPREAD_METHOD) DALI_ENUM_TO_STRING_TABLE_END(SPREAD_METHOD) // uniform names -const char* const UNIFORM_ALIGNMENT_MATRIX_NAME("uAlignmentMatrix"); +static constexpr std::string_view UNIFORM_ALIGNMENT_MATRIX_NAME("uAlignmentMatrix"); +static constexpr std::string_view UNIFORM_TEXTURE_COORDINATE_SCALE_FACTOR_NAME("uTextureCoordinateScaleFactor"); // default offset value -const unsigned int DEFAULT_OFFSET_MINIMUM = 0.0f; -const unsigned int DEFAULT_OFFSET_MAXIMUM = 1.0f; +static constexpr float DEFAULT_OFFSET_MINIMUM = 0.0f; +static constexpr float DEFAULT_OFFSET_MAXIMUM = 1.0f; VisualFactoryCache::ShaderType SHADER_TYPE_TABLE[16] = -{ - VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_ROUNDED_CORNER, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_ROUNDED_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_ROUNDED_CORNER, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_ROUNDED_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_ROUNDED_CORNER, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_ROUNDED_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_ROUNDED_CORNER, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_BORDERLINE, - VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_ROUNDED_BORDERLINE, + { + VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_ROUNDED_CORNER, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_BOUNDING_BOX_ROUNDED_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_ROUNDED_CORNER, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_LINEAR_USER_SPACE_ROUNDED_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_ROUNDED_CORNER, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_BOUNDING_BOX_ROUNDED_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_ROUNDED_CORNER, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_BORDERLINE, + VisualFactoryCache::GRADIENT_SHADER_RADIAL_USER_SPACE_ROUNDED_BORDERLINE, }; // enum of required list when we select shader @@ -167,7 +171,7 @@ void GradientVisual::OnSetTransform() { if(mImpl->mRenderer) { - mImpl->mTransform.RegisterUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); + mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); } } @@ -183,7 +187,7 @@ void GradientVisual::UpdateShader() { if(mImpl->mRenderer) { - Shader shader = GetShader(); + Shader shader = GenerateShader(); mImpl->mRenderer.SetShader(shader); } } @@ -236,12 +240,21 @@ void GradientVisual::DoCreateInstancePropertyMap(Property::Map& map) const // Do nothing } +void GradientVisual::EnablePreMultipliedAlpha(bool preMultiplied) +{ + // Make always enable pre multiplied alpha whether preMultiplied value is false. + if(!preMultiplied) + { + DALI_LOG_WARNING("Note : GradientVisual cannot disable PreMultipliedAlpha\n"); + } +} + void GradientVisual::OnInitialize() { Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); - Shader shader = GetShader(); + Shader shader = GenerateShader(); - //Set up the texture set + // Set up the texture set TextureSet textureSet = TextureSet::New(); Dali::Texture lookupTexture = mGradient->GenerateLookupTexture(); textureSet.SetTexture(0u, lookupTexture); @@ -250,7 +263,8 @@ void GradientVisual::OnInitialize() sampler.SetWrapMode(wrap, wrap); textureSet.SetSampler(0u, sampler); - mImpl->mRenderer = Renderer::New(geometry, shader); + mImpl->mRenderer = DecoratedVisualRenderer::New(geometry, shader); + mImpl->mRenderer.ReserveCustomProperties(CUSTOM_PROPERTY_COUNT); mImpl->mRenderer.SetTextures(textureSet); // If opaque and then no need to have blending @@ -259,10 +273,13 @@ void GradientVisual::OnInitialize() mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::OFF); } - mImpl->mRenderer.RegisterProperty(UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform); + mImpl->mRenderer.RegisterUniqueProperty(UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform); + + float textureSize = static_cast(lookupTexture.GetWidth()); + mImpl->mRenderer.RegisterUniqueProperty(UNIFORM_TEXTURE_COORDINATE_SCALE_FACTOR_NAME, (textureSize - 1.0f) / textureSize); - //Register transform properties - mImpl->mTransform.RegisterUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); + // Register transform properties + mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); } bool GradientVisual::NewGradient(Type gradientType, const Property::Map& propertyMap) @@ -345,14 +362,14 @@ bool GradientVisual::NewGradient(Type gradientType, const Property::Map& propert return true; } -Shader GradientVisual::GetShader() +Shader GradientVisual::GenerateShader() const { bool userspaceUnit = (mGradient->GetGradientUnits() == Toolkit::GradientVisual::Units::USER_SPACE); bool roundedCorner = IsRoundedCornerRequired(); bool borderline = IsBorderlineRequired(); bool radialGradient = (mGradientType == Type::RADIAL); - int shaderTypeFlag = GradientVisualRequireFlag::DEFAULT; + int shaderTypeFlag = GradientVisualRequireFlag::DEFAULT; if(roundedCorner) { shaderTypeFlag |= GradientVisualRequireFlag::ROUNDED_CORNER; @@ -379,24 +396,24 @@ Shader GradientVisual::GetShader() if(roundedCorner) { - vertexShaderPrefixList += "#define IS_REQUIRED_ROUNDED_CORNER 1\n"; - fragmentShaderPrefixList += "#define IS_REQUIRED_ROUNDED_CORNER 1\n"; + vertexShaderPrefixList += "#define IS_REQUIRED_ROUNDED_CORNER\n"; + fragmentShaderPrefixList += "#define IS_REQUIRED_ROUNDED_CORNER\n"; } if(borderline) { - vertexShaderPrefixList += "#define IS_REQUIRED_BORDERLINE 1\n"; - fragmentShaderPrefixList += "#define IS_REQUIRED_BORDERLINE 1\n"; + vertexShaderPrefixList += "#define IS_REQUIRED_BORDERLINE\n"; + fragmentShaderPrefixList += "#define IS_REQUIRED_BORDERLINE\n"; } if(radialGradient) { - fragmentShaderPrefixList += "#define RADIAL 1\n"; + fragmentShaderPrefixList += "#define RADIAL\n"; } if(userspaceUnit) { - vertexShaderPrefixList += "#define USER_SPACE 1\n"; + vertexShaderPrefixList += "#define USER_SPACE\n"; } - shader = Shader::New(Dali::Shader::GetVertexShaderPrefix() + vertexShaderPrefixList + SHADER_GRADIENT_VISUAL_SHADER_VERT.data(), + shader = Shader::New(Dali::Shader::GetVertexShaderPrefix() + vertexShaderPrefixList + SHADER_GRADIENT_VISUAL_SHADER_VERT.data(), Dali::Shader::GetFragmentShaderPrefix() + fragmentShaderPrefixList + SHADER_GRADIENT_VISUAL_SHADER_FRAG.data()); mFactoryCache.SaveShader(shaderType, shader); }