postfx: eliminat l'uniform oversample i vestigis de supersampling/Lanczos mai implementats
This commit is contained in:
1 parent
c9e6261cf1
commit
984cc820c0
5 files changed
+2006
-2063
No files matched your search
@@ -26,8 +26,8 @@ layout(set = 3, binding = 0) uniform PostFXUniforms {
|
|||||||
float bleeding;
|
float bleeding;
|
||||||
float pixel_scale; // physical pixels per logical pixel (vh / tex_height_)
|
float pixel_scale; // physical pixels per logical pixel (vh / tex_height_)
|
||||||
float time; // seconds since SDL init
|
float time; // seconds since SDL init
|
||||||
float oversample; // supersampling factor (1.0 = off, 3.0 = 3×SS)
|
|
||||||
float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz
|
float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz
|
||||||
|
float pad2; // padding per tancar vec4 #2
|
||||||
// vec4 #3 — paràmetres de scanlines (exposats per preset YAML)
|
// vec4 #3 — paràmetres de scanlines (exposats per preset YAML)
|
||||||
float scan_dark_ratio; // fracció de subfila fosca per fila lògica (1/3 ≈ 0.333)
|
float scan_dark_ratio; // fracció de subfila fosca per fila lògica (1/3 ≈ 0.333)
|
||||||
float scan_dark_floor; // multiplicador de brillantor de la subfila fosca
|
float scan_dark_floor; // multiplicador de brillantor de la subfila fosca
|
||||||
@@ -76,11 +76,11 @@ void main() {
|
|||||||
vec3 base = texture(scene, uv).rgb;
|
vec3 base = texture(scene, uv).rgb;
|
||||||
|
|
||||||
// Sangrado NTSC — difuminado horizontal de crominancia.
|
// Sangrado NTSC — difuminado horizontal de crominancia.
|
||||||
// step = 1 pixel lógico de juego en UV (corrige SS: textureSize.x = game_w * oversample).
|
// step = 1 pixel lógico de juego en UV.
|
||||||
vec3 colour;
|
vec3 colour;
|
||||||
if (u.bleeding > 0.0) {
|
if (u.bleeding > 0.0) {
|
||||||
float tw = float(textureSize(scene, 0).x);
|
float tw = float(textureSize(scene, 0).x);
|
||||||
float step = u.oversample / tw; // 1 pixel lógico en UV
|
float step = 1.0 / tw; // 1 pixel lógico en UV
|
||||||
vec3 ycc = rgb_to_ycc(base);
|
vec3 ycc = rgb_to_ycc(base);
|
||||||
vec3 ycc_l2 = rgb_to_ycc(texture(scene, uv - vec2(2.0*step, 0.0)).rgb);
|
vec3 ycc_l2 = rgb_to_ycc(texture(scene, uv - vec2(2.0*step, 0.0)).rgb);
|
||||||
vec3 ycc_l1 = rgb_to_ycc(texture(scene, uv - vec2(1.0*step, 0.0)).rgb);
|
vec3 ycc_l1 = rgb_to_ycc(texture(scene, uv - vec2(1.0*step, 0.0)).rgb);
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ struct PostFXUniforms {
|
|||||||
float bleeding;
|
float bleeding;
|
||||||
float pixel_scale;
|
float pixel_scale;
|
||||||
float time;
|
float time;
|
||||||
float oversample;
|
|
||||||
float flicker;
|
float flicker;
|
||||||
|
float pad2;
|
||||||
// vec4 #3 — paràmetres de scanlines (exposats per preset YAML)
|
// vec4 #3 — paràmetres de scanlines (exposats per preset YAML)
|
||||||
float scan_dark_ratio;
|
float scan_dark_ratio;
|
||||||
float scan_dark_floor;
|
float scan_dark_floor;
|
||||||
@@ -82,7 +82,7 @@ fragment float4 postfx_fs(PostVOut in [[stage_in]],
|
|||||||
float3 colour;
|
float3 colour;
|
||||||
if (u.bleeding > 0.0f) {
|
if (u.bleeding > 0.0f) {
|
||||||
float tw = float(scene.get_width());
|
float tw = float(scene.get_width());
|
||||||
float step = u.oversample / tw;
|
float step = 1.0f / tw;
|
||||||
float3 ycc = rgb_to_ycc(base);
|
float3 ycc = rgb_to_ycc(base);
|
||||||
float3 ycc_l2 = rgb_to_ycc(scene.sample(samp, uv - float2(2.0f*step, 0.0f)).rgb);
|
float3 ycc_l2 = rgb_to_ycc(scene.sample(samp, uv - float2(2.0f*step, 0.0f)).rgb);
|
||||||
float3 ycc_l1 = rgb_to_ycc(scene.sample(samp, uv - float2(1.0f*step, 0.0f)).rgb);
|
float3 ycc_l1 = rgb_to_ycc(scene.sample(samp, uv - float2(1.0f*step, 0.0f)).rgb);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace Rendering {
|
|||||||
// i un fragment shader diferents. Comparteix el mateix vertex shader de
|
// i un fragment shader diferents. Comparteix el mateix vertex shader de
|
||||||
// fullscreen-triangle (es carrega de nou internament; els shaders es
|
// fullscreen-triangle (es carrega de nou internament; els shaders es
|
||||||
// destrueixen en acabar la creació del pipeline, i la pipeline en manté la
|
// destrueixen en acabar la creació del pipeline, i la pipeline en manté la
|
||||||
// referència). Renderitza directament al swapchain, sense SS ni Lanczos.
|
// referència). Renderitza directament al swapchain.
|
||||||
class CrtPiPipeline {
|
class CrtPiPipeline {
|
||||||
public:
|
public:
|
||||||
CrtPiPipeline() = default;
|
CrtPiPipeline() = default;
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ struct PostFXUniforms {
|
|||||||
// vec4 #2
|
// vec4 #2
|
||||||
float pixel_scale;
|
float pixel_scale;
|
||||||
float time;
|
float time;
|
||||||
float oversample;
|
|
||||||
float flicker;
|
float flicker;
|
||||||
|
float pad2;
|
||||||
// vec4 #3 — paràmetres de scanlines exposats al preset YAML
|
// vec4 #3 — paràmetres de scanlines exposats al preset YAML
|
||||||
float scan_dark_ratio;
|
float scan_dark_ratio;
|
||||||
float scan_dark_floor;
|
float scan_dark_floor;
|
||||||
@@ -39,8 +39,7 @@ namespace Rendering {
|
|||||||
|
|
||||||
// Backend GPU basat en SDL3 GPU API (Vulkan/SPIR-V a Linux i Windows,
|
// Backend GPU basat en SDL3 GPU API (Vulkan/SPIR-V a Linux i Windows,
|
||||||
// Metal/MSL a macOS). Pipeline únic: CPU framebuffer → transfer buffer →
|
// Metal/MSL a macOS). Pipeline únic: CPU framebuffer → transfer buffer →
|
||||||
// scene texture → PostFX pass → swapchain. Sense supersampling, sense
|
// scene texture → PostFX pass → swapchain.
|
||||||
// CrtPi i sense Lanczos (reservats per a fases següents).
|
|
||||||
//
|
//
|
||||||
// Marcat `final` perquè el destructor crida cleanup() (que és virtual);
|
// Marcat `final` perquè el destructor crida cleanup() (que és virtual);
|
||||||
// sense final, clang-tidy avisa de dispatch virtual durant destrucció.
|
// sense final, clang-tidy avisa de dispatch virtual durant destrucció.
|
||||||
@@ -102,8 +101,8 @@ namespace Rendering {
|
|||||||
.bleeding = 0.0F,
|
.bleeding = 0.0F,
|
||||||
.pixel_scale = 1.0F,
|
.pixel_scale = 1.0F,
|
||||||
.time = 0.0F,
|
.time = 0.0F,
|
||||||
.oversample = 1.0F,
|
|
||||||
.flicker = 0.0F,
|
.flicker = 0.0F,
|
||||||
|
.pad2 = 0.0F,
|
||||||
// Defaults canònics: 2/3 brillant + 1/3 fosca, brillantor 42%, suavitzat complet (1 px físic).
|
// Defaults canònics: 2/3 brillant + 1/3 fosca, brillantor 42%, suavitzat complet (1 px físic).
|
||||||
.scan_dark_ratio = 0.333F,
|
.scan_dark_ratio = 0.333F,
|
||||||
.scan_dark_floor = 0.42F,
|
.scan_dark_floor = 0.42F,
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user