diff --git a/kicad b/kicad index a2c634f..b5ac6dc 160000 --- a/kicad +++ b/kicad @@ -1 +1 @@ -Subproject commit a2c634f2f5f061ce13dc09fae3801c618f2a9f81 +Subproject commit b5ac6dcbe40defcfa21938de80cd6d4ce3a23711 diff --git a/wasm/cmake/WasmShaderOverride.cmake b/wasm/cmake/WasmShaderOverride.cmake new file mode 100644 index 0000000..e90d229 --- /dev/null +++ b/wasm/cmake/WasmShaderOverride.cmake @@ -0,0 +1,56 @@ +# WASM shader override. +# +# Redefines add_shader() to convert GLSL 1.20 -> GLSL ES 3.0 before embedding the shader as a +# C++ string, so common/gal/CMakeLists.txt's unconditional add_shader() calls produce ES3 +# shaders on Emscripten while native keeps the upstream GLSL-1.20 path. The later definition +# wins, so this file must be include()d AFTER upstream's add_shader() definition and BEFORE the +# add_shader() calls. (Same conversion as tests/gal-regression/wasm/generate_shaders.py.) +# +# include()d (not add_subdirectory'd) from common/gal/CMakeLists.txt, so ${CMAKE_CURRENT_SOURCE_DIR} +# / ${CMAKE_CURRENT_BINARY_DIR} below resolve to that directory, exactly as the inline fork did. + +find_program( PYTHON3_EXECUTABLE python3 REQUIRED ) + +function( add_shader outTarget inFile shaderName ) + # Determine shader type from filename + string(FIND "${inFile}" "frag" _is_frag) + if(_is_frag GREATER -1) + set(SHADER_TYPE "fragment") + else() + set(SHADER_TYPE "vertex") + endif() + + set(es3GlslFile "${CMAKE_CURRENT_BINARY_DIR}/${shaderName}_es3.glsl") + set(outCppName "${shaderName}.cpp") + set(outHeaderName "${shaderName}.h") + + # Step 1: Convert GLSL 120 -> ES 3.0 + add_custom_command( + OUTPUT ${es3GlslFile} + COMMAND ${PYTHON3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/convert_glsl_es3.py + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${inFile} + ${es3GlslFile} + ${SHADER_TYPE} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${inFile} + ${CMAKE_CURRENT_SOURCE_DIR}/shaders/convert_glsl_es3.py + ) + + # Step 2: Embed as C++ string (same as native path) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${outCppName} + ${CMAKE_BINARY_DIR}/include/gal/shaders/${outHeaderName} + COMMAND ${CMAKE_COMMAND} + -DSOURCE_FILE="${es3GlslFile}" + -DOUT_CPP_DIR="${CMAKE_CURRENT_BINARY_DIR}/" + -DOUT_HEADER_DIR="${CMAKE_BINARY_DIR}/include/gal/shaders/" + -DOUT_CPP_FILENAME="${outCppName}" + -DOUT_HEADER_FILENAME="${outHeaderName}" + -DOUT_VAR_NAME="${shaderName}" + -P ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/CreateShaderCpp.cmake + DEPENDS ${es3GlslFile} + ) + + target_sources( ${outTarget} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${outCppName} ) + target_include_directories( ${outTarget} PUBLIC ${CMAKE_BINARY_DIR}/include/gal/shaders/ ) +endfunction()