From be5582d3d6285ae7b57cdac9f990439336eadf05 Mon Sep 17 00:00:00 2001 From: "adam.b" Date: Thu, 3 May 2018 18:29:04 +0100 Subject: [PATCH] [Vulkan] Added 'builtin' shaders Added shaders: - image-visual and text-visual sort of work - text-visual can display text containing emojis (RGBA textures) Change-Id: I189dc617175939f02827322f056693e7b28a1a40 --- .../devel-api/graphics/builtin-shader-extern-gen.h | 45 ++++++++++++++++++++++ .../internal/visuals/image/image-visual.cpp | 20 ++++++++-- dali-toolkit/internal/visuals/text/text-visual.cpp | 31 ++++++++++++--- 3 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h diff --git a/dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h b/dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h new file mode 100644 index 0000000..6d1fd2c --- /dev/null +++ b/dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h @@ -0,0 +1,45 @@ +#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H +#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H +#include +#include +#include + +extern std::vector SHADER_BASIC_SHADER_FRAG; +extern std::vector SHADER_BASIC_SHADER_VERT; +extern std::vector SHADER_BORDER_VISUAL_ANTI_ALIASING_SHADER_FRAG; +extern std::vector SHADER_BORDER_VISUAL_ANTI_ALIASING_SHADER_VERT; +extern std::vector SHADER_BORDER_VISUAL_SHADER_FRAG; +extern std::vector SHADER_BORDER_VISUAL_SHADER_VERT; +extern std::vector SHADER_COLOR_VISUAL_SHADER_FRAG; +extern std::vector SHADER_COLOR_VISUAL_SHADER_VERT; +extern std::vector SHADER_EXPERIMENTAL_SHADER_VERT; +extern std::vector SHADER_IMAGE_VISUAL_ATLAS_CLAMP_SHADER_FRAG; +extern std::vector SHADER_IMAGE_VISUAL_ATLAS_VARIOUS_WRAP_SHADER_FRAG; +extern std::vector SHADER_IMAGE_VISUAL_NO_ATLAS_SHADER_FRAG; +extern std::vector SHADER_IMAGE_VISUAL_SHADER_FRAG; +extern std::vector SHADER_IMAGE_VISUAL_SHADER_VERT; +extern std::vector SHADER_MESH_VISUAL_NORMAL_MAP_SHADER_FRAG; +extern std::vector SHADER_MESH_VISUAL_NORMAL_MAP_SHADER_VERT; +extern std::vector SHADER_MESH_VISUAL_SHADER_FRAG; +extern std::vector SHADER_MESH_VISUAL_SHADER_VERT; +extern std::vector SHADER_MESH_VISUAL_SIMPLE_SHADER_FRAG; +extern std::vector SHADER_MESH_VISUAL_SIMPLE_SHADER_VERT; +extern std::vector SHADER_NPATCH_VISUAL_3X3_SHADER_VERT; +extern std::vector SHADER_NPATCH_VISUAL_SHADER_FRAG; +extern std::vector SHADER_NPATCH_VISUAL_SHADER_VERT; +extern std::vector SHADER_TEXT_VISUAL_MULTI_COLOR_TEXT_SHADER_FRAG; +extern std::vector SHADER_TEXT_VISUAL_MULTI_COLOR_TEXT_WITH_STYLE_SHADER_FRAG; +extern std::vector SHADER_TEXT_VISUAL_SHADER_VERT; +extern std::vector SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_SHADER_FRAG; +extern std::vector SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_EMOJI_SHADER_FRAG; +extern std::vector SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI_SHADER_FRAG; +extern std::vector SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_STYLE_SHADER_FRAG; +extern std::vector SHADER_WIREFRAME_VISUAL_SHADER_FRAG; +extern std::vector SHADER_WIREFRAME_VISUAL_SHADER_VERT; + +extern "C" +{ +std::vector GraphicsGetBuiltinShader( const std::string& tag ); +} + +#endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 7ef4669..f2180b1 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include // INTERNAL HEADERS @@ -42,6 +43,8 @@ #include #include +#include + namespace Dali { @@ -668,9 +671,13 @@ void ImageVisual::CreateRenderer( TextureSet& textureSet ) } else { - shader = Shader::New( mImpl->mCustomShader->mVertexShader.empty() ? VERTEX_SHADER : mImpl->mCustomShader->mVertexShader, - mImpl->mCustomShader->mFragmentShader.empty() ? FRAGMENT_SHADER_NO_ATLAS : mImpl->mCustomShader->mFragmentShader, - mImpl->mCustomShader->mHints ); + //shader = Shader::New( mImpl->mCustomShader->mVertexShader.empty() ? VERTEX_SHADER : mImpl->mCustomShader->mVertexShader, + // mImpl->mCustomShader->mFragmentShader.empty() ? FRAGMENT_SHADER_NO_ATLAS : mImpl->mCustomShader->mFragmentShader, + // mImpl->mCustomShader->mHints ); + shader = DevelShader::New( + GraphicsGetBuiltinShader( "SHADER_IMAGE_VISUAL_SHADER_VERT"), + GraphicsGetBuiltinShader( "SHADER_IMAGE_VISUAL_NO_ATLAS_SHADER_FRAG" ), + DevelShader::ShaderLanguage::SPIRV_1_0, Property::Map() ); if( mImpl->mCustomShader->mVertexShader.empty() ) { shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); @@ -1000,7 +1007,12 @@ Shader ImageVisual::GetImageShader( VisualFactoryCache& factoryCache, bool atlas shader = factoryCache.GetShader( VisualFactoryCache::IMAGE_SHADER ); if( !shader ) { - shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_NO_ATLAS ); + shader = DevelShader::New( + GraphicsGetBuiltinShader( "SHADER_IMAGE_VISUAL_SHADER_VERT" ), + GraphicsGetBuiltinShader( "SHADER_IMAGE_VISUAL_NO_ATLAS_SHADER_FRAG" ), + DevelShader::ShaderLanguage::SPIRV_1_0, Property::Map() ); + + //shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_NO_ATLAS ); shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); factoryCache.SaveShader( VisualFactoryCache::IMAGE_SHADER, shader ); } diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index f5817ea..32825a8 100755 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -18,6 +18,10 @@ // CLASS HEADER #include +// @todo: using generated file in the dali-core!!!! +#include +#include + // EXTERNAL INCLUDES #include #include @@ -97,7 +101,7 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( gl_Position = vertexPosition;\n }\n ); - +#if 0 const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n @@ -122,7 +126,7 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT = DALI_COMPOSE_SHADER( gl_FragColor = uTextColorAnimatable * textTexture * uColor * visualMixColor(); }\n ); - +#endif const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n @@ -200,7 +204,7 @@ const char* FRAGMENT_SHADER_MULTI_COLOR_TEXT_WITH_STYLE = DALI_COMPOSE_SHADER( gl_FragColor = ( textTexture + styleTexture * ( 1.0 - textTexture.a ) ) * uColor * visualMixColor();\n }\n ); - +/* const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n @@ -233,7 +237,7 @@ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI = DALI_COMPOSE_SHADER( gl_FragColor = textTexture * uColor * visualMixColor();\n }\n ); - +*/ const char* FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI = DALI_COMPOSE_SHADER( varying mediump vec2 vTexCoord;\n uniform sampler2D sTexture;\n @@ -828,7 +832,14 @@ Shader TextVisual::GetTextShader( VisualFactoryCache& factoryCache, bool hasMult shader = factoryCache.GetShader( VisualFactoryCache::TEXT_SHADER_SINGLE_COLOR_TEXT ); if( !shader ) { - shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_SINGLE_COLOR_TEXT ); + //shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_SINGLE_COLOR_TEXT ); + shader = DevelShader::New( + GraphicsGetBuiltinShader( "SHADER_TEXT_VISUAL_SHADER_VERT" ), + GraphicsGetBuiltinShader( "SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_SHADER_FRAG" ), + DevelShader::ShaderLanguage::SPIRV_1_0, + Property::Map() + ); + shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); factoryCache.SaveShader( VisualFactoryCache::TEXT_SHADER_SINGLE_COLOR_TEXT, shader ); } @@ -848,7 +859,15 @@ Shader TextVisual::GetTextShader( VisualFactoryCache& factoryCache, bool hasMult shader = factoryCache.GetShader( VisualFactoryCache::TEXT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI ); if( !shader ) { - shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI ); + //shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI ); + + + shader = DevelShader::New( + GraphicsGetBuiltinShader( "SHADER_TEXT_VISUAL_SHADER_VERT" ), + GraphicsGetBuiltinShader( "SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_EMOJI_SHADER_FRAG" ), + DevelShader::ShaderLanguage::SPIRV_1_0, + Property::Map() + ); shader.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT ); factoryCache.SaveShader( VisualFactoryCache::TEXT_SHADER_SINGLE_COLOR_TEXT_WITH_EMOJI, shader ); } -- 2.7.4