X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage-visual-shader-factory.cpp;h=728c21959826986204e78d8632aa65f4f7b11ee0;hb=1f5f10ff81ed70d033cbc236216dda5ea5a1b8e4;hp=ceb5848d7594c27b86f706b191e846b06d9989f1;hpb=45ad62cd772319bc585a48c868b31892881374bb;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp index ceb5848..728c219 100644 --- a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp +++ b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp @@ -46,13 +46,14 @@ const int NATIVE_SHADER_TYPE_OFFSET = VisualFactoryCache::ShaderType::NATIVE_IMA // enum of required list when we select shader enum class ImageVisualRequireFlag : uint32_t { - DEFAULT = 0, - ROUNDED_CORNER = 1 << 0, - BORDERLINE = 1 << 1, - ALPHA_MASKING = 1 << 2, + DEFAULT = 0, + ROUNDED_CORNER = 1 << 0, + BORDERLINE = 1 << 1, + ALPHA_MASKING = 1 << 2, + COLOR_CONVERSION = 1 << 3, }; -static constexpr auto SHADER_TYPE_COUNT = 8u; +static constexpr auto SHADER_TYPE_COUNT = 12u; VisualFactoryCache::ShaderType SHADER_TYPE_TABLE[SHADER_TYPE_COUNT] = { VisualFactoryCache::IMAGE_SHADER, @@ -62,8 +63,11 @@ VisualFactoryCache::ShaderType SHADER_TYPE_TABLE[SHADER_TYPE_COUNT] = VisualFactoryCache::IMAGE_SHADER_MASKING, VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_MASKING, VisualFactoryCache::IMAGE_SHADER_BORDERLINE_MASKING, - VisualFactoryCache::IMAGE_SHADER_ROUNDED_BORDERLINE_MASKING}; - + VisualFactoryCache::IMAGE_SHADER_ROUNDED_BORDERLINE_MASKING, + VisualFactoryCache::IMAGE_SHADER_YUV_TO_RGB, + VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_YUV_TO_RGB, + VisualFactoryCache::IMAGE_SHADER_BORDERLINE_YUV_TO_RGB, + VisualFactoryCache::IMAGE_SHADER_ROUNDED_BORDERLINE_YUV_TO_RGB}; } // unnamed namespace namespace ImageVisualShaderFeature @@ -73,31 +77,42 @@ FeatureBuilder& FeatureBuilder::EnableTextureAtlas(bool enableAtlas) mTextureAtlas = (enableAtlas ? TextureAtlas::ENABLED : TextureAtlas::DISABLED); return *this; } + FeatureBuilder& FeatureBuilder::ApplyDefaultTextureWrapMode(bool applyDefaultTextureWrapMode) { mDefaultTextureWrapMode = (applyDefaultTextureWrapMode ? DefaultTextureWrapMode::APPLY : DefaultTextureWrapMode::DO_NOT_APPLY); return *this; } + FeatureBuilder& FeatureBuilder::EnableRoundedCorner(bool enableRoundedCorner) { mRoundedCorner = (enableRoundedCorner ? RoundedCorner::ENABLED : RoundedCorner::DISABLED); return *this; } + FeatureBuilder& FeatureBuilder::EnableBorderline(bool enableBorderline) { mBorderline = (enableBorderline ? Borderline::ENABLED : Borderline::DISABLED); return *this; } + FeatureBuilder& FeatureBuilder::SetTextureForFragmentShaderCheck(const Dali::Texture& texture) { mTexture = texture; return *this; } + FeatureBuilder& FeatureBuilder::EnableAlphaMaskingOnRendering(bool enableAlphaMaskingOnRendering) { mAlphaMaskingOnRendering = (enableAlphaMaskingOnRendering ? AlphaMaskingOnRendering::ENABLED : AlphaMaskingOnRendering::DISABLED); return *this; } + +FeatureBuilder& FeatureBuilder::EnableYuvToRgb(bool enableYuvToRgb) +{ + mColorConversion = (enableYuvToRgb ? ColorConversion::YUV_TO_RGB : ColorConversion::DONT_NEED); + return *this; +} } // namespace ImageVisualShaderFeature ImageVisualShaderFactory::ImageVisualShaderFactory() @@ -119,9 +134,10 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, con const auto& roundedCorner = featureBuilder.mRoundedCorner; const auto& borderline = featureBuilder.mBorderline; const auto& alphaMaskingOnRendering = featureBuilder.mAlphaMaskingOnRendering; + const auto& colorConversion = featureBuilder.mColorConversion; const auto& changeFragmentShader = (featureBuilder.mTexture && DevelTexture::IsNative(featureBuilder.mTexture)) - ? ImageVisualShaderFeature::ChangeFragmentShader::NEED_CHANGE - : ImageVisualShaderFeature::ChangeFragmentShader::DONT_CHANGE; + ? ImageVisualShaderFeature::ChangeFragmentShader::NEED_CHANGE + : ImageVisualShaderFeature::ChangeFragmentShader::DONT_CHANGE; if(atlasing == ImageVisualShaderFeature::TextureAtlas::ENABLED) { @@ -149,6 +165,10 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, con { shaderTypeFlag |= static_cast(ImageVisualRequireFlag::ALPHA_MASKING); } + else if(colorConversion == ImageVisualShaderFeature::ColorConversion::YUV_TO_RGB) // Not support gpu masking and color conversion at the same time now + { + shaderTypeFlag |= static_cast(ImageVisualRequireFlag::COLOR_CONVERSION); + } shaderType = SHADER_TYPE_TABLE[shaderTypeFlag]; } @@ -192,6 +212,10 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, con vertexShaderPrefixList += "#define IS_REQUIRED_ALPHA_MASKING\n"; fragmentShaderPrefixList += "#define IS_REQUIRED_ALPHA_MASKING\n"; } + else if(colorConversion == ImageVisualShaderFeature::ColorConversion::YUV_TO_RGB) + { + fragmentShaderPrefixList += "#define IS_REQUIRED_YUV_TO_RGB\n"; + } } std::string vertexShader = std::string(Dali::Shader::GetVertexShaderPrefix() + vertexShaderPrefixList + SHADER_IMAGE_VISUAL_SHADER_VERT.data());