[Vulkan] Added 'builtin' shaders
authoradam.b <adam.b@samsung.com>
Thu, 3 May 2018 17:29:04 +0000 (18:29 +0100)
committeradam.b <jsr184@gmail.com>
Fri, 25 May 2018 16:40:35 +0000 (17:40 +0100)
Added shaders:

- image-visual and text-visual sort of work
- text-visual can display text containing emojis (RGBA textures)

Change-Id: I189dc617175939f02827322f056693e7b28a1a40

dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h [new file with mode: 0644]
dali-toolkit/internal/visuals/image/image-visual.cpp
dali-toolkit/internal/visuals/text/text-visual.cpp

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 (file)
index 0000000..6d1fd2c
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
+#define GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
+#include <cstdint>
+#include <vector>
+#include <string>
+
+extern std::vector<uint32_t> SHADER_BASIC_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_BASIC_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_BORDER_VISUAL_ANTI_ALIASING_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_BORDER_VISUAL_ANTI_ALIASING_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_BORDER_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_BORDER_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_COLOR_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_COLOR_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_EXPERIMENTAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_IMAGE_VISUAL_ATLAS_CLAMP_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_IMAGE_VISUAL_ATLAS_VARIOUS_WRAP_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_IMAGE_VISUAL_NO_ATLAS_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_IMAGE_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_IMAGE_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_NORMAL_MAP_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_NORMAL_MAP_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_SIMPLE_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_MESH_VISUAL_SIMPLE_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_NPATCH_VISUAL_3X3_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_NPATCH_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_NPATCH_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_MULTI_COLOR_TEXT_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_MULTI_COLOR_TEXT_WITH_STYLE_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_SHADER_VERT;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_EMOJI_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_STYLE_AND_EMOJI_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_TEXT_VISUAL_SINGLE_COLOR_TEXT_WITH_STYLE_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_WIREFRAME_VISUAL_SHADER_FRAG;
+extern std::vector<uint32_t> SHADER_WIREFRAME_VISUAL_SHADER_VERT;
+
+extern "C"
+{
+std::vector<uint32_t> GraphicsGetBuiltinShader( const std::string& tag );
+}
+
+#endif // GRAPHICS_BUILTIN_SHADER_EXTERN_GEN_H
index 7ef4669..f2180b1 100644 (file)
@@ -28,6 +28,7 @@
 #include <dali/devel-api/adaptor-framework/image-loading.h>
 #include <dali/devel-api/scripting/enum-helper.h>
 #include <dali/devel-api/scripting/scripting.h>
+#include <dali/devel-api/rendering/shader-devel.h>
 #include <dali/integration-api/debug.h>
 
 // INTERNAL HEADERS
@@ -42,6 +43,8 @@
 #include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
 #include <dali-toolkit/internal/visuals/visual-url.h>
 
+#include <dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h>
+
 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<uint32_t>(
+        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<uint32_t>(
+        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 );
     }
index f5817ea..32825a8 100755 (executable)
 // CLASS HEADER
 #include <dali-toolkit/internal/visuals/text/text-visual.h>
 
+// @todo: using generated file in the dali-core!!!!
+#include <dali-toolkit/devel-api/graphics/builtin-shader-extern-gen.h>
+#include <dali/devel-api/rendering/shader-devel.h>
+
 // EXTERNAL INCLUDES
 #include <dali/public-api/animation/constraints.h>
 #include <dali/devel-api/text-abstraction/text-abstraction-definitions.h>
@@ -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 );
     }