X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage-visual-shader-factory.cpp;h=7f2cac7b82b9e19e10a8c013f6ce5ad6b4da8445;hp=1f3092febf95fb6a1963b5394e18345157c97bdc;hb=HEAD;hpb=68ccbab5d60836876403e44fa3f606ff5014756f diff --git a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp index 1f3092f..f0e413c 100644 --- a/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp +++ b/dali-toolkit/internal/visuals/image-visual-shader-factory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 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. @@ -54,9 +54,17 @@ constexpr std::string_view FragmentPredefines[SHADER_TYPE_COUNT]{ "", // VisualFactoryCache::IMAGE_SHADER, "#define IS_REQUIRED_ROUNDED_CORNER\n", // VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER, "#define IS_REQUIRED_YUV_TO_RGB\n", // VisualFactoryCache::IMAGE_SHADER_YUV_TO_RGB, - "#define IS_REQUIRED_YUV_TO_RGB\n#define IS_REQUIRED_ROUNDED_CORNER\n", // VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_YUV_TO_RGB, + "#define IS_REQUIRED_ROUNDED_CORNER\n#define IS_REQUIRED_YUV_TO_RGB\n", // VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_YUV_TO_RGB, "#define IS_REQUIRED_UNIFIED_YUV_AND_RGB\n", // VisualFactoryCache::IMAGE_SHADER_YUV_AND_RGB, - "#define IS_REQUIRED_UNIFIED_YUV_AND_RGB\n#define IS_REQUIRED_ROUNDED_CORNER\n", // VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_YUV_AND_RGB, + "#define IS_REQUIRED_ROUNDED_CORNER\n#define IS_REQUIRED_UNIFIED_YUV_AND_RGB\n", // VisualFactoryCache::IMAGE_SHADER_ROUNDED_CORNER_YUV_AND_RGB, +}; +constexpr VisualFactoryCache::ShaderType ShaderTypePredefines[SHADER_TYPE_COUNT]{ + VisualFactoryCache::ShaderType::IMAGE_SHADER, + VisualFactoryCache::ShaderType::IMAGE_SHADER_ROUNDED_CORNER, + VisualFactoryCache::ShaderType::IMAGE_SHADER_YUV_TO_RGB, + VisualFactoryCache::ShaderType::IMAGE_SHADER_ROUNDED_CORNER_YUV_TO_RGB, + VisualFactoryCache::ShaderType::IMAGE_SHADER_YUV_AND_RGB, + VisualFactoryCache::ShaderType::IMAGE_SHADER_ROUNDED_CORNER_YUV_AND_RGB, }; } // unnamed namespace @@ -78,6 +86,9 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, Ima (mFragmentShaderNeedChange == ImageVisualShaderFeature::ChangeFragmentShader::UNDECIDED || mFragmentShaderNeedChange == ImageVisualShaderFeature::ChangeFragmentShader::NEED_CHANGE)) { + DALI_ASSERT_DEBUG((static_cast(shaderType) >= static_cast(VisualFactoryCache::IMAGE_SHADER)) && + (static_cast(shaderType) <= static_cast(VisualFactoryCache::IMAGE_SHADER_ATLAS_CUSTOM_WRAP)) && + "Do not support native image shader for given feature!!"); shaderType = static_cast(static_cast(shaderType) + NATIVE_SHADER_TYPE_OFFSET); } @@ -103,7 +114,7 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, Ima if(Dali::Toolkit::Internal::ImageVisualShaderDebug::DebugImageVisualShaderEnabled()) { - Dali::Toolkit::Internal::ImageVisualShaderDebug::ApplyImageVisualShaderDebugScriptCode(fragmentShader); + Dali::Toolkit::Internal::ImageVisualShaderDebug::ApplyImageVisualShaderDebugScriptCode(vertexShader, fragmentShader); } if(featureBuilder.NeedToChangeFragmentShader() == ImageVisualShaderFeature::ChangeFragmentShader::NEED_CHANGE) @@ -130,13 +141,12 @@ Shader ImageVisualShaderFactory::GetShader(VisualFactoryCache& factoryCache, Ima return shader; } - shader = Shader::New(vertexShader, fragmentShader); + shader = factoryCache.GenerateAndSaveShader(shaderType, vertexShader, fragmentShader); shader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT); if(featureBuilder.IsEnabledAlphaMaskingOnRendering()) { shader.RegisterProperty(Y_FLIP_MASK_TEXTURE, NOT_FLIP_MASK_TEXTURE); } - factoryCache.SaveShader(shaderType, shader); return shader; } @@ -168,17 +178,20 @@ void ImageVisualShaderFactory::GetPreCompiledShader(RawShaderData& shaders) { std::vector vertexPrefix; std::vector fragmentPrefix; + std::vector shaderName; shaders.shaderCount = 0; int shaderCount = 0; for(uint32_t i = 0; i < SHADER_TYPE_COUNT; ++i) { vertexPrefix.push_back(VertexPredefines[i]); fragmentPrefix.push_back(FragmentPredefines[i]); + shaderName.push_back(Scripting::GetLinearEnumerationName(ShaderTypePredefines[i], VISUAL_SHADER_TYPE_TABLE, VISUAL_SHADER_TYPE_TABLE_COUNT)); shaderCount++; } shaders.vertexPrefix = vertexPrefix; shaders.fragmentPrefix = fragmentPrefix; + shaders.shaderName = shaderName; shaders.vertexShader = SHADER_IMAGE_VISUAL_SHADER_VERT; shaders.fragmentShader = SHADER_IMAGE_VISUAL_SHADER_FRAG; shaders.shaderCount = shaderCount;