Advertisement
ginkage

Concave Shader

Nov 30th, 2015
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.07 KB | None | 0 0
  1.     private final String quadVS =
  2.         "precision mediump float;\n" +
  3.         "attribute vec4 vPosition;\n" +
  4.         "uniform vec4 uRatio;\n" +
  5.         "varying vec4 Position;\n" +
  6.  
  7.         "void main() {\n" +
  8.         "   gl_Position = vPosition;\n" +
  9.         "   Position = vPosition / uRatio;\n" +
  10.         "}\n";
  11.  
  12.     private final String quadFS =
  13.         "#extension GL_OES_EGL_image_external : require\n" +
  14.         "precision mediump float;\n" +
  15.         "uniform samplerExternalOES uTexture0;\n" +
  16.         "uniform sampler2D uTexture1;\n" +
  17.         "uniform sampler2D uTexture2;\n" +
  18.         "uniform vec3 uRotate;\n" +
  19.         "varying vec4 Position;\n" +
  20.  
  21.         "void main() {\n" +
  22.         "   float sx = Position.x;\n" +
  23.         "   float sy = -Position.y;\n" +
  24.         "   float sz = sqrt(1.0 + sx * sx + sy * sy);\n" +
  25.  
  26.         "   float rx = sx / sz;\n" +
  27.         "   float ry = sy / sz;\n" +
  28.         "   float rz = sqrt(1.0 - rx * rx - ry * ry);\n" +
  29.  
  30.         "   float tx = (1.0 + rx) * 0.5;\n" +
  31.         "   float y = (rz * uRotate.y - ry * uRotate.z);\n" +
  32.         "   float z = (ry * uRotate.y + rz * uRotate.z);\n" +
  33.  
  34.         "   vec2 vCoord;\n" +
  35.         "   if (abs(z) > abs(y)) {\n" +
  36.         "       vec4 vTex = texture2D(uTexture1, vec2(tx, (1.0 - y) * 0.5));\n" +
  37.         "       vec4 vOff = floor(vTex * 255.0 + 0.5);\n" +
  38.         "       vCoord = vec2(\n" +
  39.         "           (vOff.y * 256.0 + vOff.x) / 4095.0,\n" +
  40.         "           (vOff.w * 256.0 + vOff.z) / 4095.0);\n" +
  41.         "       if (z < 0.0) { vCoord.x = 1.0 - vCoord.x; }\n" +
  42.         "   }\n" +
  43.         "   else {\n" +
  44.         "       vec4 vTex = texture2D(uTexture2, vec2(tx, (1.0 + z) * 0.5));\n" +
  45.         "       vec4 vOff = floor(vTex * 255.0 + 0.5);\n" +
  46.         "       vCoord = vec2(\n" +
  47.         "           (vOff.y * 256.0 + vOff.x) / 4095.0,\n" +
  48.         "           (vOff.w * 256.0 + vOff.z) / 4095.0);\n" +
  49.         "       if (y < 0.0) { vCoord.y = 1.0 - vCoord.y; }\n" +
  50.         "   }\n" +
  51.  
  52.         "   vCoord.x += uRotate.x;\n" +
  53.         "   if (vCoord.x >= 1.0) { vCoord.x -= 1.0; }\n" +
  54.         "   gl_FragColor = texture2D(uTexture0, vCoord);\n" +
  55.         "}\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement