elimina supersampling (shaders, pipeline, console command, config)
This commit is contained in:
@@ -182,28 +182,20 @@ if(NOT APPLE AND NOT EMSCRIPTEN)
|
|||||||
|
|
||||||
set(SHADER_POSTFX_VERT_SRC "${SHADERS_DIR}/postfx.vert")
|
set(SHADER_POSTFX_VERT_SRC "${SHADERS_DIR}/postfx.vert")
|
||||||
set(SHADER_POSTFX_FRAG_SRC "${SHADERS_DIR}/postfx.frag")
|
set(SHADER_POSTFX_FRAG_SRC "${SHADERS_DIR}/postfx.frag")
|
||||||
set(SHADER_UPSCALE_FRAG_SRC "${SHADERS_DIR}/upscale.frag")
|
|
||||||
set(SHADER_DOWNSCALE_FRAG_SRC "${SHADERS_DIR}/downscale.frag")
|
|
||||||
set(SHADER_CRTPI_FRAG_SRC "${SHADERS_DIR}/crtpi_frag.glsl")
|
set(SHADER_CRTPI_FRAG_SRC "${SHADERS_DIR}/crtpi_frag.glsl")
|
||||||
|
|
||||||
set(SHADER_POSTFX_VERT_H "${HEADERS_DIR}/postfx_vert_spv.h")
|
set(SHADER_POSTFX_VERT_H "${HEADERS_DIR}/postfx_vert_spv.h")
|
||||||
set(SHADER_POSTFX_FRAG_H "${HEADERS_DIR}/postfx_frag_spv.h")
|
set(SHADER_POSTFX_FRAG_H "${HEADERS_DIR}/postfx_frag_spv.h")
|
||||||
set(SHADER_UPSCALE_FRAG_H "${HEADERS_DIR}/upscale_frag_spv.h")
|
|
||||||
set(SHADER_DOWNSCALE_FRAG_H "${HEADERS_DIR}/downscale_frag_spv.h")
|
|
||||||
set(SHADER_CRTPI_FRAG_H "${HEADERS_DIR}/crtpi_frag_spv.h")
|
set(SHADER_CRTPI_FRAG_H "${HEADERS_DIR}/crtpi_frag_spv.h")
|
||||||
|
|
||||||
set(ALL_SHADER_HEADERS
|
set(ALL_SHADER_HEADERS
|
||||||
"${SHADER_POSTFX_VERT_H}"
|
"${SHADER_POSTFX_VERT_H}"
|
||||||
"${SHADER_POSTFX_FRAG_H}"
|
"${SHADER_POSTFX_FRAG_H}"
|
||||||
"${SHADER_UPSCALE_FRAG_H}"
|
|
||||||
"${SHADER_DOWNSCALE_FRAG_H}"
|
|
||||||
"${SHADER_CRTPI_FRAG_H}"
|
"${SHADER_CRTPI_FRAG_H}"
|
||||||
)
|
)
|
||||||
set(ALL_SHADER_SOURCES
|
set(ALL_SHADER_SOURCES
|
||||||
"${SHADER_POSTFX_VERT_SRC}"
|
"${SHADER_POSTFX_VERT_SRC}"
|
||||||
"${SHADER_POSTFX_FRAG_SRC}"
|
"${SHADER_POSTFX_FRAG_SRC}"
|
||||||
"${SHADER_UPSCALE_FRAG_SRC}"
|
|
||||||
"${SHADER_DOWNSCALE_FRAG_SRC}"
|
|
||||||
"${SHADER_CRTPI_FRAG_SRC}"
|
"${SHADER_CRTPI_FRAG_SRC}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ RESOURCE_FILE := release/windows/jdd.res
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
SHADER_CMAKE := $(DIR_ROOT)tools/shaders/compile_spirv.cmake
|
SHADER_CMAKE := $(DIR_ROOT)tools/shaders/compile_spirv.cmake
|
||||||
SHADERS_DIR := $(DIR_ROOT)data/shaders
|
SHADERS_DIR := $(DIR_ROOT)data/shaders
|
||||||
HEADERS_DIR := $(DIR_ROOT)source/core/rendering/sdl3gpu
|
HEADERS_DIR := $(DIR_ROOT)source/core/rendering/sdl3gpu/spv
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
GLSLC := $(shell where glslc 2>NUL)
|
GLSLC := $(shell where glslc 2>NUL)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
#version 450
|
|
||||||
layout(location = 0) in vec2 v_uv;
|
|
||||||
layout(location = 0) out vec4 out_color;
|
|
||||||
|
|
||||||
layout(set = 2, binding = 0) uniform sampler2D source;
|
|
||||||
|
|
||||||
layout(set = 3, binding = 0) uniform DownscaleUniforms {
|
|
||||||
int algorithm; // 0 = Lanczos2 (ventana 2, ±2 taps), 1 = Lanczos3 (ventana 3, ±3 taps)
|
|
||||||
float pad0;
|
|
||||||
float pad1;
|
|
||||||
float pad2;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
// Kernel Lanczos normalizado: sinc(t) * sinc(t/a) para |t| < a, 0 fuera.
|
|
||||||
float lanczos(float t, float a) {
|
|
||||||
t = abs(t);
|
|
||||||
if (t < 0.0001) { return 1.0; }
|
|
||||||
if (t >= a) { return 0.0; }
|
|
||||||
const float PI = 3.14159265358979;
|
|
||||||
float pt = PI * t;
|
|
||||||
return (a * sin(pt) * sin(pt / a)) / (pt * pt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
vec2 src_size = vec2(textureSize(source, 0));
|
|
||||||
// Posición en coordenadas de texel (centros de texel en N+0.5)
|
|
||||||
vec2 p = v_uv * src_size;
|
|
||||||
vec2 p_floor = floor(p);
|
|
||||||
|
|
||||||
float a = (u.algorithm == 0) ? 2.0 : 3.0;
|
|
||||||
int win = int(a);
|
|
||||||
|
|
||||||
vec4 color = vec4(0.0);
|
|
||||||
float weight_sum = 0.0;
|
|
||||||
|
|
||||||
for (int j = -win; j <= win; j++) {
|
|
||||||
for (int i = -win; i <= win; i++) {
|
|
||||||
// Centro del texel (i,j) relativo a p_floor
|
|
||||||
vec2 tap_center = p_floor + vec2(float(i), float(j)) + 0.5;
|
|
||||||
vec2 offset = tap_center - p;
|
|
||||||
float w = lanczos(offset.x, a) * lanczos(offset.y, a);
|
|
||||||
color += texture(source, tap_center / src_size) * w;
|
|
||||||
weight_sum += w;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out_color = (weight_sum > 0.0) ? (color / weight_sum) : vec4(0.0, 0.0, 0.0, 1.0);
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#version 450
|
|
||||||
|
|
||||||
// Vulkan GLSL fragment shader — Nearest-neighbour upscale pass
|
|
||||||
// Used as the first render pass when supersampling is active.
|
|
||||||
// Compile: glslc upscale.frag -o upscale.frag.spv
|
|
||||||
// xxd -i upscale.frag.spv > ../../source/core/rendering/sdl3gpu/upscale_frag_spv.h
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 v_uv;
|
|
||||||
layout(location = 0) out vec4 out_color;
|
|
||||||
|
|
||||||
layout(set = 2, binding = 0) uniform sampler2D scene;
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
out_color = texture(scene, v_uv);
|
|
||||||
}
|
|
||||||
@@ -99,8 +99,7 @@ void RenderInfo::render() const {
|
|||||||
preset_name = prettyName(Options::postfx_presets[static_cast<size_t>(Options::video.shader.current_postfx_preset)].name);
|
preset_name = prettyName(Options::postfx_presets[static_cast<size_t>(Options::video.shader.current_postfx_preset)].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const bool SHOW_SS = Options::video.supersampling.enabled && !IS_CRTPI;
|
line += " | " + SHADER_NAME + " " + preset_name;
|
||||||
line += " | " + SHADER_NAME + " " + preset_name + (SHOW_SS ? " (ss)" : "");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo en lowercase
|
// Todo en lowercase
|
||||||
|
|||||||
@@ -65,11 +65,8 @@ class Screen {
|
|||||||
void setPaletteSortMode(PaletteSortMode mode); // Establece modo de ordenación concreto
|
void setPaletteSortMode(PaletteSortMode mode); // Establece modo de ordenación concreto
|
||||||
[[nodiscard]] auto getPaletteSortModeName() const -> std::string; // Nombre del modo de ordenación actual
|
[[nodiscard]] auto getPaletteSortModeName() const -> std::string; // Nombre del modo de ordenación actual
|
||||||
void toggleShaders(); // Activa/desactiva todos los shaders respetando current_shader
|
void toggleShaders(); // Activa/desactiva todos los shaders respetando current_shader
|
||||||
void toggleSupersampling(); // Activa/desactiva el supersampling global
|
|
||||||
void reloadPostFX(); // Recarga el shader del preset actual sin toggle
|
void reloadPostFX(); // Recarga el shader del preset actual sin toggle
|
||||||
void reloadCrtPi(); // Recarga el shader CrtPi del preset actual sin toggle
|
void reloadCrtPi(); // Recarga el shader CrtPi del preset actual sin toggle
|
||||||
void setLinearUpscale(bool linear); // Upscale NEAREST (false) o LINEAR (true) en el paso SS
|
|
||||||
void setDownscaleAlgo(int algo); // 0=bilinear legacy, 1=Lanczos2, 2=Lanczos3
|
|
||||||
void setActiveShader(Rendering::ShaderType type); // Cambia el shader de post-procesado activo
|
void setActiveShader(Rendering::ShaderType type); // Cambia el shader de post-procesado activo
|
||||||
void nextShader(); // Cicla al siguiente shader disponible (para futura UI)
|
void nextShader(); // Cicla al siguiente shader disponible (para futura UI)
|
||||||
|
|
||||||
@@ -98,7 +95,6 @@ class Screen {
|
|||||||
[[nodiscard]] auto getLastFPS() const -> int { return fps_.last_value; }
|
[[nodiscard]] auto getLastFPS() const -> int { return fps_.last_value; }
|
||||||
[[nodiscard]] auto getZoomFactor() const -> float { return zoom_factor_; }
|
[[nodiscard]] auto getZoomFactor() const -> float { return zoom_factor_; }
|
||||||
[[nodiscard]] static auto getMaxZoom() -> int;
|
[[nodiscard]] static auto getMaxZoom() -> int;
|
||||||
[[nodiscard]] auto getSsTextureSize() const -> std::pair<int, int>;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Estructuras
|
// Estructuras
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,634 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <cstddef>
|
|
||||||
#include <cstdint>
|
|
||||||
static const uint8_t kupscale_frag_spv[] = {
|
|
||||||
0x03,
|
|
||||||
0x02,
|
|
||||||
0x23,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x0b,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x14,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0b,
|
|
||||||
0x00,
|
|
||||||
0x06,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x4c,
|
|
||||||
0x53,
|
|
||||||
0x4c,
|
|
||||||
0x2e,
|
|
||||||
0x73,
|
|
||||||
0x74,
|
|
||||||
0x64,
|
|
||||||
0x2e,
|
|
||||||
0x34,
|
|
||||||
0x35,
|
|
||||||
0x30,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0e,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0f,
|
|
||||||
0x00,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x6d,
|
|
||||||
0x61,
|
|
||||||
0x69,
|
|
||||||
0x6e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x10,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0xc2,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0a,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x4c,
|
|
||||||
0x5f,
|
|
||||||
0x47,
|
|
||||||
0x4f,
|
|
||||||
0x4f,
|
|
||||||
0x47,
|
|
||||||
0x4c,
|
|
||||||
0x45,
|
|
||||||
0x5f,
|
|
||||||
0x63,
|
|
||||||
0x70,
|
|
||||||
0x70,
|
|
||||||
0x5f,
|
|
||||||
0x73,
|
|
||||||
0x74,
|
|
||||||
0x79,
|
|
||||||
0x6c,
|
|
||||||
0x65,
|
|
||||||
0x5f,
|
|
||||||
0x6c,
|
|
||||||
0x69,
|
|
||||||
0x6e,
|
|
||||||
0x65,
|
|
||||||
0x5f,
|
|
||||||
0x64,
|
|
||||||
0x69,
|
|
||||||
0x72,
|
|
||||||
0x65,
|
|
||||||
0x63,
|
|
||||||
0x74,
|
|
||||||
0x69,
|
|
||||||
0x76,
|
|
||||||
0x65,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x08,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x4c,
|
|
||||||
0x5f,
|
|
||||||
0x47,
|
|
||||||
0x4f,
|
|
||||||
0x4f,
|
|
||||||
0x47,
|
|
||||||
0x4c,
|
|
||||||
0x45,
|
|
||||||
0x5f,
|
|
||||||
0x69,
|
|
||||||
0x6e,
|
|
||||||
0x63,
|
|
||||||
0x6c,
|
|
||||||
0x75,
|
|
||||||
0x64,
|
|
||||||
0x65,
|
|
||||||
0x5f,
|
|
||||||
0x64,
|
|
||||||
0x69,
|
|
||||||
0x72,
|
|
||||||
0x65,
|
|
||||||
0x63,
|
|
||||||
0x74,
|
|
||||||
0x69,
|
|
||||||
0x76,
|
|
||||||
0x65,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x6d,
|
|
||||||
0x61,
|
|
||||||
0x69,
|
|
||||||
0x6e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x6f,
|
|
||||||
0x75,
|
|
||||||
0x74,
|
|
||||||
0x5f,
|
|
||||||
0x63,
|
|
||||||
0x6f,
|
|
||||||
0x6c,
|
|
||||||
0x6f,
|
|
||||||
0x72,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x73,
|
|
||||||
0x63,
|
|
||||||
0x65,
|
|
||||||
0x6e,
|
|
||||||
0x65,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x76,
|
|
||||||
0x5f,
|
|
||||||
0x75,
|
|
||||||
0x76,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x1e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x21,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x22,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x47,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x1e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x13,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x21,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x16,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x06,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x20,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x17,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x06,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x20,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x08,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3b,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x08,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x19,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x0a,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x06,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x1b,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x0b,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0a,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x20,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0c,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0b,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3b,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0c,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x17,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0f,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x06,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x20,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x10,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0f,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3b,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x10,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x36,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0xf8,
|
|
||||||
0x00,
|
|
||||||
0x02,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3d,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0b,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0d,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3d,
|
|
||||||
0x00,
|
|
||||||
0x04,
|
|
||||||
0x00,
|
|
||||||
0x0f,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x12,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x11,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x57,
|
|
||||||
0x00,
|
|
||||||
0x05,
|
|
||||||
0x00,
|
|
||||||
0x07,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x13,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x0e,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x12,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x3e,
|
|
||||||
0x00,
|
|
||||||
0x03,
|
|
||||||
0x00,
|
|
||||||
0x09,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x13,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0x00,
|
|
||||||
0xfd,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
0x38,
|
|
||||||
0x00,
|
|
||||||
0x01,
|
|
||||||
0x00,
|
|
||||||
};
|
|
||||||
static const size_t kupscale_frag_spv_size = 628;
|
|
||||||
@@ -26,13 +26,10 @@ namespace Defaults::Video {
|
|||||||
constexpr Screen::Filter FILTER = Screen::Filter::NEAREST; // Filtro por defecto
|
constexpr Screen::Filter FILTER = Screen::Filter::NEAREST; // Filtro por defecto
|
||||||
constexpr bool VERTICAL_SYNC = true; // Vsync activado por defecto
|
constexpr bool VERTICAL_SYNC = true; // Vsync activado por defecto
|
||||||
constexpr bool SHADER_ENABLED = false; // Shaders de post-procesado desactivados por defecto
|
constexpr bool SHADER_ENABLED = false; // Shaders de post-procesado desactivados por defecto
|
||||||
constexpr bool SUPERSAMPLING = false; // Supersampling desactivado por defecto
|
|
||||||
constexpr bool INTEGER_SCALE = true; // Escalado entero activado por defecto
|
constexpr bool INTEGER_SCALE = true; // Escalado entero activado por defecto
|
||||||
constexpr bool KEEP_ASPECT = true; // Mantener aspecto activado por defecto
|
constexpr bool KEEP_ASPECT = true; // Mantener aspecto activado por defecto
|
||||||
constexpr const char* PALETTE_NAME = "resurrect-64"; // Paleta por defecto
|
constexpr const char* PALETTE_NAME = "resurrect-64"; // Paleta por defecto
|
||||||
constexpr const char* PALETTE_SORT = "original"; // Modo de ordenación de paleta por defecto
|
constexpr const char* PALETTE_SORT = "original"; // Modo de ordenación de paleta por defecto
|
||||||
constexpr bool LINEAR_UPSCALE = false; // Upscale NEAREST por defecto
|
|
||||||
constexpr int DOWNSCALE_ALGO = 1; // Downscale por defecto (0=Bilinear, 1=Lanczos2, 2=Lanczos3)
|
|
||||||
constexpr bool GPU_ACCELERATION = true; // Aceleración GPU activada por defecto
|
constexpr bool GPU_ACCELERATION = true; // Aceleración GPU activada por defecto
|
||||||
} // namespace Defaults::Video
|
} // namespace Defaults::Video
|
||||||
|
|
||||||
|
|||||||
@@ -55,65 +55,6 @@ static auto boolToggle(
|
|||||||
|
|
||||||
// ── Command handlers ─────────────────────────────────────────────────────────
|
// ── Command handlers ─────────────────────────────────────────────────────────
|
||||||
|
|
||||||
// SS [ON|OFF|SIZE|UPSCALE [NEAREST|LINEAR]|DOWNSCALE [BILINEAR|LANCZOS2|LANCZOS3]]
|
|
||||||
static auto cmdSs(const std::vector<std::string>& args) -> std::string { // NOLINT(readability-function-cognitive-complexity)
|
|
||||||
if (!Screen::get()->isHardwareAccelerated()) { return "No GPU acceleration"; }
|
|
||||||
static const std::array<std::string_view, 3> DOWNSCALE_NAMES = {"Bilinear", "Lanczos2", "Lanczos3"};
|
|
||||||
if (!args.empty() && args[0] == "SIZE") {
|
|
||||||
if (!Options::video.supersampling.enabled) { return "Supersampling is OFF: no texture"; }
|
|
||||||
const auto [w, h] = Screen::get()->getSsTextureSize();
|
|
||||||
if (w == 0) { return "SS texture: not active"; }
|
|
||||||
return "SS texture: " + std::to_string(w) + "x" + std::to_string(h);
|
|
||||||
}
|
|
||||||
if (!args.empty() && args[0] == "UPSCALE") {
|
|
||||||
if (args.size() == 1) {
|
|
||||||
Screen::get()->setLinearUpscale(!Options::video.supersampling.linear_upscale);
|
|
||||||
return std::string("Upscale: ") + (Options::video.supersampling.linear_upscale ? "Linear" : "Nearest");
|
|
||||||
}
|
|
||||||
if (args[1] == "NEAREST") {
|
|
||||||
if (!Options::video.supersampling.linear_upscale) { return "Upscale already Nearest"; }
|
|
||||||
Screen::get()->setLinearUpscale(false);
|
|
||||||
return "Upscale: Nearest";
|
|
||||||
}
|
|
||||||
if (args[1] == "LINEAR") {
|
|
||||||
if (Options::video.supersampling.linear_upscale) { return "Upscale already Linear"; }
|
|
||||||
Screen::get()->setLinearUpscale(true);
|
|
||||||
return "Upscale: Linear";
|
|
||||||
}
|
|
||||||
return "usage: ss upscale [nearest|linear]";
|
|
||||||
}
|
|
||||||
if (!args.empty() && args[0] == "DOWNSCALE") {
|
|
||||||
if (args.size() == 1) {
|
|
||||||
return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(Options::video.supersampling.downscale_algo)]);
|
|
||||||
}
|
|
||||||
int algo = -1;
|
|
||||||
if (args[1] == "BILINEAR") { algo = 0; }
|
|
||||||
if (args[1] == "LANCZOS2") { algo = 1; }
|
|
||||||
if (args[1] == "LANCZOS3") { algo = 2; }
|
|
||||||
if (algo == -1) { return "usage: ss downscale [bilinear|lanczos2|lanczos3]"; }
|
|
||||||
if (Options::video.supersampling.downscale_algo == algo) {
|
|
||||||
return std::string("Downscale already ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
|
|
||||||
}
|
|
||||||
Screen::get()->setDownscaleAlgo(algo);
|
|
||||||
return std::string("Downscale: ") + std::string(DOWNSCALE_NAMES[static_cast<size_t>(algo)]);
|
|
||||||
}
|
|
||||||
if (args.empty()) {
|
|
||||||
Screen::get()->toggleSupersampling();
|
|
||||||
return std::string("PostFX Supersampling ") + (Options::video.supersampling.enabled ? "ON" : "OFF");
|
|
||||||
}
|
|
||||||
if (args[0] == "ON") {
|
|
||||||
if (Options::video.supersampling.enabled) { return "Supersampling already ON"; }
|
|
||||||
Screen::get()->toggleSupersampling();
|
|
||||||
return "PostFX Supersampling ON";
|
|
||||||
}
|
|
||||||
if (args[0] == "OFF") {
|
|
||||||
if (!Options::video.supersampling.enabled) { return "Supersampling already OFF"; }
|
|
||||||
Screen::get()->toggleSupersampling();
|
|
||||||
return "PostFX Supersampling OFF";
|
|
||||||
}
|
|
||||||
return "usage: ss [on|off|size|upscale [nearest|linear]|downscale [bilinear|lanczos2|lanczos3]]";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper: aplica un preset por dirección (NEXT/PREV) o nombre; devuelve mensaje
|
// Helper: aplica un preset por dirección (NEXT/PREV) o nombre; devuelve mensaje
|
||||||
static auto applyPreset(const std::vector<std::string>& args) -> std::string {
|
static auto applyPreset(const std::vector<std::string>& args) -> std::string {
|
||||||
const bool IS_CRTPI = Options::video.shader.current_shader == Rendering::ShaderType::CRTPI;
|
const bool IS_CRTPI = Options::video.shader.current_shader == Rendering::ShaderType::CRTPI;
|
||||||
@@ -1013,7 +954,6 @@ static auto cmdConsole(const std::vector<std::string>& args) -> std::string { /
|
|||||||
// ── CommandRegistry ──────────────────────────────────────────────────────────
|
// ── CommandRegistry ──────────────────────────────────────────────────────────
|
||||||
|
|
||||||
void CommandRegistry::registerHandlers() { // NOLINT(readability-function-cognitive-complexity)
|
void CommandRegistry::registerHandlers() { // NOLINT(readability-function-cognitive-complexity)
|
||||||
handlers_["cmd_ss"] = cmdSs;
|
|
||||||
handlers_["cmd_shader"] = cmdShader;
|
handlers_["cmd_shader"] = cmdShader;
|
||||||
handlers_["cmd_border"] = cmdBorder;
|
handlers_["cmd_border"] = cmdBorder;
|
||||||
handlers_["cmd_fullscreen"] = cmdFullscreen;
|
handlers_["cmd_fullscreen"] = cmdFullscreen;
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ cmake_policy(SET CMP0007 NEW)
|
|||||||
set(SHADER_SOURCES
|
set(SHADER_SOURCES
|
||||||
"postfx.vert"
|
"postfx.vert"
|
||||||
"postfx.frag"
|
"postfx.frag"
|
||||||
"upscale.frag"
|
|
||||||
"downscale.frag"
|
|
||||||
"crtpi_frag.glsl"
|
"crtpi_frag.glsl"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -24,15 +22,11 @@ set(SHADER_SOURCES
|
|||||||
set(SHADER_VARS
|
set(SHADER_VARS
|
||||||
"kpostfx_vert_spv"
|
"kpostfx_vert_spv"
|
||||||
"kpostfx_frag_spv"
|
"kpostfx_frag_spv"
|
||||||
"kupscale_frag_spv"
|
|
||||||
"kdownscale_frag_spv"
|
|
||||||
"kcrtpi_frag_spv"
|
"kcrtpi_frag_spv"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Flags extra de glslc para cada shader (vacío si no hay)
|
# Flags extra de glslc para cada shader (vacío si no hay)
|
||||||
set(SHADER_FLAGS
|
set(SHADER_FLAGS
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
""
|
||||||
""
|
""
|
||||||
"-fshader-stage=frag"
|
"-fshader-stage=frag"
|
||||||
|
|||||||
Reference in New Issue
Block a user