Advertisement
Guest User

bilinear3x.glsl

a guest
Mar 19th, 2018
418
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define SCALE 3.0
  2.  
  3. #if defined(VERTEX)
  4.  
  5. #if __VERSION__ >= 130
  6. #define COMPAT_VARYING out
  7. #define COMPAT_ATTRIBUTE in
  8. #define COMPAT_TEXTURE texture
  9. #else
  10. #define COMPAT_VARYING varying
  11. #define COMPAT_ATTRIBUTE attribute
  12. #define COMPAT_TEXTURE texture2D
  13. #endif
  14.  
  15. #ifdef GL_ES
  16. #define COMPAT_PRECISION mediump
  17. #else
  18. #define COMPAT_PRECISION
  19. #endif
  20.  
  21. COMPAT_ATTRIBUTE vec4 VertexCoord;
  22. COMPAT_ATTRIBUTE vec4 COLOR;
  23. COMPAT_ATTRIBUTE vec4 TexCoord;
  24. COMPAT_VARYING vec4 COL0;
  25. COMPAT_VARYING vec4 TEX0;
  26.  
  27. uniform mat4 MVPMatrix;
  28. uniform COMPAT_PRECISION int FrameDirection;
  29. uniform COMPAT_PRECISION int FrameCount;
  30. uniform COMPAT_PRECISION vec2 OutputSize;
  31. uniform COMPAT_PRECISION vec2 TextureSize;
  32. uniform COMPAT_PRECISION vec2 InputSize;
  33.  
  34. // vertex compatibility #defines
  35. #define vTexCoord TEX0.xy
  36. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  37. #define outsize vec4(OutputSize, 1.0 / OutputSize)
  38.  
  39. void main()
  40. {
  41.     gl_Position = MVPMatrix * VertexCoord;
  42.     COL0 = COLOR;
  43.     TEX0.xy = TexCoord.xy;
  44. }
  45.  
  46. #elif defined(FRAGMENT)
  47.  
  48. #if __VERSION__ >= 130
  49. #define COMPAT_VARYING in
  50. #define COMPAT_TEXTURE texture
  51. out vec4 FragColor;
  52. #else
  53. #define COMPAT_VARYING varying
  54. #define FragColor gl_FragColor
  55. #define COMPAT_TEXTURE texture2D
  56. #endif
  57.  
  58. #ifdef GL_ES
  59. #ifdef GL_FRAGMENT_PRECISION_HIGH
  60. precision highp float;
  61. #else
  62. precision mediump float;
  63. #endif
  64. #define COMPAT_PRECISION mediump
  65. #else
  66. #define COMPAT_PRECISION
  67. #endif
  68.  
  69. uniform COMPAT_PRECISION int FrameDirection;
  70. uniform COMPAT_PRECISION int FrameCount;
  71. uniform COMPAT_PRECISION vec2 OutputSize;
  72. uniform COMPAT_PRECISION vec2 TextureSize;
  73. uniform COMPAT_PRECISION vec2 InputSize;
  74. uniform sampler2D Texture;
  75. COMPAT_VARYING vec4 TEX0;
  76.  
  77. // fragment compatibility #defines
  78. #define Source Texture
  79. #define vTexCoord TEX0.xy
  80.  
  81. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  82. #define outsize vec4(OutputSize, 1.0 / OutputSize)
  83.  
  84. void main()
  85. {
  86.    float isMainScreen = 1.0 - max(sign(vTexCoord.x * TextureSize.x - 256.0 * SCALE), 0.0);
  87.    float scale = 1.0 + (isMainScreen * (SCALE - 1.0));
  88.  
  89.    vec2 fakeTextureSize = TextureSize / scale;
  90.    vec2 texelSize = 1.0 / fakeTextureSize;
  91.  
  92.    float top    = texelSize.y * 0.5;
  93.    float bottom = 1.0 - texelSize.y * 0.5;
  94.    
  95.    float left   = (texelSize.x * 0.5) * isMainScreen
  96.                 + ((256.0 * scale / TextureSize.x) + texelSize.x * 0.5) * (1.0 - isMainScreen);
  97.    float right  = ((256.0 * scale / TextureSize.x) - texelSize.x * 0.5) * isMainScreen
  98.                 + (1.0 - texelSize.x * 0.5) * (1.0 - isMainScreen);
  99.  
  100.    vec2 tl = vec2(vTexCoord - texelSize * 0.5);
  101.    tl = clamp(tl, vec2(left, top), vec2(right, bottom));
  102.    vec4 coltl = COMPAT_TEXTURE(Source, tl);
  103.  
  104.    vec2 tr = vTexCoord + vec2(texelSize.x * 0.5, texelSize.y * -0.5);
  105.    tr = clamp(tr, vec2(left, top), vec2(right, bottom));
  106.    vec4 coltr = COMPAT_TEXTURE(Source, tr);
  107.  
  108.    vec2 bl = vTexCoord + vec2(texelSize.x * -0.5, texelSize.y * 0.5);
  109.    bl = clamp(bl, vec2(left, top), vec2(right, bottom));
  110.    vec4 colbl = COMPAT_TEXTURE(Source, bl);
  111.  
  112.    vec2 br = vTexCoord + texelSize * 0.5;
  113.    br = clamp(br, vec2(left, top), vec2(right, bottom));
  114.    vec4 colbr = COMPAT_TEXTURE(Source, br);
  115.  
  116.    vec2 f = fract((vTexCoord - texelSize * 0.5) * fakeTextureSize);
  117.    vec4 tA = mix(coltl, coltr, f.x);
  118.    vec4 tB = mix(colbl, colbr, f.x);
  119.    FragColor = mix(tA, tB, f.y);
  120. }
  121. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement