duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

Cccalibrator.glsl (3098B)


      1 /*==========================================*/
      2 /*=======Calibrator by PavelDurov1488=======*/
      3 /*==========It's not ready yet...===========*/
      4 /*===I need to add blur, dynamic noise...===*/
      5 
      6 /*
      7 [configuration]
      8 
      9 
     10 [OptionRangeFloat]
     11 GUIName = Luminance(Y)
     12 OptionName = LUMINANCE
     13 MinValue = 0.000
     14 MaxValue = 3.000
     15 StepAmount = 0.050
     16 DefaultValue = 1.200
     17 
     18 [OptionRangeFloat]
     19 GUIName = Orange-Cyan(I)
     20 OptionName = ORANGECYAN
     21 MinValue = 0.000
     22 MaxValue = 3.000
     23 StepAmount = 0.050
     24 DefaultValue = 1.200
     25 
     26 [OptionRangeFloat]
     27 GUIName = Magenta-Green(Q)
     28 OptionName = MAGENTAGREEN
     29 MinValue = 0.000
     30 MaxValue = 3.000
     31 StepAmount = 0.050
     32 DefaultValue = 1.200
     33 
     34 [OptionRangeFloat]
     35 GUIName = Black
     36 OptionName = BLACK
     37 MinValue = 0.000
     38 MaxValue = 255.000
     39 StepAmount = 1.000
     40 DefaultValue = 10.000
     41 
     42 [OptionRangeFloat]
     43 GUIName = White
     44 OptionName = WHITE
     45 MinValue = 0.000
     46 MaxValue = 255.000
     47 StepAmount = 1.000
     48 DefaultValue = 240.000
     49 
     50 [OptionRangeFloat]
     51 GUIName = Noise
     52 OptionName = NOISE
     53 MinValue = 0.000
     54 MaxValue = 50.000
     55 StepAmount = 1.000
     56 DefaultValue = 10.000
     57 
     58 [OptionRangeFloat]
     59 GUIName = Saturation
     60 OptionName = SATURATION
     61 MinValue = 0.000
     62 MaxValue = 100.000
     63 StepAmount = 1.000
     64 DefaultValue = 50.000
     65 
     66 [/configuration]
     67 */
     68 
     69 float pseudoNoise(vec2 co)
     70 {
     71 return fract(sin(dot(vec2(co.x+0.513,co.y+0.4124) ,vec2(12.9898,78.233))) * 43758.5453);// *fract(sin(dot(vec2(co.x+4.231,co.y+3.143) ,vec2(12.9898,78.233)*2.0)) * 43758.5453); //pseudo random number generator
     72 }
     73 
     74 CONSTANT vec3 RGBtoY = vec3(0.299, 0.587, 0.114);
     75 CONSTANT vec3 RGBtoI = vec3(0.596,-0.275,-0.321);
     76 CONSTANT vec3 RGBtoQ = vec3(0.212,-0.523, 0.311);
     77 CONSTANT vec3 YIQtoR = vec3(1.0, 0.95568806036115671171, 0.61985809445637075388);
     78 CONSTANT vec3 YIQtoG = vec3(1.0,-0.27158179694405859326,-0.64687381613840131330);
     79 CONSTANT vec3 YIQtoB = vec3(1.0,-1.10817732668266195230, 1.70506455991918171490);  
     80 
     81 void main()
     82 {
     83 
     84   
     85   float2 texcoord = GetCoordinates();
     86   float2 time = float2(GetTime(), GetTime());
     87 //  int FrameCount = GetFrameCount();
     88   float4 color = Sample();
     89 //  float brightness_scale = GetOption(BRIGHTNESS_SCALE);
     90 
     91 //vec3 czm_saturation(vec3 rgb, float adjustment)
     92 //{
     93 //    // Algorithm from Chapter 16 of OpenGL Shading Language
     94 //    const vec3 W = vec3(0.2125, 0.7154, 0.0721);
     95 //    vec3 intensity = vec3(dot(rgb, W));
     96 //    return mix(intensity, rgb, adjustment);
     97 //}
     98 
     99   // rgb->yiq
    100   float3 yuv;
    101   yuv.r = pow(dot(color.rgb, float3(0.299, 0.587, 0.114)),LUMINANCE);
    102   yuv.g = dot(color.rgb, float3(0.595716,-0.274453,-0.321263))*ORANGECYAN;
    103   yuv.b = dot(color.rgb, float3(0.211456,-0.522591, 0.311135))*MAGENTAGREEN;
    104 
    105   // apply brightness to y
    106 //  yuv.r = saturate(yuv.r * brightness_scale);
    107 
    108   // yuv->rgb
    109   color.r = dot(yuv, float3(1.0, 0.95629572, 0.62102442));
    110   color.g = dot(yuv, float3(1.0,-0.27212210,-0.64738060));
    111   color.b = dot(yuv, float3(1.0,-1.10698902, 1.70461500));
    112   color.rgb = saturate(color.rgb*WHITE/255.0+BLACK/255.0-color.rgb*BLACK/255.0+(pseudoNoise(texcoord))*1.0/255.0);
    113   
    114   color.rgb = saturate(color.rgb+(pseudoNoise(vec2(color.r+color.b,color.g+color.b))-0.5)*NOISE/255.0);
    115   SetOutput(saturate(color));
    116 }