shader.glsl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //shared data between vs/ps
  2. varying lowp vec4 result_color;
  3. varying mediump vec2 result_uv;
  4. varying mediump vec2 result_uv2;
  5. #ifdef VS
  6. uniform highp mat4 mat;
  7. uniform mediump vec3 msk[4];
  8. attribute vec3 position;
  9. attribute vec4 color;
  10. attribute vec2 uv;
  11. attribute vec2 uv2;
  12. void program_main_vs()
  13. {
  14. gl_Position = mat * vec4(position, 1.0);
  15. result_color = color;
  16. result_uv = uv;
  17. #ifdef MASK
  18. mediump float a = dot(msk[0], vec3(1.0, position.x, position.y));
  19. mediump float b = dot(msk[1], vec3(1.0, position.x, position.y));
  20. result_uv2.x = dot(msk[2], vec3(1.0, a, b));
  21. result_uv2.y = dot(msk[3], vec3(1.0, a, b));
  22. #endif
  23. }
  24. #endif
  25. #ifdef PS
  26. uniform lowp vec4 clip_mask;
  27. uniform lowp vec4 add_color;
  28. uniform lowp sampler2D base_texture;
  29. uniform lowp sampler2D mask_texture;
  30. uniform lowp sampler2D alpha_texture;
  31. lowp vec4 modify_base_pre(lowp vec4);
  32. lowp vec4 modify_base(lowp vec4);
  33. lowp vec4 replaced_get_base();
  34. lowp vec4 replaced_get_color();
  35. lowp vec4 get_base()
  36. {
  37. lowp vec4 base = texture2D(base_texture, result_uv);
  38. #ifdef SEPARATE_ALPHA
  39. base.a = texture2D(alpha_texture, result_uv).r;
  40. #endif
  41. #ifdef MODIFY_BASE_PRE
  42. //define MODIFY_BASE_PRE and declare your own function modify_base_pre
  43. base = modify_base_pre(base);
  44. #endif
  45. #ifdef ALPHA_PREMULTIPLY
  46. base.rgb = base.rgb * base.a;
  47. #endif
  48. #ifdef MODIFY_BASE
  49. //define MODIFY_BASE and declare your own function modify_base
  50. base = modify_base(base);
  51. #endif
  52. return base;
  53. }
  54. lowp vec2 my_step(lowp vec2 a, lowp vec2 b)
  55. {
  56. #ifdef ANDROID
  57. lowp vec2 r;
  58. r.x = a.x < b.x ? 1.0 : 0.0;
  59. r.y = a.y < b.y ? 1.0 : 0.0;
  60. return r;
  61. #else
  62. return step(a, b);
  63. #endif
  64. }
  65. lowp vec4 get_color()
  66. {
  67. #ifdef REPLACED_GET_BASE
  68. //define REPLACED_GET_BASE and declare your own function replaced_get_base()
  69. lowp vec4 base = replaced_get_base();
  70. #else
  71. lowp vec4 base = get_base();
  72. #endif
  73. #ifdef MASK
  74. //mediump vec2 uv2 = clamp(result_uv2, clip_mask.xy, clip_mask.zw);
  75. lowp vec4 mask = texture2D(mask_texture, result_uv2);
  76. #ifdef MASK_R_CHANNEL
  77. lowp float mask_alpha = mask.r + 0.001;
  78. #else
  79. lowp float mask_alpha = mask.a + 0.001;
  80. #endif
  81. lowp vec2 sc1 = my_step(clip_mask.xy, result_uv2.xy);
  82. lowp vec2 sc2 = my_step(result_uv2.xy, clip_mask.zw);
  83. lowp float m = mask_alpha * sc1.x * sc1.y * sc2.x * sc2.y;
  84. base = base * m;
  85. #endif
  86. #ifdef DONT_MULT_BY_RESULT_COLOR
  87. //for your purposes
  88. lowp vec4 res = base;
  89. #else
  90. lowp vec4 res = base * result_color;
  91. #endif
  92. #ifdef ADD_COLOR
  93. res = res + add_color * res.a;
  94. #endif
  95. return res;
  96. }
  97. void program_main_ps()
  98. {
  99. #ifdef REPLACED_GET_COLOR
  100. //define REPLACED_GET_COLOR and declare your own function replaced_get_color()
  101. gl_FragColor = replaced_get_color();
  102. #else
  103. gl_FragColor = get_color();
  104. #endif
  105. }
  106. #endif