forked from jaildesigner-jailgames/jaildoctors_dilemma
corregit compile_spirv.cmake y la system_folder per a shaders
This commit is contained in:
@@ -125,36 +125,62 @@ message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}")
|
|||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
find_program(GLSLC_EXE NAMES glslc)
|
find_program(GLSLC_EXE NAMES glslc)
|
||||||
|
|
||||||
set(SHADER_VERT_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.vert")
|
set(SHADERS_DIR "${CMAKE_SOURCE_DIR}/data/shaders")
|
||||||
set(SHADER_FRAG_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.frag")
|
set(HEADERS_DIR "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu")
|
||||||
set(SHADER_VERT_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_vert_spv.h")
|
|
||||||
set(SHADER_FRAG_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_frag_spv.h")
|
set(SHADER_POSTFX_VERT_SRC "${SHADERS_DIR}/postfx.vert")
|
||||||
|
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_POSTFX_VERT_H "${HEADERS_DIR}/postfx_vert_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(ALL_SHADER_HEADERS
|
||||||
|
"${SHADER_POSTFX_VERT_H}"
|
||||||
|
"${SHADER_POSTFX_FRAG_H}"
|
||||||
|
"${SHADER_UPSCALE_FRAG_H}"
|
||||||
|
"${SHADER_DOWNSCALE_FRAG_H}"
|
||||||
|
"${SHADER_CRTPI_FRAG_H}"
|
||||||
|
)
|
||||||
|
set(ALL_SHADER_SOURCES
|
||||||
|
"${SHADER_POSTFX_VERT_SRC}"
|
||||||
|
"${SHADER_POSTFX_FRAG_SRC}"
|
||||||
|
"${SHADER_UPSCALE_FRAG_SRC}"
|
||||||
|
"${SHADER_DOWNSCALE_FRAG_SRC}"
|
||||||
|
"${SHADER_CRTPI_FRAG_SRC}"
|
||||||
|
)
|
||||||
|
|
||||||
if(GLSLC_EXE)
|
if(GLSLC_EXE)
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT "${SHADER_VERT_H}" "${SHADER_FRAG_H}"
|
OUTPUT ${ALL_SHADER_HEADERS}
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-D GLSLC=${GLSLC_EXE}
|
-D GLSLC=${GLSLC_EXE}
|
||||||
-D SHADERS_DIR=${CMAKE_SOURCE_DIR}/data/shaders
|
-D SHADERS_DIR=${SHADERS_DIR}
|
||||||
-D HEADERS_DIR=${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu
|
-D HEADERS_DIR=${HEADERS_DIR}
|
||||||
-P ${CMAKE_SOURCE_DIR}/tools/shaders/compile_spirv.cmake
|
-P ${CMAKE_SOURCE_DIR}/tools/shaders/compile_spirv.cmake
|
||||||
DEPENDS "${SHADER_VERT_SRC}" "${SHADER_FRAG_SRC}"
|
DEPENDS ${ALL_SHADER_SOURCES}
|
||||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||||
COMMENT "Compilando shaders SPIR-V..."
|
COMMENT "Compilando shaders SPIR-V..."
|
||||||
)
|
)
|
||||||
add_custom_target(shaders DEPENDS "${SHADER_VERT_H}" "${SHADER_FRAG_H}")
|
add_custom_target(shaders DEPENDS ${ALL_SHADER_HEADERS})
|
||||||
message(STATUS "glslc encontrado: shaders se compilarán automáticamente")
|
message(STATUS "glslc encontrado: shaders se compilarán automáticamente")
|
||||||
else()
|
else()
|
||||||
if(NOT EXISTS "${SHADER_VERT_H}" OR NOT EXISTS "${SHADER_FRAG_H}")
|
foreach(HDR ${ALL_SHADER_HEADERS})
|
||||||
message(FATAL_ERROR
|
if(NOT EXISTS "${HDR}")
|
||||||
"glslc no encontrado y headers SPIR-V no existen.\n"
|
message(FATAL_ERROR
|
||||||
" Instala glslc: sudo apt install glslang-tools (Linux)\n"
|
"glslc no encontrado y header SPIR-V no existe: ${HDR}\n"
|
||||||
" choco install vulkan-sdk (Windows)\n"
|
" Instala glslc: sudo apt install glslang-tools (Linux)\n"
|
||||||
" O genera los headers manualmente: tools/shaders/compile_spirv.sh"
|
" choco install vulkan-sdk (Windows)\n"
|
||||||
)
|
" O genera los headers manualmente: tools/shaders/compile_spirv.sh"
|
||||||
else()
|
)
|
||||||
message(STATUS "glslc no encontrado - usando headers SPIR-V precompilados")
|
endif()
|
||||||
endif()
|
endforeach()
|
||||||
|
message(STATUS "glslc no encontrado - usando headers SPIR-V precompilados")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(STATUS "macOS: shaders SPIR-V omitidos (usa Metal)")
|
message(STATUS "macOS: shaders SPIR-V omitidos (usa Metal)")
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -4249,5 +4249,6 @@ static const uint8_t kdownscale_frag_spv[] = {
|
|||||||
0x38,
|
0x38,
|
||||||
0x00,
|
0x00,
|
||||||
0x01,
|
0x01,
|
||||||
0x00};
|
0x00,
|
||||||
|
};
|
||||||
static const size_t kdownscale_frag_spv_size = 4248;
|
static const size_t kdownscale_frag_spv_size = 4248;
|
||||||
|
|||||||
@@ -11713,5 +11713,6 @@ static const uint8_t kpostfx_frag_spv[] = {
|
|||||||
0x38,
|
0x38,
|
||||||
0x00,
|
0x00,
|
||||||
0x01,
|
0x01,
|
||||||
0x00};
|
0x00,
|
||||||
|
};
|
||||||
static const size_t kpostfx_frag_spv_size = 11712;
|
static const size_t kpostfx_frag_spv_size = 11712;
|
||||||
|
|||||||
@@ -1445,5 +1445,6 @@ static const uint8_t kpostfx_vert_spv[] = {
|
|||||||
0x38,
|
0x38,
|
||||||
0x00,
|
0x00,
|
||||||
0x01,
|
0x01,
|
||||||
0x00};
|
0x00,
|
||||||
|
};
|
||||||
static const size_t kpostfx_vert_spv_size = 1444;
|
static const size_t kpostfx_vert_spv_size = 1444;
|
||||||
|
|||||||
@@ -629,5 +629,6 @@ static const uint8_t kupscale_frag_spv[] = {
|
|||||||
0x38,
|
0x38,
|
||||||
0x00,
|
0x00,
|
||||||
0x01,
|
0x01,
|
||||||
0x00};
|
0x00,
|
||||||
|
};
|
||||||
static const size_t kupscale_frag_spv_size = 628;
|
static const size_t kupscale_frag_spv_size = 628;
|
||||||
|
|||||||
@@ -57,6 +57,20 @@ Director::Director(std::vector<std::string> const& args) {
|
|||||||
createSystemFolder("jailgames");
|
createSystemFolder("jailgames");
|
||||||
createSystemFolder("jailgames/jaildoctors_dilemma");
|
createSystemFolder("jailgames/jaildoctors_dilemma");
|
||||||
|
|
||||||
|
// Crea el subdirectorio shaders/ dentro de system_folder_ sin modificar system_folder_
|
||||||
|
{
|
||||||
|
std::string shaders_dir = system_folder_ + "/shaders";
|
||||||
|
struct stat st = {.st_dev = 0};
|
||||||
|
if (stat(shaders_dir.c_str(), &st) == -1) {
|
||||||
|
errno = 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
mkdir(shaders_dir.c_str());
|
||||||
|
#else
|
||||||
|
mkdir(shaders_dir.c_str(), S_IRWXU);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Determinar el prefijo de ruta según la plataforma
|
// Determinar el prefijo de ruta según la plataforma
|
||||||
#ifdef MACOS_BUNDLE
|
#ifdef MACOS_BUNDLE
|
||||||
const std::string PREFIX = "/../Resources";
|
const std::string PREFIX = "/../Resources";
|
||||||
|
|||||||
@@ -9,19 +9,65 @@
|
|||||||
# cmake -D GLSLC=glslc -D SHADERS_DIR=data/shaders -D HEADERS_DIR=source/core/rendering/sdl3gpu -P tools/shaders/compile_spirv.cmake
|
# cmake -D GLSLC=glslc -D SHADERS_DIR=data/shaders -D HEADERS_DIR=source/core/rendering/sdl3gpu -P tools/shaders/compile_spirv.cmake
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
cmake_policy(SET CMP0007 NEW)
|
||||||
|
|
||||||
foreach(SHADER vert frag)
|
# Lista de shaders: fuente relativa a SHADERS_DIR
|
||||||
set(SRC "${SHADERS_DIR}/postfx.${SHADER}")
|
set(SHADER_SOURCES
|
||||||
set(SPV "${HEADERS_DIR}/postfx_${SHADER}.spv")
|
"postfx.vert"
|
||||||
set(HDR "${HEADERS_DIR}/postfx_${SHADER}_spv.h")
|
"postfx.frag"
|
||||||
set(VAR "kpostfx_${SHADER}_spv")
|
"upscale.frag"
|
||||||
|
"downscale.frag"
|
||||||
|
"crtpi_frag.glsl"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Nombre de la variable C++ para cada shader (mismo orden)
|
||||||
|
set(SHADER_VARS
|
||||||
|
"kpostfx_vert_spv"
|
||||||
|
"kpostfx_frag_spv"
|
||||||
|
"kupscale_frag_spv"
|
||||||
|
"kdownscale_frag_spv"
|
||||||
|
"kcrtpi_frag_spv"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Flags extra de glslc para cada shader (vacío si no hay)
|
||||||
|
set(SHADER_FLAGS
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
"-fshader-stage=frag"
|
||||||
|
)
|
||||||
|
|
||||||
|
list(LENGTH SHADER_SOURCES NUM_SHADERS)
|
||||||
|
math(EXPR LAST_IDX "${NUM_SHADERS} - 1")
|
||||||
|
|
||||||
|
foreach(IDX RANGE ${LAST_IDX})
|
||||||
|
list(GET SHADER_SOURCES ${IDX} SRC_NAME)
|
||||||
|
list(GET SHADER_VARS ${IDX} VAR)
|
||||||
|
list(GET SHADER_FLAGS ${IDX} EXTRA_FLAG)
|
||||||
|
|
||||||
|
# Derivar nombre del header desde la variable: kpostfx_vert_spv → postfx_vert_spv.h
|
||||||
|
string(REGEX REPLACE "^k" "" HDR_BASE "${VAR}")
|
||||||
|
set(SRC "${SHADERS_DIR}/${SRC_NAME}")
|
||||||
|
set(SPV "${HEADERS_DIR}/${HDR_BASE}.spv")
|
||||||
|
set(HDR "${HEADERS_DIR}/${HDR_BASE}.h")
|
||||||
|
|
||||||
message(STATUS "Compilando ${SRC} ...")
|
message(STATUS "Compilando ${SRC} ...")
|
||||||
execute_process(
|
|
||||||
COMMAND "${GLSLC}" "${SRC}" -o "${SPV}"
|
if(EXTRA_FLAG)
|
||||||
RESULT_VARIABLE GLSLC_RESULT
|
execute_process(
|
||||||
ERROR_VARIABLE GLSLC_ERROR
|
COMMAND "${GLSLC}" "${EXTRA_FLAG}" "${SRC}" -o "${SPV}"
|
||||||
)
|
RESULT_VARIABLE GLSLC_RESULT
|
||||||
|
ERROR_VARIABLE GLSLC_ERROR
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GLSLC}" "${SRC}" -o "${SPV}"
|
||||||
|
RESULT_VARIABLE GLSLC_RESULT
|
||||||
|
ERROR_VARIABLE GLSLC_ERROR
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT GLSLC_RESULT EQUAL 0)
|
if(NOT GLSLC_RESULT EQUAL 0)
|
||||||
message(FATAL_ERROR "glslc falló para ${SRC}:\n${GLSLC_ERROR}")
|
message(FATAL_ERROR "glslc falló para ${SRC}:\n${GLSLC_ERROR}")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user