]> O.S.I.I.S - jp/vkvg.git/commitdiff
basic linear gradient
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 18 Apr 2018 01:13:32 +0000 (03:13 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Wed, 18 Apr 2018 01:13:32 +0000 (03:13 +0200)
14 files changed:
include/vkvg.h
shaders/vkvg_main.frag
shaders/vkvg_main.vert
src/shaders.h
src/vkvg_context.c
src/vkvg_context_internal.c
src/vkvg_context_internal.h
src/vkvg_device.c
src/vkvg_device_internal.c
src/vkvg_device_internal.h
src/vkvg_pattern.c
src/vkvg_pattern.h
src/vkvg_surface.c
tests/test1.c

index 9f13281bc604c3ac629f33f4884d9e4946e187d2..265cbdf9cde62f1cef1e8a6fb95a083e67249cbb 100644 (file)
@@ -120,6 +120,7 @@ void vkvg_clip_preserve     (VkvgContext ctx);
 void vkvg_set_rgba                     (VkvgContext ctx, float r, float g, float b, float a);
 void vkvg_set_linewidth                (VkvgContext ctx, float width);
 void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y);
+void vkvg_set_source        (VkvgContext ctx, VkvgPattern pat);
 
 void vkvg_select_font_face     (VkvgContext ctx, const char* name);
 void vkvg_set_font_size                (VkvgContext ctx, uint32_t size);
@@ -128,6 +129,17 @@ void vkvg_show_text                        (VkvgContext ctx, const char* text);
 void vkvg_save              (VkvgContext ctx);
 void vkvg_restore           (VkvgContext ctx);
 
+//pattern
+VkvgPattern vkvg_pattern_create             ();
+VkvgPattern vkvg_pattern_create_for_surface (VkvgSurface surf);
+VkvgPattern vkvg_pattern_create_linear      (float x0, float y0, float x1, float y1);
+VkvgPattern vkvg_pattern_create_radial      (float cx0, float cy0, float radius0,
+                                             float cx1, float cy1, float radius1);
+
+void vkvg_patter_add_color_stop (VkvgPattern pat, float offset, float r, float g, float b, float a);
+void vkvg_pattern_set_extend    (VkvgPattern pat, vkvg_extend_t extend);
+void vkvg_pattern_destroy       (VkvgPattern pat);
+
 #ifdef __cplusplus
 }
 #endif
index e49445164ceae23b3f333a2af167c10cdf779e3c..aad56419f4c85864cf2d21687337c0f9174b313b 100644 (file)
@@ -5,22 +5,56 @@
 
 layout (set=0, binding = 0) uniform sampler2DArray fontMap;
 layout (set=1, binding = 0) uniform sampler2D          source;
+layout (set=2, binding = 0) uniform _uboGrad {
+       vec4    cp[3];
+       vec4    colors[16];
+       vec4    stops[16];
+       uint    count;
+}uboGrad;
 
-layout (location = 0) in vec4 inColor;         //source rgba
-layout (location = 1) in vec3 inFontUV;                //if it is a text drawing, inFontUV.z hold fontMap layer
-layout (location = 2) in vec4 inSrcRect;       //source bounds
+layout (location = 0) in vec3  inFontUV;               //if it is a text drawing, inFontUV.z hold fontMap layer
+layout (location = 1) in vec4  inSrc;                  //source bounds
+layout (location = 2) in flat int inPatType;
 
 layout (location = 0) out vec4 outFragColor;
 
 layout (constant_id = 0) const int NUM_SAMPLES = 8;
 
+
+#define SOLID                  0
+#define SURFACE                        1
+#define LINEAR                 2
+#define RADIAL                 3
+#define MESH                   4
+#define RASTER_SOURCE  5
+
 void main()
 {
-       vec4 c = inColor;
-       if (inSrcRect.z > 0.0){
-               vec2 srcUV = (gl_FragCoord.xy - inSrcRect.xy) / inSrcRect.zw;
-               c = texture(source, srcUV);
+       vec4 c = vec4(0);
+       switch(inPatType){
+       case SOLID:
+               c = inSrc;
+               break;
+       case SURFACE:
+               vec2 srcUV = (gl_FragCoord.xy - inSrc.xy) / inSrc.zw;
+               c = texture (source, srcUV);
+               break;
+       case LINEAR:
+               float  alpha = atan( -uboGrad.cp[1].y + uboGrad.cp[0].y, uboGrad.cp[1].x - uboGrad.cp[0].x );
+               float  gradientStartPosRotatedX = uboGrad.cp[0].x*cos(alpha) - uboGrad.cp[0].y*sin(alpha);
+               float  gradientEndPosRotatedX   = uboGrad.cp[1].x*cos(alpha) - uboGrad.cp[1].y*sin(alpha);
+               float  d = gradientEndPosRotatedX - gradientStartPosRotatedX;
+
+               float y = inSrc.y - gl_FragCoord.y;
+               float x = gl_FragCoord.x;
+               float xLocRotated = x*cos( alpha ) - y*sin( alpha );
+
+               c = mix(uboGrad.colors[0], uboGrad.colors[1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[0].r*d, gradientStartPosRotatedX + uboGrad.stops[1].r*d, xLocRotated ) );
+               for ( int i=1; i<uboGrad.count-1; ++i )
+                       c = mix(c, uboGrad.colors[i+1], smoothstep( gradientStartPosRotatedX + uboGrad.stops[i].r*d, gradientStartPosRotatedX + uboGrad.stops[i+1].r*d, xLocRotated ) );
+               break;
        }
+
        if (inFontUV.z >= 0.0)
                c *= texture(fontMap, inFontUV).r;
 
index 4e583c4d19899456c6535003d7408e4573ed16e7..09ce9db2410b221e466fe2f8188a507c19339112 100644 (file)
@@ -3,12 +3,12 @@
 #extension GL_ARB_separate_shader_objects : enable
 #extension GL_ARB_shading_language_420pack : enable
 
-layout (location = 0) in vec2 inPos;
-layout (location = 1) in vec3 inUV;
+layout (location = 0) in vec2  inPos;
+layout (location = 1) in vec3  inUV;
 
-layout (location = 0) out vec4 outColor;
-layout (location = 1) out vec3 outUV;
-layout (location = 2) out vec4 outSrcRect;
+layout (location = 0) out vec3 outUV;
+layout (location = 1) out vec4 outSrc;
+layout (location = 2) out flat int outPatType;
 
 out gl_PerVertex
 {
@@ -17,19 +17,22 @@ out gl_PerVertex
 
 layout(push_constant) uniform PushConsts {
        vec4 source;
-       vec2 scale;
-       vec2 translate;
+       vec2 size;
        int  srcType;
 } pushConsts;
 
+#define SOLID                  0
+#define SURFACE                        1
+#define LINEAR                 2
+#define RADIAL                 3
+#define MESH                   4
+#define RASTER_SOURCE  5
+
 void main()
 {
-       outUV = inUV;
-       if (pushConsts.srcType == 0){
-               outSrcRect.z = -1;
-               outColor = pushConsts.source;
-       }else
-               outSrcRect = pushConsts.source;
-
-       gl_Position = vec4(inPos.xy * pushConsts.scale - vec2(1), 0.0, 1.0);
+       outUV           = inUV;
+       outPatType      = pushConsts.srcType;
+       outSrc          = pushConsts.source;
+
+       gl_Position = vec4(inPos.xy * vec2(2) / pushConsts.size - vec2(1), 0.0, 1.0);
 }
index 43564bb9955e99bf17c28b8aca423c48cbca1a57..a51c03a8634d2ae3181c42035ad41d57cca14191 100644 (file)
@@ -1,13 +1,13 @@
 unsigned char vkvg_main_frag_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00,
-  0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
+  0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
   0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
   0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00,
   0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72,
@@ -24,103 +24,180 @@ unsigned char vkvg_main_frag_spv[] = {
   0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x43, 0x6f,
-  0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x69, 0x6e, 0x53, 0x72, 0x63, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x61,
+  0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x53, 0x72, 0x63, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x55,
   0x56, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x1b, 0x00, 0x00, 0x00,
   0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6f, 0x72, 0x64,
   0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
-  0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x46, 0x6f, 0x6e, 0x74, 0x55, 0x56,
-  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00, 0x5f, 0x75, 0x62, 0x6f,
+  0x47, 0x72, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x70, 0x00, 0x00,
+  0x06, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70,
+  0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x75, 0x62, 0x6f, 0x47,
+  0x72, 0x61, 0x64, 0x00, 0x05, 0x00, 0x09, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72,
+  0x74, 0x50, 0x6f, 0x73, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x54, 0x00, 0x00, 0x00,
+  0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x50,
+  0x6f, 0x73, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00,
+  0x05, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x03, 0x00, 0x64, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x03, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x05, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x78, 0x4c, 0x6f, 0x63,
+  0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x00, 0x05, 0x00, 0x03, 0x00,
+  0x8f, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
+  0xbc, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x46, 0x6f, 0x6e, 0x74, 0x55, 0x56,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xc6, 0x00, 0x00, 0x00,
   0x66, 0x6f, 0x6e, 0x74, 0x4d, 0x61, 0x70, 0x00, 0x05, 0x00, 0x06, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43,
+  0xce, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43,
   0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x42, 0x00, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50,
-  0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0xd0, 0x00, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50,
+  0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x47, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
   0x0f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
   0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
   0x27, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x36, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x0a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x0a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x19, 0x00, 0x09, 0x00, 0x24, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x1b, 0x00, 0x03, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x25, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
-  0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00,
-  0x33, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x33, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
+  0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00,
+  0x48, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xbc, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0xc6, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xce, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0xd0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00,
+  0x24, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00,
-  0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x30, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+  0x33, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x35, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
   0x3b, 0x00, 0x04, 0x00, 0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x3e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x04, 0x00,
-  0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x05, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0xba, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x16, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x97, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x98, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x14, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
+  0xba, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0xba, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xbb, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x19, 0x00, 0x09, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x1b, 0x00, 0x03, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xc4, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xc5, 0x00, 0x00, 0x00,
+  0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0xcd, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0xcd, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0xd0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x6b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x09, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00,
   0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
   0x1b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00,
   0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
   0x4f, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
   0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00,
   0x20, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
   0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x18, 0x00, 0x00, 0x00,
   0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
   0x18, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
@@ -131,31 +208,229 @@ unsigned char vkvg_main_frag_spv[] = {
   0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
   0x28, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
   0x09, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x17, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
-  0x2f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x31, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x34, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x39, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
-  0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
-  0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x40, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
+  0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x3c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x42, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x45, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
+  0x45, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
+  0x49, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x4b, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x4e, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x37, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
+  0x4d, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x48, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
+  0x55, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x57, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
+  0x58, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x5d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x5c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x5e, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00,
+  0x59, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x65, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
+  0x1b, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
+  0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x65, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x6b, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x70, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x72, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x74, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+  0x75, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x77, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x06, 0x00, 0x78, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00,
+  0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0x7b, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x7c, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
+  0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x84, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00,
+  0x3a, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x7e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x87, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
+  0x87, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x89, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
+  0x6e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x8b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
+  0x8b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+  0x8b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x8d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x7a, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x90, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x90, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0x92, 0x00, 0x00, 0x00,
+  0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x94, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x94, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
+  0x8f, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x96, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x98, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x97, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x9a, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00,
+  0x39, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0x9c, 0x00, 0x00, 0x00,
+  0x9d, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
+  0x92, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x91, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x9f, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0xa1, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0xa0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0xa2, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
+  0x8f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00,
+  0xa5, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00,
+  0xa4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0xa8, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00,
+  0xa3, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00,
+  0x8f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0xac, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x07, 0x00, 0x3a, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0xae, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
+  0xae, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
+  0xb0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0xb2, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00,
+  0xb2, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00,
+  0xb3, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0xb5, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x93, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x93, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00,
+  0xb6, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x8f, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x90, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x92, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x65, 0x00, 0x00, 0x00,
+  0xbe, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00,
+  0xbe, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00, 0x9c, 0x00, 0x00, 0x00,
+  0xc0, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00,
+  0xc2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc1, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00,
+  0xc6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00,
+  0xc8, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00,
+  0xc8, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0xca, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0xcc, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xc2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0xcf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0xce, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00,
+  0x38, 0x00, 0x01, 0x00
 };
-unsigned int vkvg_main_frag_spv_len = 1860;
+unsigned int vkvg_main_frag_spv_len = 5152;
 unsigned char wired_frag_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00,
   0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
@@ -320,14 +595,14 @@ unsigned char wired_frag_spv[] = {
 unsigned int wired_frag_spv_len = 1904;
 unsigned char vkvg_main_vert_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00,
-  0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
+  0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
   0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00,
   0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73,
   0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64,
@@ -345,43 +620,40 @@ unsigned char vkvg_main_vert_spv[] = {
   0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
   0x6f, 0x75, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
   0x0b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00,
-  0x05, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x50, 0x75, 0x73, 0x68,
-  0x43, 0x6f, 0x6e, 0x73, 0x74, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72,
-  0x63, 0x65, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x73, 0x72, 0x63, 0x54, 0x79, 0x70, 0x65, 0x00, 0x05, 0x00, 0x05, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x70, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x73,
-  0x74, 0x73, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x6f, 0x75, 0x74, 0x53, 0x72, 0x63, 0x52, 0x65, 0x63, 0x74, 0x00, 0x00,
-  0x05, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x43,
-  0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
-  0x2a, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65,
-  0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00,
-  0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50,
-  0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x03, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
-  0x2e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x6f, 0x73, 0x00, 0x00, 0x00,
-  0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x50,
+  0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x73,
+  0x74, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00,
+  0x06, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x73, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x73, 0x72, 0x63, 0x54,
+  0x79, 0x70, 0x65, 0x00, 0x05, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x70, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x73, 0x00, 0x00,
+  0x05, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x53,
+  0x72, 0x63, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x1f, 0x00, 0x00, 0x00,
+  0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78,
+  0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1f, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,
+  0x69, 0x6f, 0x6e, 0x00, 0x05, 0x00, 0x03, 0x00, 0x21, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00,
+  0x69, 0x6e, 0x50, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x48, 0x00, 0x05, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
-  0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
-  0x2e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x1f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
   0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
@@ -391,88 +663,75 @@ unsigned char vkvg_main_vert_spv[] = {
   0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
   0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
   0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x14, 0x00, 0x02, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x15, 0x00, 0x04, 0x00,
-  0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00,
-  0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x05, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
-  0x35, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
-  0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x16, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x1f, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+  0x2c, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
+  0x25, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2c, 0x00, 0x05, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
   0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
   0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00,
-  0x19, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0x27, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x1d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x26, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x1b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x27, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
-  0x3e, 0x00, 0x03, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x0e, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
-  0x33, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
-  0x38, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
-  0x17, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
+  0x0c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x16, 0x00, 0x00, 0x00,
+  0x17, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x17, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x00, 0x00,
+  0x1d, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
+  0x1d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x1e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
+  0x26, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00,
+  0x2a, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x2a, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x32, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+  0x2d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+  0x3e, 0x00, 0x03, 0x00, 0x34, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00
 };
-unsigned int vkvg_main_vert_spv_len = 1824;
+unsigned int vkvg_main_vert_spv_len = 1628;
 unsigned char shader_comp_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0d, 0x00,
   0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
index 2e5c0394d1792514be1e9332a5719d0b73953ba0..fe9ccc3faab0be8c64f0540cc5035620ab0f6557 100644 (file)
@@ -1,6 +1,7 @@
 #include "vkvg_device_internal.h"
 #include "vkvg_context_internal.h"
 #include "vkvg_surface_internal.h"
+#include "vkvg_pattern.h"
 #include "vkh_queue.h"
 
 #ifdef DEBUG
@@ -23,9 +24,8 @@ VkvgContext vkvg_create(VkvgSurface surf)
 
     push_constants pc = {
             {},
-            {2.0f/(float)ctx->pSurf->width,2.0f/(float)ctx->pSurf->height},
-            {0.f,0.f},
-            VKVG_SRC_SOLID
+            {(float)ctx->pSurf->width,(float)ctx->pSurf->height},
+            VKVG_PATTERN_TYPE_SOLID
     };
     ctx->pushConsts = pc;
 
@@ -44,10 +44,12 @@ VkvgContext vkvg_create(VkvgSurface surf)
     ctx->cmdPool = vkh_cmd_pool_create (dev->vkDev, dev->gQueue->familyIndex, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
 
     _create_vertices_buff   (ctx);
+    _create_gradient_buff   (ctx);
     _create_cmd_buff        (ctx);
     _createDescriptorPool   (ctx);
     _init_descriptor_sets   (ctx);
     _update_descriptor_set  (ctx, ctx->pSurf->dev->fontCache->cacheTex, ctx->dsFont);
+    _update_gradient_desc_set(ctx);
     _init_cmd_buff          (ctx);
     _clear_path             (ctx);
 
@@ -90,11 +92,12 @@ void vkvg_destroy (VkvgContext ctx)
     vkFreeCommandBuffers(dev, ctx->cmdPool, 1, &ctx->cmd);
     vkDestroyCommandPool(dev, ctx->cmdPool, NULL);
 
-    VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc};
-    vkFreeDescriptorSets    (dev, ctx->descriptorPool,2,dss);
+    VkDescriptorSet dss[] = {ctx->dsFont, ctx->dsSrc, ctx->dsGrad};
+    vkFreeDescriptorSets    (dev, ctx->descriptorPool, 3, dss);
 
     vkDestroyDescriptorPool (dev, ctx->descriptorPool,NULL);
 
+    vkvg_buffer_destroy (&ctx->uboGrad);
     vkvg_buffer_destroy (&ctx->indices);
     vkvg_buffer_destroy (&ctx->vertices);
 
@@ -432,7 +435,7 @@ void vkvg_paint (VkvgContext ctx){
 
 void vkvg_set_rgba (VkvgContext ctx, float r, float g, float b, float a)
 {
-    if (ctx->pushConsts.srcType == VKVG_SRC_PATTERN){
+    if (ctx->pushConsts.patternType == VKVG_PATTERN_TYPE_SURFACE){
         _flush_cmd_buff             (ctx);
         _reset_src_descriptor_set   (ctx);
         _init_cmd_buff              (ctx);
@@ -440,9 +443,10 @@ void vkvg_set_rgba (VkvgContext ctx, float r, float g, float b, float a)
 
     vec4 c = {r,g,b,a};
     ctx->pushConsts.source = c;
-    ctx->pushConsts.srcType = VKVG_SRC_SOLID;
-    vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
-                       VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants),&ctx->pushConsts);
+    ctx->pushConsts.patternType = VKVG_PATTERN_TYPE_SOLID;
+
+    _update_push_constants (ctx);
+
     ctx->curRGBA.x = r;
     ctx->curRGBA.y = g;
     ctx->curRGBA.z = b;
@@ -492,11 +496,35 @@ void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y
 
     vec4 srcRect = {x,y,surf->width,surf->height};
     ctx->pushConsts.source = srcRect;
-    ctx->pushConsts.srcType = VKVG_SRC_PATTERN;
-    vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
-                       VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants),&ctx->pushConsts);
+    ctx->pushConsts.patternType = VKVG_PATTERN_TYPE_SURFACE;
+    _update_push_constants (ctx);
 }
+void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){
+    if (pat->type == VKVG_PATTERN_TYPE_SOLID){
+        vkvg_color_t* c = (vkvg_color_t*)pat->data;
+        vkvg_set_rgba (ctx, c->r, c->g, c->b, c->a);
+        return;
+    }
+    if (pat->type == VKVG_PATTERN_TYPE_SURFACE){
+        vkvg_set_source_surface (ctx, (VkvgSurface)pat->data, 0, 0);
+        return;
+    }
 
+    _flush_cmd_buff (ctx);
+
+    if (ctx->pushConsts.patternType == VKVG_PATTERN_TYPE_SURFACE)
+        _reset_src_descriptor_set (ctx);
+
+    ctx->pushConsts.patternType = pat->type;
+    vec4 bounds = {ctx->pSurf->width, ctx->pSurf->height, 0, 0};//store img bounds in unused source field
+    ctx->pushConsts.source = bounds;
+    _update_push_constants (ctx);
+
+    vkvg_gradient_t* grad = pat->data;
+    memcpy(ctx->uboGrad.mapped, pat->data, sizeof(vkvg_gradient_t));
+
+    _init_cmd_buff (ctx);
+}
 void vkvg_set_linewidth (VkvgContext ctx, float width){
     ctx->lineWidth = width;
 }
index 3220a0259f59480665dfb7b430c47cac687792f7..23aa3a0542872bef49cf36a41af6951a9e10eed0 100644 (file)
@@ -11,6 +11,7 @@
 #include "vkvg_surface_internal.h"
 #include "vkvg_context_internal.h"
 #include "vkvg_device_internal.h"
+#include "vkvg_pattern.h"
 #include "vkh_queue.h"
 
 void _check_pathes_array (VkvgContext ctx){
@@ -47,6 +48,12 @@ float _normalizeAngle(float a)
     else
         return res;
 }
+void _create_gradient_buff (VkvgContext ctx){
+    vkvg_buffer_create (ctx->pSurf->dev,
+        VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
+        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
+        sizeof(vkvg_gradient_t), &ctx->uboGrad);
+}
 void _create_vertices_buff (VkvgContext ctx){
     vkvg_buffer_create (ctx->pSurf->dev,
         VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
@@ -176,20 +183,21 @@ void _init_cmd_buff (VkvgContext ctx){
         {-1.f,-1.f},
     };*/
 
-    vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
-                       VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants),&ctx->pushConsts);
-    //vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
-    //                   VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(push_constants),&pc);
+    _update_push_constants (ctx);
 
-    VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc};
+    VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc,ctx->dsGrad};
     vkCmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout,
-                            0, 2, dss, 0, NULL);
+                            0, 3, dss, 0, NULL);
     VkDeviceSize offsets[1] = { 0 };
     vkCmdBindVertexBuffers(ctx->cmd, 0, 1, &ctx->vertices.buffer, offsets);
     vkCmdBindIndexBuffer(ctx->cmd, ctx->indices.buffer, 0, VK_INDEX_TYPE_UINT32);
     vkCmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipeline);
     vkCmdSetStencilReference(ctx->cmd,VK_STENCIL_FRONT_AND_BACK, ctx->stencilRef);
 }
+inline void _update_push_constants (VkvgContext ctx) {
+    vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
+                       VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants),&ctx->pushConsts);
+}
 
 void _finish_path (VkvgContext ctx){
     if (ctx->pathPtr % 2 == 0)//current path is empty
@@ -223,7 +231,18 @@ void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds){
     };
     vkUpdateDescriptorSets(ctx->pSurf->dev->vkDev, 1, &writeDescriptorSet, 0, NULL);
 }
-
+void _update_gradient_desc_set (VkvgContext ctx){
+    VkDescriptorBufferInfo dbi = {ctx->uboGrad.buffer, 0, VK_WHOLE_SIZE};
+    VkWriteDescriptorSet writeDescriptorSet = {
+            .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
+            .dstSet = ctx->dsGrad,
+            .dstBinding = 0,
+            .descriptorCount = 1,
+            .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+            .pBufferInfo = &dbi
+    };
+    vkUpdateDescriptorSets(ctx->pSurf->dev->vkDev, 1, &writeDescriptorSet, 0, NULL);
+}
 /*
  * Reset currently bound descriptor which image could be destroyed
  */
@@ -243,7 +262,7 @@ void _createDescriptorPool (VkvgContext ctx) {
     VkvgDevice dev = ctx->pSurf->dev;
     const VkDescriptorPoolSize descriptorPoolSize[] = {
         {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2 },
-        {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1 }
+        {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1 }
     };
     VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
                                                             .maxSets = 3,
@@ -261,6 +280,8 @@ void _init_descriptor_sets (VkvgContext ctx){
     VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsFont));
     descriptorSetAllocateInfo.pSetLayouts = &dev->dslSrc;
     VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsSrc));
+    descriptorSetAllocateInfo.pSetLayouts = &dev->dslGrad;
+    VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsGrad));
 }
 void add_line(vkvg_context* ctx, vec2 p1, vec2 p2, vec4 col){
     Vertex v = {{p1.x,p1.y},{0,0,-1}};
index fd206376d2e9fa44798c64354ce907a6186e22cb..355969632aeb3a39375bbcc4f15aecdbf73a19a7 100644 (file)
@@ -26,14 +26,10 @@ typedef struct _ear_clip_point{
     struct _ear_clip_point* next;
 }ear_clip_point;
 
-#define VKVG_SRC_SOLID      0
-#define VKVG_SRC_PATTERN    1
-
 typedef struct {
-    vec4    source;
-    vec2    scale;
-    vec2    translate;
-    int     srcType;
+    vec4     source;
+    vec2     size;
+    uint32_t patternType;
 }push_constants;
 
 typedef struct _vkvg_context_save_t{
@@ -75,6 +71,9 @@ typedef struct _vkvg_context_t {
     VkDescriptorPool   descriptorPool;
     VkDescriptorSet     dsFont;
     VkDescriptorSet     dsSrc;
+    VkDescriptorSet     dsGrad;
+
+    vkvg_buff  uboGrad;//uniform buff obj holdings gradient infos
 
     //vk buffers, holds data until flush
     vkvg_buff  indices;
@@ -131,6 +130,7 @@ void _record_draw_cmd               (VkvgContext ctx);
 void _submit_wait_and_reset_cmd(VkvgContext ctx);
 void _submit_ctx_cmd        (VkvgContext ctx);
 void _wait_and_reset_ctx_cmd(VkvgContext ctx);
+void _update_push_constants (VkvgContext ctx);
 
 void _finish_path                      (VkvgContext ctx);
 void _clear_path                       (VkvgContext ctx);
@@ -140,6 +140,7 @@ uint32_t _get_last_point_of_closed_path (VkvgContext ctx, uint32_t ptrPath);
 void _createDescriptorPool  (VkvgContext ctx);
 void _init_descriptor_sets  (VkvgContext ctx);
 void _update_descriptor_set (VkvgContext ctx, VkhImage img, VkDescriptorSet ds);
+void _update_gradient_desc_set (VkvgContext ctx);
 void _reset_src_descriptor_set(VkvgContext ctx);
 void _free_ctx_save         (vkvg_context_save_t* sav);
 
index a1d8acc18d36ece817f73401e907a324e1acb7d6..2d5fb23541cfd0109486aa8192a8fe4e2e6dddf6 100644 (file)
@@ -32,6 +32,7 @@ VkvgDevice vkvg_device_create(VkPhysicalDevice phy, VkDevice vkdev, VkQueue queu
 
 void vkvg_device_destroy (VkvgDevice dev)
 {
+    vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslGrad,NULL);
     vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslFont,NULL);
     vkDestroyDescriptorSetLayout    (dev->vkDev, dev->dslSrc, NULL);
 
index d34e6cc5f813a1507cb3f6bbac0cc5a03b83b654..5ea3bbfc865bb4457f07dc8090bb167ee7ede78f 100644 (file)
@@ -266,17 +266,19 @@ void _createDescriptorSetLayout (VkvgDevice dev) {
                                                           .pBindings = &dsLayoutBinding };
     VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslFont));
     VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslSrc));
+    dsLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+    VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslGrad));
 
     VkPushConstantRange pushConstantRange[] = {
         {VK_SHADER_STAGE_VERTEX_BIT,0,sizeof(push_constants)},
         //{VK_SHADER_STAGE_FRAGMENT_BIT,0,sizeof(push_constants)}
     };
-    VkDescriptorSetLayout dsls[] = {dev->dslFont,dev->dslSrc};
+    VkDescriptorSetLayout dsls[] = {dev->dslFont,dev->dslSrc,dev->dslGrad};
 
     VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
                                                             .pushConstantRangeCount = 1,
                                                             .pPushConstantRanges = &pushConstantRange,
-                                                            .setLayoutCount = 2,
+                                                            .setLayoutCount = 3,
                                                             .pSetLayouts = dsls };
     VK_CHECK_RESULT(vkCreatePipelineLayout(dev->vkDev, &pipelineLayoutCreateInfo, NULL, &dev->pipelineLayout));
 }
index 049ea7a5e8b3927372f1b2e66bff707f6bff9c64..f17c924ba0a21a9b6fcdd931feb49f1ab09be0d4 100644 (file)
@@ -28,6 +28,7 @@ typedef struct _vkvg_device_t{
     VkDescriptorPool           descriptorPool;
     VkDescriptorSetLayout      dslFont;
     VkDescriptorSetLayout      dslSrc;
+    VkDescriptorSetLayout      dslGrad;
 
     int                hdpi,
             vdpi;
index 8c9eda11266f15488b4aeaf8fd48b43ddf3d12b7..5fdf28c9c89970019980ac65b40ce25c0f07262b 100644 (file)
@@ -3,43 +3,37 @@
 #include "vkvg_device_internal.h"
 #include "vkvg_pattern.h"
 
-VkvgPattern _init_pattern (VkvgDevice dev){
+VkvgPattern vkvg_pattern_create(){
     VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t));
-    pat->dev = dev;
-    return pat;
-}
-
-VkvgPattern vkvg_pattern_create(VkvgDevice dev){
-    VkvgPattern pat = _init_pattern (dev);
     pat->type = VKVG_PATTERN_TYPE_SOLID;
     pat->data = (vkvg_color_t*)calloc(1,sizeof(vkvg_color_t));
     return pat;
 }
 
 VkvgPattern vkvg_pattern_create_for_surface (VkvgSurface surf){
-    VkvgPattern pat = _init_pattern (surf->dev);
+    VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t));
     pat->data = surf;
     return pat;
 }
-VkvgPattern vkvg_pattern_create_linear (VkvgDevice dev, float x0, float y0, float x1, float y1){
-    VkvgPattern pat = _init_pattern (dev);
-
+VkvgPattern vkvg_pattern_create_linear (float x0, float y0, float x1, float y1){
+    VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t));
+    pat->type = VKVG_PATTERN_TYPE_LINEAR;
     vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t));
 
-    vec2 cp0 = {x0, y0}, cp1 = {x1, y1};
+    vec4 cp0 = {x0, y0}, cp1 = {x1, y1};
     grad->cp[0] = cp0;
     grad->cp[1] = cp1;
 
     pat->data = grad;
     return pat;
 }
-VkvgPattern vkvg_pattern_create_radial (VkvgDevice dev, float cx0, float cy0, float radius0,
+VkvgPattern vkvg_pattern_create_radial (float cx0, float cy0, float radius0,
                                         float cx1, float cy1, float radius1){
-    VkvgPattern pat = _init_pattern (dev);
+    VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t));
 
     vkvg_gradient_t* grad = (vkvg_gradient_t*)calloc(1,sizeof(vkvg_gradient_t));
 
-    vec2 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1};
+    vec4 cp0 = {cx0, cy0}, cp1 = {cx1, cy1}, rads = {radius0, radius1};
     grad->cp[0] = cp0;
     grad->cp[1] = cp1;
     grad->cp[2] = rads;
@@ -56,16 +50,13 @@ void vkvg_patter_add_color_stop (VkvgPattern pat, float offset, float r, float g
     vkvg_gradient_t* grad = (vkvg_gradient_t*)pat->data;
     vkvg_color_t c = {r,g,b,a};
     grad->colors[grad->count] = c;
-    grad->stops[grad->count] = offset;
+    grad->stops[grad->count].r = offset;
+    grad->count++;
 }
 void vkvg_pattern_set_extend (VkvgPattern pat, vkvg_extend_t extend){
     pat->extend = extend;
 }
 
-void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){
-
-}
-
 void vkvg_pattern_destroy(VkvgPattern pat)
 {
     if (pat->type != VKVG_PATTERN_TYPE_SURFACE)
index 0fb9ff1fdda62faadf8a89196b79870673af4b72..814a94eee0760dcb4c19fd1bcbbddbbec5ec5045 100644 (file)
@@ -9,17 +9,13 @@ typedef struct _vkvg_pattern_t {
     vkvg_extend_t       extend;
     vkvg_pattern_type_t type;
     void*               data;
-
-    VkvgDevice          dev;
-    VkDescriptorSet     descriptorSet;
-    VkhImage            img;
 }vkvg_pattern_t;
 
 typedef struct _vkvg_gradient_t {
-    vec2        cp[3];
-    vkvg_color_t colors[32];
-    float       stops[32];
-    uint32_t    count;
+    vec4            cp[3];
+    vkvg_color_t    colors[16];
+    vec4            stops[16];
+    uint32_t        count;
 }vkvg_gradient_t;
 
 #endif
index f3e34ca2f4c7f80ac9f7983eaf218cd1a7a0891a..5f652be37a8d1dc7d6f68cad3e9d2ebaebc75d03 100644 (file)
@@ -153,10 +153,9 @@ VkvgSurface vkvg_surface_create_from_image (VkvgDevice dev, const char* filePath
 
     vec4 srcRect = {0,0,surf->width,surf->height};
     ctx->pushConsts.source = srcRect;
-    ctx->pushConsts.srcType = VKVG_SRC_PATTERN;
-    vkCmdPushConstants(ctx->cmd, ctx->pSurf->dev->pipelineLayout,
-                       VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(push_constants), &ctx->pushConsts);
+    ctx->pushConsts.patternType = VKVG_PATTERN_TYPE_SURFACE;
 
+    _update_push_constants (ctx);
     _update_descriptor_set (ctx, tmpImg, ctx->dsSrc);
 
     vkvg_paint          (ctx);
index 534848f7f74d3b9339cc6a6780fa6d818aa866aa..ba100d5d25744537f08eb6e196a5d64002b3938b 100644 (file)
@@ -389,10 +389,24 @@ void draw(VkEngine* e) {
         VK_CHECK_RESULT(vkQueuePresentKHR(r->queue, &present));
     }
 }
+
+void vkvg_test_gradient (VkvgContext ctx) {
+    VkvgPattern pat = vkvg_pattern_create_linear(100,0,300,0);
+    vkvg_set_linewidth(ctx, 20);
+    vkvg_patter_add_color_stop(pat, 0, 1, 0, 0, 1);
+    vkvg_patter_add_color_stop(pat, 0.5, 0, 1, 0, 1);
+    vkvg_patter_add_color_stop(pat, 1, 0, 0, 1, 1);
+    vkvg_set_source (ctx, pat);
+    vkvg_rectangle(ctx,100,500,200,200);
+    //vkvg_fill (ctx);
+    vkvg_stroke (ctx);
+    vkvg_pattern_destroy (pat);
+}
+
 void vkvg_test_clip(VkvgContext ctx){
-    vkvg_move_to(ctx,100,100);
-    vkvg_line_to(ctx,400,350);
-    vkvg_line_to(ctx,900,150);
+    vkvg_move_to(ctx,10,10);
+    vkvg_line_to(ctx,400,150);
+    vkvg_line_to(ctx,900,10);
     vkvg_line_to(ctx,700,450);
     vkvg_line_to(ctx,900,750);
     vkvg_line_to(ctx,500,650);
@@ -639,10 +653,10 @@ int main(int argc, char *argv[]) {
     VkvgSurface surf2 = vkvg_surface_create (device,1024,800);;
     VkvgContext ctx = vkvg_create(surf2);
 
-    vkvg_set_rgba(ctx,0.02,0.02,0.3,1.0);
+    vkvg_set_rgba(ctx,0.0,0.0,0.1,1.0);
     vkvg_paint(ctx);
 
-    vkvg_test_clip(ctx);
+    //vkvg_test_clip(ctx);
 
     vkvg_set_rgba (ctx,0.02,0.8,0.3,1.0);
     vkvg_rectangle (ctx,200,200,300,300);
@@ -651,6 +665,7 @@ int main(int argc, char *argv[]) {
     vkvg_test_fill2(ctx);
     //vkvg_test_fill(ctx);
     vkvg_test_stroke(ctx);
+    vkvg_test_gradient (ctx);
     vkvg_test_curves(ctx);
     test_text(ctx);