Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #version 450
- // Modular Image Adjustment
- // Author: hunterk
- // License: Public domain
- layout(push_constant) uniform Push
- {
- vec4 SourceSize;
- uint FrameCount;
- vec4 OutputSize;
- } registers;
- layout(std140, set = 0, binding = 0) uniform UBO
- {
- mat4 MVP;
- #include "../include/img/param_floats.h"
- } global;
- #include "../include/img/helper_macros.h"
- /////////////////////////////// INCLUDES ////////////////////////////////
- // comment the #include and corresponding line to remove functionality //
- /////////////////////////////////////////////////////////////////////////
- // Flip image vertically or horizontally
- // #include "../include/img/image_flip.h"
- // Stretching, Zooming, Panning
- // #include "../include/img/stretch_zoom_pan.h"
- // Film grain effect
- #include "../include/img/film_grain.h"
- // Sharp, antialiased pixels; use with linear filtering
- // #include "../include/img/sharpening.h"
- // Saturation and Luminance
- //#include "../include/img/sat_lum.h"
- // #include "../include/img/lum_chrom.h"
- // Gamma correction
- // exp_gamma is basic pow function
- //#include "../include/img/exp_gamma.h"
- // #include "../include/img/gamma_srgb.h"
- // Mask edges to hide unsightly garbage
- #include "../include/img/border_mask.h"
- // Change the whitepoint to warmer/cooler
- // #include "../include/img/white_point.h"
- // Add a phosphor mask effect onto the image
- // #include "../include/img/subpx_masks.h"
- // Force integer scaling and custom aspect ratio
- #include "../include/img/int_ar.h"
- // Vignette; Darkens image around edges
- //#include "../include/img/vignette.h"
- // Black level
- // uncomment only one of the next 2 lines to set black level method
- //#include "../include/img/black_lvl.h"
- // #include "../include/img/black_lvl_dogway.h"
- // Brightness and Contrast control
- // uncomment only one of the next 2 lines to set contract complexity;
- // sigmoidal_con is advanced, bright_con is basic
- // #include "../include/img/sigmoidal_con.h"
- //#include "../include/img/bright_con.h"
- // Adjust color balance and tint
- // uncomment only one of the next 2 lines to set color channel complexity;
- // color mangler is advanced, channel mixer is basic
- //#include "../include/img/col_mangler.h"
- // #include "../include/img/channel_mix.h"
- // 2D screen curvature
- //#include "../include/img/gristle_warp.h"
- //#include "../include/img/lottes_warp.h"
- // #include "../include/img/cgwg_warp.h"
- // Rounded corners
- #include "../include/img/corner.h"
- ////////////////////////////// END INCLUDES //////////////////////////////
- #pragma stage vertex
- layout(location = 0) in vec4 Position;
- layout(location = 1) in vec2 TexCoord;
- layout(location = 0) out vec2 vTexCoord;
- void main()
- {
- vec4 pos = Position;
- // apply axis flip
- pos = flip_pos(pos);
- gl_Position = global.MVP * pos;
- vec2 coord = TexCoord.st;
- // apply crop/zoom/pan
- coord = crop_zoom_pan(TexCoord);
- // apply integer scaling and aspect ratio
- // coord = int_ar(coord, registers.SourceSize, registers.OutputSize);
- vTexCoord = coord;
- }
- #pragma stage fragment
- layout(location = 0) in vec2 vTexCoord;
- layout(location = 0) out vec4 FragColor;
- layout(set = 0, binding = 2) uniform sampler2D Source;
- //////////////////////////////// LUTS ///////////////////////////////////
- // Use either 1 or 2 color-grading LUTs
- // uncomment only one of the next 2 lines
- //#include "../include/img/lut1.h"
- //#include "../include/img/lut2.h"
- ////////////////////////////// END LUTS /////////////////////////////////
- void main()
- {
- // declare texture coordinates
- vec2 coord = vTexCoord.xy;
- // apply sharpening to coords
- // coord = sharp(vTexCoord, registers.SourceSize);
- // apply screen curvature
- // coord = warp(coord);
- // sample the texture
- vec3 res = texture(Source, coord).rgb;
- // apply grain (expects to run in gamma space)
- // res = luma_grain(res, vTexCoord.xy, ia_GRAIN_STR, registers.FrameCount);
- res = rgb_grain(res, vTexCoord.xy, ia_GRAIN_STR, registers.FrameCount);
- // saturation and luminance (expects to run in gamma space)
- // res = sat_lum(res);
- // contrast
- // res = cntrst(res);
- // apply first gamma transform (linearize)
- // (whether LUT or gamma should come first depends on LUT)
- // res = gamma_in(res);
- // apply LUT1
- // res = lut1(res);
- // apply white point adjustment
- // res = white_point(res);
- // black level
- // res = black_level(res);
- // channel mix
- // res = channel_mix(res);
- // overscan mask
- res = border_mask(res, coord.xy);
- // apply LUT2 (whether LUT or gamma should come first depends on LUT)
- // res = lut2(res);
- // apply gamma curve
- // res = gamma_out(res);
- // apply mask effect
- // res *= mask_weights(gl_FragCoord.xy, mask_strength, mask);
- // apply vignette effect
- // res = vignette(res, vTexCoord.xy);
- // apply rounded corners
- res *= corner(coord);
- FragColor = vec4(res, 1.0);
- }
Advertisement
Add Comment
Please, Sign In to add comment