diff --git a/shaders/glamor/1.shader_test b/shaders/glamor/1.shader_test
new file mode 100644
index 0000000000000000000000000000000000000000..92f69d1e298866f70134929e8285c27acf5c5786
--- /dev/null
+++ b/shaders/glamor/1.shader_test
@@ -0,0 +1,157 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+attribute vec4 v_position;
+attribute vec4 v_texcoord;
+varying vec2 source_texture;
+
+void main()
+{
+    gl_Position = v_position;
+    source_texture = v_texcoord.xy;
+}
+
+[fragment shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform mat3 transform_mat;
+uniform int repeat_type;
+uniform int hor_ver;
+uniform float pt_slope;
+uniform float cos_val;
+uniform float p1_distance;
+uniform float pt_distance;
+varying vec2 source_texture;
+
+vec4 get_color(float stop_len);
+
+float get_stop_len()
+{
+    vec3 tmp = vec3(source_texture.x, source_texture.y, 1.0);
+    float distance;
+    float _p1_distance;
+    float _pt_distance;
+    float y_dist;
+    vec3 source_texture_trans = transform_mat * tmp;
+    
+    if(hor_ver == 0) { 
+        y_dist = source_texture_trans.y - source_texture_trans.x*pt_slope;
+        distance = y_dist * cos_val;
+        _p1_distance = p1_distance * source_texture_trans.z;
+        _pt_distance = pt_distance * source_texture_trans.z;
+        
+    } else if (hor_ver == 1) {
+        distance = source_texture_trans.x;
+        _p1_distance = p1_distance * source_texture_trans.z;
+        _pt_distance = pt_distance * source_texture_trans.z;
+    } 
+    
+    distance = (distance - _p1_distance) / _pt_distance;
+    
+    if(repeat_type == 1){
+        distance = fract(distance);
+    }
+    
+    if(repeat_type == 3) {
+        distance = abs(fract(distance * 0.5 + 0.5) * 2.0 - 1.0);
+    }
+    
+    return distance;
+}
+
+void main()
+{
+    float stop_len = get_stop_len();
+    gl_FragColor = get_color(stop_len);
+}
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform int n_stop;
+uniform float stop0;
+uniform float stop1;
+uniform float stop2;
+uniform float stop3;
+uniform float stop4;
+uniform float stop5;
+uniform float stop6;
+uniform float stop7;
+uniform vec4 stop_color0;
+uniform vec4 stop_color1;
+uniform vec4 stop_color2;
+uniform vec4 stop_color3;
+uniform vec4 stop_color4;
+uniform vec4 stop_color5;
+uniform vec4 stop_color6;
+uniform vec4 stop_color7;
+
+vec4 get_color(float stop_len)
+{
+    vec4 stop_color_before;
+    vec4 stop_color_after;
+    vec4 gradient_color;
+    float stop_before;
+    float stop_delta;
+    float percentage; 
+    
+    if((stop_len < stop0) && (n_stop >= 1)) {
+        stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);
+        stop_delta = 0.0;
+    } else if((stop_len < stop1) && (n_stop >= 2)) {
+        stop_color_before = stop_color0;
+        stop_color_after = stop_color1;
+        stop_before = stop0;
+        stop_delta = stop1 - stop0;
+    } else if((stop_len < stop2) && (n_stop >= 3)) {
+        stop_color_before = stop_color1;
+        stop_color_after = stop_color2;
+        stop_before = stop1;
+        stop_delta = stop2 - stop1;
+    } else if((stop_len < stop3) && (n_stop >= 4)){
+        stop_color_before = stop_color2;
+        stop_color_after = stop_color3;
+        stop_before = stop2;
+        stop_delta = stop3 - stop2;
+    } else if((stop_len < stop4) && (n_stop >= 5)){
+        stop_color_before = stop_color3;
+        stop_color_after = stop_color4;
+        stop_before = stop3;
+        stop_delta = stop4 - stop3;
+    } else if((stop_len < stop5) && (n_stop >= 6)){
+        stop_color_before = stop_color4;
+        stop_color_after = stop_color5;
+        stop_before = stop4;
+        stop_delta = stop5 - stop4;
+    } else if((stop_len < stop6) && (n_stop >= 7)){
+        stop_color_before = stop_color5;
+        stop_color_after = stop_color6;
+        stop_before = stop5;
+        stop_delta = stop6 - stop5;
+    } else if((stop_len < stop7) && (n_stop >= 8)){
+        stop_color_before = stop_color6;
+        stop_color_after = stop_color7;
+        stop_before = stop6;
+        stop_delta = stop7 - stop6;
+    } else {
+        stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);
+        stop_delta = 0.0;
+    }
+    if(stop_delta > 2.0)
+        percentage = 0.0;
+    else if(stop_delta < 0.000001)
+        percentage = 0.0;
+    else
+        percentage = (stop_len - stop_before)/stop_delta;
+    
+    gradient_color = stop_color_before;
+    if(percentage != 0.0)
+        gradient_color += (stop_color_after - gradient_color)*percentage;
+    return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);
+}
+
diff --git a/shaders/glamor/10.shader_test b/shaders/glamor/10.shader_test
new file mode 100644
index 0000000000000000000000000000000000000000..b60cc1d8ff86f02271d327248dba1598e897491a
--- /dev/null
+++ b/shaders/glamor/10.shader_test
@@ -0,0 +1,141 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+attribute vec4 v_position;
+attribute vec4 v_texcoord;
+varying vec2 source_texture;
+
+void main()
+{
+    gl_Position = v_position;
+    source_texture = v_texcoord.xy;
+}
+
+[fragment shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform mat3 transform_mat;
+uniform int repeat_type;
+uniform float A_value;
+uniform vec2 c1;
+uniform float r1;
+uniform vec2 c2;
+uniform float r2;
+varying vec2 source_texture;
+
+vec4 get_color(float stop_len);
+
+int t_invalid;
+
+float get_stop_len()
+{
+    float t = 0.0;
+    float sqrt_value;
+    t_invalid = 0;
+    
+    vec3 tmp = vec3(source_texture.x, source_texture.y, 1.0);
+    vec3 source_texture_trans = transform_mat * tmp;
+    source_texture_trans.xy = source_texture_trans.xy/source_texture_trans.z;
+    float B_value = (source_texture_trans.x - c1.x) * (c2.x - c1.x)
+                     + (source_texture_trans.y - c1.y) * (c2.y - c1.y)
+                     + r1 * (r2 - r1);
+    float C_value = (source_texture_trans.x - c1.x) * (source_texture_trans.x - c1.x)
+                     + (source_texture_trans.y - c1.y) * (source_texture_trans.y - c1.y)
+                     - r1*r1;
+    if(abs(A_value) < 0.00001) {
+        if(B_value == 0.0) {
+            t_invalid = 1;
+            return t;
+        }
+        t = 0.5 * C_value / B_value;    } else {
+        sqrt_value = B_value * B_value - A_value * C_value;
+        if(sqrt_value < 0.0) {
+            t_invalid = 1;
+            return t;
+        }
+        sqrt_value = sqrt(sqrt_value);
+        t = (B_value + sqrt_value) / A_value;
+    }
+    if(repeat_type == 0) {
+        if((t <= 0.0) || (t > 1.0))
+            t = (B_value - sqrt_value) / A_value;
+        
+        if((t <= 0.0) || (t > 1.0)) {
+            t_invalid = 1;
+            return t;
+        }
+    } else {
+        if(t * (r2 - r1) <= -1.0 * r1)
+            t = (B_value - sqrt_value) / A_value;
+        
+        if(t * (r2 -r1) <= -1.0 * r1) {
+            t_invalid = 1;
+            return t;
+        }
+    }
+    
+    if(repeat_type == 1){
+        t = fract(t);
+    }
+    
+    if(repeat_type == 3) {
+        t = abs(fract(t * 0.5 + 0.5) * 2.0 - 1.0);
+    }
+    
+    return t;
+}
+
+void main()
+{
+    float stop_len = get_stop_len();
+    if(t_invalid == 1) {
+        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+    } else {
+        gl_FragColor = get_color(stop_len);
+    }
+}
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform int n_stop;
+uniform float stops[18];
+uniform vec4 stop_colors[18];
+vec4 get_color(float stop_len)
+{
+    int i = 0;
+    vec4 stop_color_before;
+    vec4 gradient_color;
+    float stop_delta;
+    float percentage; 
+    
+    if(stop_len < stops[0])
+        return vec4(0.0, 0.0, 0.0, 0.0); 
+    for(i = 1; i < n_stop; i++) {
+        if(stop_len < stops[i])
+            break; 
+    }
+    if(i == n_stop)
+        return vec4(0.0, 0.0, 0.0, 0.0); 
+    
+    stop_color_before = stop_colors[i-1];
+    stop_delta = stops[i] - stops[i-1];
+    if(stop_delta > 2.0)
+        percentage = 0.0;
+    else if(stop_delta < 0.000001)
+        percentage = 0.0;
+    else 
+        percentage = (stop_len - stops[i-1])/stop_delta;
+    
+    gradient_color = stop_color_before;
+    if(percentage != 0.0)
+        gradient_color += (stop_colors[i] - gradient_color)*percentage;
+    return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);
+}
+
+
diff --git a/shaders/glamor/2.shader_test b/shaders/glamor/2.shader_test
new file mode 100644
index 0000000000000000000000000000000000000000..7ece87398109fa49f0c12f63b15c634a820b707c
--- /dev/null
+++ b/shaders/glamor/2.shader_test
@@ -0,0 +1,188 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+attribute vec4 v_position;
+attribute vec4 v_texcoord;
+varying vec2 source_texture;
+
+void main()
+{
+    gl_Position = v_position;
+    source_texture = v_texcoord.xy;
+}
+
+[fragment shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform mat3 transform_mat;
+uniform int repeat_type;
+uniform float A_value;
+uniform vec2 c1;
+uniform float r1;
+uniform vec2 c2;
+uniform float r2;
+varying vec2 source_texture;
+
+vec4 get_color(float stop_len);
+
+int t_invalid;
+
+float get_stop_len()
+{
+    float t = 0.0;
+    float sqrt_value;
+    t_invalid = 0;
+    
+    vec3 tmp = vec3(source_texture.x, source_texture.y, 1.0);
+    vec3 source_texture_trans = transform_mat * tmp;
+    source_texture_trans.xy = source_texture_trans.xy/source_texture_trans.z;
+    float B_value = (source_texture_trans.x - c1.x) * (c2.x - c1.x)
+                     + (source_texture_trans.y - c1.y) * (c2.y - c1.y)
+                     + r1 * (r2 - r1);
+    float C_value = (source_texture_trans.x - c1.x) * (source_texture_trans.x - c1.x)
+                     + (source_texture_trans.y - c1.y) * (source_texture_trans.y - c1.y)
+                     - r1*r1;
+    if(abs(A_value) < 0.00001) {
+        if(B_value == 0.0) {
+            t_invalid = 1;
+            return t;
+        }
+        t = 0.5 * C_value / B_value;    } else {
+        sqrt_value = B_value * B_value - A_value * C_value;
+        if(sqrt_value < 0.0) {
+            t_invalid = 1;
+            return t;
+        }
+        sqrt_value = sqrt(sqrt_value);
+        t = (B_value + sqrt_value) / A_value;
+    }
+    if(repeat_type == 0) {
+        if((t <= 0.0) || (t > 1.0))
+            t = (B_value - sqrt_value) / A_value;
+        
+        if((t <= 0.0) || (t > 1.0)) {
+            t_invalid = 1;
+            return t;
+        }
+    } else {
+        if(t * (r2 - r1) <= -1.0 * r1)
+            t = (B_value - sqrt_value) / A_value;
+        
+        if(t * (r2 -r1) <= -1.0 * r1) {
+            t_invalid = 1;
+            return t;
+        }
+    }
+    
+    if(repeat_type == 1){
+        t = fract(t);
+    }
+    
+    if(repeat_type == 3) {
+        t = abs(fract(t * 0.5 + 0.5) * 2.0 - 1.0);
+    }
+    
+    return t;
+}
+
+void main()
+{
+    float stop_len = get_stop_len();
+    if(t_invalid == 1) {
+        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+    } else {
+        gl_FragColor = get_color(stop_len);
+    }
+}
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform int n_stop;
+uniform float stop0;
+uniform float stop1;
+uniform float stop2;
+uniform float stop3;
+uniform float stop4;
+uniform float stop5;
+uniform float stop6;
+uniform float stop7;
+uniform vec4 stop_color0;
+uniform vec4 stop_color1;
+uniform vec4 stop_color2;
+uniform vec4 stop_color3;
+uniform vec4 stop_color4;
+uniform vec4 stop_color5;
+uniform vec4 stop_color6;
+uniform vec4 stop_color7;
+
+vec4 get_color(float stop_len)
+{
+    vec4 stop_color_before;
+    vec4 stop_color_after;
+    vec4 gradient_color;
+    float stop_before;
+    float stop_delta;
+    float percentage; 
+    
+    if((stop_len < stop0) && (n_stop >= 1)) {
+        stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);
+        stop_delta = 0.0;
+    } else if((stop_len < stop1) && (n_stop >= 2)) {
+        stop_color_before = stop_color0;
+        stop_color_after = stop_color1;
+        stop_before = stop0;
+        stop_delta = stop1 - stop0;
+    } else if((stop_len < stop2) && (n_stop >= 3)) {
+        stop_color_before = stop_color1;
+        stop_color_after = stop_color2;
+        stop_before = stop1;
+        stop_delta = stop2 - stop1;
+    } else if((stop_len < stop3) && (n_stop >= 4)){
+        stop_color_before = stop_color2;
+        stop_color_after = stop_color3;
+        stop_before = stop2;
+        stop_delta = stop3 - stop2;
+    } else if((stop_len < stop4) && (n_stop >= 5)){
+        stop_color_before = stop_color3;
+        stop_color_after = stop_color4;
+        stop_before = stop3;
+        stop_delta = stop4 - stop3;
+    } else if((stop_len < stop5) && (n_stop >= 6)){
+        stop_color_before = stop_color4;
+        stop_color_after = stop_color5;
+        stop_before = stop4;
+        stop_delta = stop5 - stop4;
+    } else if((stop_len < stop6) && (n_stop >= 7)){
+        stop_color_before = stop_color5;
+        stop_color_after = stop_color6;
+        stop_before = stop5;
+        stop_delta = stop6 - stop5;
+    } else if((stop_len < stop7) && (n_stop >= 8)){
+        stop_color_before = stop_color6;
+        stop_color_after = stop_color7;
+        stop_before = stop6;
+        stop_delta = stop7 - stop6;
+    } else {
+        stop_color_before = vec4(0.0, 0.0, 0.0, 0.0);
+        stop_delta = 0.0;
+    }
+    if(stop_delta > 2.0)
+        percentage = 0.0;
+    else if(stop_delta < 0.000001)
+        percentage = 0.0;
+    else
+        percentage = (stop_len - stop_before)/stop_delta;
+    
+    gradient_color = stop_color_before;
+    if(percentage != 0.0)
+        gradient_color += (stop_color_after - gradient_color)*percentage;
+    return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);
+}
+
+
diff --git a/shaders/glamor/4.shader_test b/shaders/glamor/4.shader_test
new file mode 100644
index 0000000000000000000000000000000000000000..a48253ce635bdef02d7a9e3f241b1be84d160b50
--- /dev/null
+++ b/shaders/glamor/4.shader_test
@@ -0,0 +1,110 @@
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+attribute vec4 v_position;
+attribute vec4 v_texcoord;
+varying vec2 source_texture;
+
+void main()
+{
+    gl_Position = v_position;
+    source_texture = v_texcoord.xy;
+}
+
+[fragment shader]
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform mat3 transform_mat;
+uniform int repeat_type;
+uniform int hor_ver;
+uniform float pt_slope;
+uniform float cos_val;
+uniform float p1_distance;
+uniform float pt_distance;
+varying vec2 source_texture;
+
+vec4 get_color(float stop_len);
+
+float get_stop_len()
+{
+    vec3 tmp = vec3(source_texture.x, source_texture.y, 1.0);
+    float distance;
+    float _p1_distance;
+    float _pt_distance;
+    float y_dist;
+    vec3 source_texture_trans = transform_mat * tmp;
+    
+    if(hor_ver == 0) { 
+        y_dist = source_texture_trans.y - source_texture_trans.x*pt_slope;
+        distance = y_dist * cos_val;
+        _p1_distance = p1_distance * source_texture_trans.z;
+        _pt_distance = pt_distance * source_texture_trans.z;
+        
+    } else if (hor_ver == 1) {
+        distance = source_texture_trans.x;
+        _p1_distance = p1_distance * source_texture_trans.z;
+        _pt_distance = pt_distance * source_texture_trans.z;
+    } 
+    
+    distance = (distance - _p1_distance) / _pt_distance;
+    
+    if(repeat_type == 1){
+        distance = fract(distance);
+    }
+    
+    if(repeat_type == 3) {
+        distance = abs(fract(distance * 0.5 + 0.5) * 2.0 - 1.0);
+    }
+    
+    return distance;
+}
+
+void main()
+{
+    float stop_len = get_stop_len();
+    gl_FragColor = get_color(stop_len);
+}
+
+#ifdef GL_ES
+precision mediump float;
+#endif
+uniform int n_stop;
+uniform float stops[18];
+uniform vec4 stop_colors[18];
+vec4 get_color(float stop_len)
+{
+    int i = 0;
+    vec4 stop_color_before;
+    vec4 gradient_color;
+    float stop_delta;
+    float percentage; 
+    
+    if(stop_len < stops[0])
+        return vec4(0.0, 0.0, 0.0, 0.0); 
+    for(i = 1; i < n_stop; i++) {
+        if(stop_len < stops[i])
+            break; 
+    }
+    if(i == n_stop)
+        return vec4(0.0, 0.0, 0.0, 0.0); 
+    
+    stop_color_before = stop_colors[i-1];
+    stop_delta = stops[i] - stops[i-1];
+    if(stop_delta > 2.0)
+        percentage = 0.0;
+    else if(stop_delta < 0.000001)
+        percentage = 0.0;
+    else 
+        percentage = (stop_len - stops[i-1])/stop_delta;
+    
+    gradient_color = stop_color_before;
+    if(percentage != 0.0)
+        gradient_color += (stop_colors[i] - gradient_color)*percentage;
+    return vec4(gradient_color.rgb * gradient_color.a, gradient_color.a);
+}
+