Convert more shaders in dali-toolkit and dali-scene-loader to use shader compilation...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / color / color-visual.cpp
index 68dc04a..492f203 100644 (file)
@@ -31,6 +31,7 @@
 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
 #include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
+#include <dali-toolkit/internal/graphics/builtin-shader-extern-gen.h>
 
 namespace Dali
 {
@@ -41,145 +42,6 @@ namespace Toolkit
 namespace Internal
 {
 
-namespace
-{
-
-const char* VERTEX_SHADER =
-  "INPUT mediump vec2 aPosition;\n"
-
-  "uniform highp mat4 uMvpMatrix;\n"
-  "uniform highp vec3 uSize;\n"
-
-  "//Visual size and offset\n"
-  "uniform mediump vec2 offset;\n"
-  "uniform highp vec2 size;\n"
-  "uniform mediump vec4 offsetSizeMode;\n"
-  "uniform mediump vec2 origin;\n"
-  "uniform mediump vec2 anchorPoint;\n"
-  "uniform mediump vec2 extraSize;\n"
-
-  "vec4 ComputeVertexPosition()\n"
-  "{\n"
-  "  vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n"
-  "  vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n"
-  "  return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n"
-  "}\n"
-
-  "void main()\n"
-  "{\n"
-  "  gl_Position = uMvpMatrix * ComputeVertexPosition();\n"
-  "}\n";
-
-
-const char* FRAGMENT_SHADER =
-  "uniform lowp vec4 uColor;\n"
-  "uniform lowp vec3 mixColor;\n"
-
-  "void main()\n"
-  "{\n"
-  "  OUT_COLOR = vec4(mixColor, 1.0) * uColor;\n"
-  "}\n";
-
-const char* VERTEX_SHADER_ROUNDED_CORNER =
-  "INPUT mediump vec2 aPosition;\n"
-  "OUTPUT mediump vec2 vPosition;\n"
-  "OUTPUT mediump vec2 vRectSize;\n"
-  "OUTPUT mediump float vCornerRadius;\n"
-
-  "uniform highp mat4 uMvpMatrix;\n"
-  "uniform highp vec3 uSize;\n"
-
-  "//Visual size and offset\n"
-  "uniform mediump vec2 offset;\n"
-  "uniform highp vec2 size;\n"
-  "uniform mediump vec2 extraSize;\n"
-  "uniform mediump vec4 offsetSizeMode;\n"
-  "uniform mediump vec2 origin;\n"
-  "uniform mediump vec2 anchorPoint;\n"
-  "uniform mediump float cornerRadius;\n"
-  "uniform mediump float cornerRadiusPolicy;\n"
-
-  "vec4 ComputeVertexPosition()\n"
-  "{\n"
-  "  vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize;\n"
-  "  vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n"
-  "  mediump float minSize = min( visualSize.x, visualSize.y );\n"
-  "  vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy);\n"
-  "  vCornerRadius = min( vCornerRadius, minSize * 0.5 );\n"
-  "  vRectSize = visualSize / 2.0 - vCornerRadius;\n"
-  "  vPosition = aPosition* visualSize;\n"
-  "  return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n"
-  "}\n"
-
-  "void main()\n"
-  "{\n"
-  "  gl_Position = uMvpMatrix * ComputeVertexPosition();\n"
-  "}\n";
-
-//float distance = length( max( abs( position - center ), size ) - size ) - radius;
-const char* FRAGMENT_SHADER_ROUNDED_CORNER =
-  "INPUT mediump vec2 vPosition;\n"
-  "INPUT mediump vec2 vRectSize;\n"
-  "INPUT mediump float vCornerRadius;\n"
-
-  "uniform lowp vec4 uColor;\n"
-  "uniform lowp vec3 mixColor;\n"
-
-  "void main()\n"
-  "{\n"
-  "  mediump float dist = length( max( abs( vPosition ), vRectSize ) - vRectSize ) - vCornerRadius;\n"
-  "  OUT_COLOR = vec4(mixColor, 1.0) * uColor;\n"
-  "  OUT_COLOR.a *= 1.0 - smoothstep( -1.0, 1.0, dist );\n"
-  "}\n";
-
-const char* VERTEX_SHADER_BLUR_EDGE =
-  "INPUT mediump vec2 aPosition;\n"
-  "OUTPUT mediump vec2 vPosition;\n"
-  "OUTPUT mediump vec2 vRectSize;\n"
-
-  "uniform highp   mat4 uMvpMatrix;\n"
-  "uniform highp vec3 uSize;\n"
-
-  "//Visual size and offset\n"
-  "uniform mediump vec2 offset;\n"
-  "uniform highp vec2 size;\n"
-  "uniform mediump vec2 extraSize;\n"
-  "uniform mediump vec4 offsetSizeMode;\n"
-  "uniform mediump vec2 origin;\n"
-  "uniform mediump vec2 anchorPoint;\n"
-  "uniform mediump float blurRadius;\n"
-
-  "vec4 ComputeVertexPosition()\n"
-  "{\n"
-  "  vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize + blurRadius * 2.0;\n"
-  "  vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy);\n"
-  "  vRectSize = visualSize / 2.0;\n"
-  "  vPosition = aPosition* visualSize;\n"
-  "  return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 );\n"
-  "}\n"
-
-  "void main()\n"
-  "{\n"
-  "  gl_Position = uMvpMatrix * ComputeVertexPosition();\n"
-  "}\n";
-
-const char* FRAGMENT_SHADER_BLUR_EDGE =
-  "INPUT mediump vec2 vPosition;\n"
-  "INPUT mediump vec2 vRectSize;\n"
-
-  "uniform lowp vec4 uColor;\n"
-  "uniform lowp vec3 mixColor;\n"
-  "uniform mediump float blurRadius;\n"
-
-  "void main()\n"
-  "{\n"
-  "  mediump vec2 blur = 1.0 - smoothstep( vRectSize - blurRadius * 2.0, vRectSize, abs( vPosition ) );\n"
-  "  OUT_COLOR = vec4(mixColor, 1.0) * uColor;\n"
-  "  OUT_COLOR.a *= blur.x * blur.y;\n"
-  "}\n";
-
-}
-
 ColorVisualPtr ColorVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties )
 {
   ColorVisualPtr colorVisualPtr( new ColorVisual( factoryCache ) );
@@ -363,7 +225,7 @@ Shader ColorVisual::GetShader()
     shader = mFactoryCache.GetShader( VisualFactoryCache::COLOR_SHADER_BLUR_EDGE );
     if( !shader )
     {
-      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + VERTEX_SHADER_BLUR_EDGE, Dali::Shader::GetFragmentShaderPrefix() + FRAGMENT_SHADER_BLUR_EDGE );
+      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + SHADER_COLOR_VISUAL_BLUR_EDGE_SHADER_VERT.data(), Dali::Shader::GetFragmentShaderPrefix() + SHADER_COLOR_VISUAL_BLUR_EDGE_SHADER_FRAG.data() );
       mFactoryCache.SaveShader( VisualFactoryCache::COLOR_SHADER_BLUR_EDGE, shader );
     }
   }
@@ -372,7 +234,7 @@ Shader ColorVisual::GetShader()
     shader = mFactoryCache.GetShader( VisualFactoryCache::COLOR_SHADER );
     if( !shader )
     {
-      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + VERTEX_SHADER, Dali::Shader::GetFragmentShaderPrefix() + FRAGMENT_SHADER );
+      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + SHADER_COLOR_VISUAL_SHADER_VERT.data(), Dali::Shader::GetFragmentShaderPrefix() + SHADER_COLOR_VISUAL_SHADER_FRAG.data() );
       mFactoryCache.SaveShader( VisualFactoryCache::COLOR_SHADER, shader );
     }
   }
@@ -381,7 +243,7 @@ Shader ColorVisual::GetShader()
     shader = mFactoryCache.GetShader( VisualFactoryCache::COLOR_SHADER_ROUNDED_CORNER );
     if( !shader )
     {
-      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + VERTEX_SHADER_ROUNDED_CORNER, Dali::Shader::GetFragmentShaderPrefix() + FRAGMENT_SHADER_ROUNDED_CORNER );
+      shader = Shader::New( Dali::Shader::GetVertexShaderPrefix() + SHADER_COLOR_VISUAL_ROUNDED_CORNER_SHADER_VERT.data(), Dali::Shader::GetFragmentShaderPrefix() + SHADER_COLOR_VISUAL_ROUNDED_CORNER_SHADER_FRAG.data() );
       mFactoryCache.SaveShader( VisualFactoryCache::COLOR_SHADER_ROUNDED_CORNER, shader );
     }
   }