pcbjam/scripts/build-gal-webgl-test.sh
Viktor Vaczi 6c2cf85177 feat(webgl): Fix GL initialization and add GLSL ES shader conversion
Progress on WEBGL_GAL rendering:

- Fix GLImmediateShim initialization by adding GL function dependencies
  (glBegin, glEnd, glVertex2f, etc.) to $GLImmediateShim__deps
- Add COLOR4D(EDA_COLOR_T) constructor stub to wasm_stubs.cpp
- Fix GAL context locking - add LockContext/UnlockContext calls
- Add exception catching to build (-sNO_DISABLE_EXCEPTION_CATCHING)
- Create GLSL ES 1.00 shader converter in generate_shaders.py:
  - Remove #version 120 directive (ES 1.00 default)
  - Add precision highp float/int qualifiers
  - Convert int * float to float literals (2 * x -> 2.0 * x)
- Update build script to clean output files for linker flag changes
- Add console capture to test spec for debugging

Current status:
- WASM builds and loads successfully
- GLImmediateShim initializes correctly
- WEBGL_GAL creates successfully
- Shader compilation fails due to Emscripten LEGACY_GL_EMULATION
  prepending code that conflicts with custom shader precision

Next: Investigate shader compilation with LEGACY_GL_EMULATION or
consider alternative approaches for GL compatibility.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 21:59:21 +01:00

81 lines
2 KiB
Shell
Executable file

#!/bin/bash
#
# Build script for the WebGL GAL test harness (WASM)
#
# This builds a WASM module that renders GAL test scenarios using WebGL,
# allowing comparison against native OpenGL rendering.
#
# Uses a Makefile with direct em++ calls (like build-wasm-test.sh)
# to avoid emcmake Python 3.10+ requirement.
#
# Redirect all output to a log file (re-execs script with redirection)
source "$(dirname "$0")/common/logging.sh"
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Source common environment (sets up Python 3.10+ for Emscripten)
QUIET=1 source "$SCRIPT_DIR/common/env.sh"
TEST_DIR="$PROJECT_ROOT/tests/gal-regression/wasm"
OUTPUT_DIR="$PROJECT_ROOT/tests/apps/gal-webgl"
echo "Building GAL WebGL Test..."
echo " Test dir: $TEST_DIR"
echo " Output dir: $OUTPUT_DIR"
echo " EMSDK_PYTHON: ${EMSDK_PYTHON:-NOT SET}"
echo " clang: $(which clang)"
# Verify em++ is available
if ! command -v em++ &> /dev/null; then
echo "ERROR: em++ not found. Please install via: brew install emscripten"
exit 1
fi
echo " Emscripten: $(em++ --version 2>&1 | head -1)"
# Parse arguments
DEBUG_BUILD=0
CLEAN_BUILD=0
for arg in "$@"; do
if [ "$arg" = "--debug" ]; then
DEBUG_BUILD=1
elif [ "$arg" = "--clean" ]; then
CLEAN_BUILD=1
fi
done
# Build using Makefile
cd "$TEST_DIR"
if [ "$CLEAN_BUILD" = "1" ]; then
echo ""
echo "Cleaning..."
make clean 2>/dev/null || true
fi
# Always remove output files to ensure linker flags changes take effect
# (Makefile only tracks object file dependencies, not linker flag changes)
rm -f "$OUTPUT_DIR"/*.js "$OUTPUT_DIR"/*.wasm 2>/dev/null || true
echo ""
echo "Building..."
if [ "$DEBUG_BUILD" = "1" ]; then
make DEBUG=1
else
make
fi
echo ""
echo "Build successful!"
echo ""
echo "Files in $OUTPUT_DIR:"
ls -lh "$OUTPUT_DIR"
echo ""
echo "To test locally:"
echo " cd $PROJECT_ROOT/tests"
echo " npx serve apps"
echo " # Open http://localhost:3000/gal-webgl/gal_webgl_test.html"