#include "ReShade.fxh" /////////////////////////////////////////////////////////////////////////// // // // Copyright (C) 2017 - Brad Parker // // // // This program is free software: you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // // the Free Software Foundation, either version 3 of the License, or // // (at your option) any later version. // // // // This program is distributed in the hope that it will be useful, // // but WITHOUT ANY WARRANTY; without even the implied warranty of // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // // GNU General Public License for more details. // // // // You should have received a copy of the GNU General Public License // // along with this program. If not, see . // // // /////////////////////////////////////////////////////////////////////////// uniform float texture_sizeX < ui_type = "drag"; ui_min = 1.0; ui_max = BUFFER_WIDTH; ui_label = "Screen Width [CRT-Potato]"; ui_step = 1.0; > = 320.0; uniform float texture_sizeY < ui_type = "drag"; ui_min = 1.0; ui_max = BUFFER_HEIGHT; ui_label = "Screen Height [CRT-Potato]"; ui_step = 1.0; > = 240.0; //Stuff #define texture_size float2(texture_sizeX, texture_sizeY) texture tMaskThin { Width=2; Height=5;}; sampler sMaskThin { Texture = tMaskThin; MinFilter = POINT; MagFilter = POINT; AddressU = REPEAT; AddressV = REPEAT; AddressW = REPEAT; }; float4 PS_CRTPotatoCool(float4 pos : SV_Position, float2 uv : TEXCOORD0) : SV_Target { float2 tiles_per_screen = texture_size / tex2Dsize(sMaskThin); float2 mask_coord = frac(uv * tiles_per_screen); float3 base_col = tex2D(ReShade::BackBuffer, uv).rgb; float3 mask_col = tex2D(sMaskThin, mask_coord).rgb; return float4(mask_col * base_col, 1.0); } technique CRTPotatoCool { pass CRTPotatoCool { VertexShader=PostProcessVS; PixelShader=PS_CRTPotatoCool; } }