Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Parameter lines go here:
- #pragma parameter LUT_Size "LUT Size" 16.0 1.0 64.0 1.0
- #if defined(VERTEX)
- #if __VERSION__ >= 130
- #define COMPAT_VARYING out
- #define COMPAT_ATTRIBUTE in
- #define COMPAT_TEXTURE texture
- #else
- #define COMPAT_VARYING varying
- #define COMPAT_ATTRIBUTE attribute
- #define COMPAT_TEXTURE texture2D
- #endif
- #ifdef GL_ES
- #define COMPAT_PRECISION mediump
- #else
- #define COMPAT_PRECISION
- #endif
- COMPAT_ATTRIBUTE vec4 VertexCoord;
- COMPAT_ATTRIBUTE vec4 COLOR;
- COMPAT_ATTRIBUTE vec4 TexCoord;
- COMPAT_VARYING vec4 COL0;
- COMPAT_VARYING vec4 TEX0;
- vec4 _oPosition1;
- uniform mat4 MVPMatrix;
- uniform COMPAT_PRECISION int FrameDirection;
- uniform COMPAT_PRECISION int FrameCount;
- uniform COMPAT_PRECISION vec2 OutputSize;
- uniform COMPAT_PRECISION vec2 TextureSize;
- uniform COMPAT_PRECISION vec2 InputSize;
- // compatibility #defines
- #define vTexCoord TEX0.xy
- #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
- #define OutSize vec4(OutputSize, 1.0 / OutputSize)
- void main()
- {
- gl_Position = MVPMatrix * VertexCoord;
- TEX0.xy = TexCoord.xy;
- }
- #elif defined(FRAGMENT)
- #if __VERSION__ >= 130
- #define COMPAT_VARYING in
- #define COMPAT_TEXTURE texture
- out vec4 FragColor;
- #else
- #define COMPAT_VARYING varying
- #define FragColor gl_FragColor
- #define COMPAT_TEXTURE texture2D
- #endif
- #ifdef GL_ES
- #ifdef GL_FRAGMENT_PRECISION_HIGH
- precision highp float;
- #else
- precision mediump float;
- #endif
- #define COMPAT_PRECISION mediump
- #else
- #define COMPAT_PRECISION
- #endif
- uniform COMPAT_PRECISION int FrameDirection;
- uniform COMPAT_PRECISION int FrameCount;
- uniform COMPAT_PRECISION vec2 OutputSize;
- uniform COMPAT_PRECISION vec2 TextureSize;
- uniform COMPAT_PRECISION vec2 InputSize;
- uniform sampler2D Texture;
- uniform sampler2D SamplerLUT;
- COMPAT_VARYING vec4 TEX0;
- // compatibility #defines
- #define Source Texture
- #define vTexCoord TEX0.xy
- #define texture(c, d) COMPAT_TEXTURE(c, d)
- #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
- #define OutSize vec4(OutputSize, 1.0 / OutputSize)
- #ifdef PARAMETER_UNIFORM
- uniform COMPAT_PRECISION float LUT_Size;
- #else
- #define LUT_Size 16.0
- #endif
- // This shouldn't be necessary but it seems
- vec4 mixfix(vec4 a, vec4 b, float c)
- {
- return (c > 0.0 && a.y < 1.0) ? mix(a, b, c) : a;
- }
- void main()
- {
- vec4 imgColor = texture(Source, vTexCoord.xy);
- float red = ( imgColor.r * (LUT_Size - 1.0) + 0.4999 ) / (LUT_Size * LUT_Size);
- float green = ( imgColor.g * (LUT_Size - 1.0) + 0.4999 ) / LUT_Size;
- float blue1 = (floor(imgColor.b * (LUT_Size - 1.0)) / LUT_Size) + red;
- float blue2 = (ceil(imgColor.b * (LUT_Size - 1.0)) / LUT_Size) + red;
- float mixer = (imgColor.b - blue1) / (blue2 - blue1);
- vec4 color1 = texture( SamplerLUT, vec2( blue1, green ));
- vec4 color2 = texture( SamplerLUT, vec2( blue2, green ));
- FragColor = mixfix(color1, color2, mixer);
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement