Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
182 commits
Select commit Hold shift + click to select a range
25d8b53
fix(ubjson): skip UBJSON no-op bytes when reading string length
cursoragent Apr 3, 2026
2597a82
fix(vulkan): repair mikk tangent shared-vertex weld path
cursoragent Apr 3, 2026
3388efd
docs: sharpen README around renderer core and extensions
cursoragent Apr 3, 2026
a22c79e
fix(nanosvg): const-correct nsvg__atof to silence -Wcast-qual
cursoragent Apr 3, 2026
212e1d4
docs,test: renderer confidence checklist and recursive GLSL smoke
cursoragent Apr 3, 2026
6f5f032
feat(test,docs): renderer regression pack specs and headless check
cursoragent Apr 3, 2026
4499500
docs(renderer_regression): rename rtest_vfog to rtest_volumetric
cursoragent Apr 3, 2026
25a6801
feat(scripts): renderer regression dedicated map-load sanity
cursoragent Apr 3, 2026
b0db7b1
chore: drop phase wording from regression scripts and docs
cursoragent Apr 3, 2026
57c18ab
docs(renderer_regression): document content bring-up and enforcement …
cursoragent Apr 3, 2026
8fa82f7
feat(renderer_validation): devdata pack, BSP generator, map-load fixes
cursoragent Apr 3, 2026
ae46ac3
Remove deprecated r_fluidsim* cvars; use r_fogFluid* only
cursoragent Apr 3, 2026
dfa3d8a
Shader: drop dead Lambert branch in PBR diffuse (Burley only)
cursoragent Apr 3, 2026
59a5950
test: add unit_qmath and unit_surfaceflags
cursoragent Apr 3, 2026
94d6374
Regenerate Vulkan embedded SPIR-V after gen_frag diffuse cleanup
cursoragent Apr 3, 2026
c65bd68
test: expand unit_qmath and add unit_qhelpers
cursoragent Apr 3, 2026
d2abd38
test: split unit_crc/unit_pathutil; extend unit_qmath
cursoragent Apr 3, 2026
34ca0a7
test: add unit_msg for msg_t OOB and Huffman round-trips
cursoragent Apr 3, 2026
1fab069
test: add unit_info for Info_* string helpers
cursoragent Apr 3, 2026
fe8493a
test: add unit_cm_bounds; split CM_BoundsIntersect into cm_bounds.c
cursoragent Apr 3, 2026
068c55b
test: add unit_parse for COM_Parse and related token helpers
cursoragent Apr 3, 2026
61b8389
test: add unit_endian for Long64/Float swap and no-swap helpers
cursoragent Apr 3, 2026
4bf3b77
test: refine unit_msg/info/parse; dedupe swap tests to unit_endian
cursoragent Apr 3, 2026
a40a5a5
ci: fix Windows-MSVC artifact staging for ARM64/x64 output names
cursoragent Apr 3, 2026
7d76046
ci/msvc: emit idtech3*.exe from vcxproj; drop quake3 staging step
cursoragent Apr 3, 2026
1a74954
msvc: rename .pdb/.map outputs to idtech3 / idtech3_server
cursoragent Apr 3, 2026
a8b799f
docs: add renderer proof loop to RENDERER_CONFIDENCE.md
cursoragent Apr 3, 2026
a44de7a
docs: add strict first-pass criteria to renderer proof loop
cursoragent Apr 3, 2026
01501af
ci: harden Windows-MSVC staging and fail build on missing exes
cursoragent Apr 3, 2026
4e55c26
msvc: compile cm_bounds.c in quake3e and quake3e-ded
cursoragent Apr 3, 2026
db0efdb
test: use 4KiB buffers for unit_msg Huffman paths
cursoragent Apr 3, 2026
73651e7
fix(msvc): ship zlib zconf.h and fix libpng zlib includes
cursoragent Apr 4, 2026
1322bb5
fix(ci): harden zlib zconf, MSG OOB writes, and unit_msg buffers
cursoragent Apr 4, 2026
cbc2d23
fix(windows): bundle MinGW runtime DLLs in MSYS2 CI artifacts
cursoragent Apr 4, 2026
be582a3
fix(msvc): zlib.vcxproj tolerate C4061 and /WX on Release x64
cursoragent Apr 4, 2026
811437d
fix(compat): Windows DLL diagnostics, PE gate, native load logging
cursoragent Apr 4, 2026
a989445
ci(windows): verify PE exports for renderer and game DLLs
cursoragent Apr 4, 2026
5a95ff0
fix(windows-ci): renderer DLL exports + portable MinGW staging
cursoragent Apr 4, 2026
23a5fcb
fix(windows): MinGW LoadLibraryA + libpng zlib import lib path
cursoragent Apr 4, 2026
dd611fc
fix(ci): zlib.lib output + align MSYS PE export with Windows CMake
cursoragent Apr 4, 2026
69488a1
fix(win32): Sys_LoadLibrary use LoadLibraryA on MinGW even if UNICODE
cursoragent Apr 4, 2026
5ceb0ed
fix(ci): stop msbuild TargetName override breaking zlib; MSVC copy De…
cursoragent Apr 4, 2026
83359f9
fix(msvc): libpng link finds zlib.lib in sibling zlib output dir
cursoragent Apr 4, 2026
9e304c2
fix(msvc): sync platform cg_public syscalls; correct phys_bullet path
cursoragent Apr 4, 2026
377db8f
fix(msvc): link libpng/zlib from vstudio output dirs; stable libpng16…
cursoragent Apr 4, 2026
24b19eb
fix(msvc): prepend OutDir to libpng/zlib LIBPATH for standalone msbuild
cursoragent Apr 4, 2026
d787d16
ci(windows-msys): cache MSYS2; retry pacman for SDL2/OpenAL/freetype/lua
cursoragent Apr 4, 2026
ff563ba
fix(msvc): correct libpng/zlib LIBPATH depth (repo is under src/exter…
cursoragent Apr 4, 2026
305344a
fix(msvc): add platform client + image loader sources to vcxproj
cursoragent Apr 4, 2026
9d9515e
fix(msvc): correct relative paths to platform/client sources in quake…
cursoragent Apr 4, 2026
d5d246d
fix(msvc): point platform client sources at ../../client from msvc2017
cursoragent Apr 4, 2026
46f7d2a
fix(msvc): align quake3e client with CMake (game systems + Recast)
cursoragent Apr 4, 2026
50d848b
fix(msvc): use ../../../physics for phys_* sources from msvc2017
cursoragent Apr 4, 2026
d6b85d3
fix(msvc): Sys_UpdateWindowTitle + compile snd_adpcm for ADPCM mix path
cursoragent Apr 4, 2026
bddb46d
vulkan: remove dead USE_UPLOAD_QUEUE compile-time branch
cursoragent Apr 4, 2026
8ceda65
fix(msvc): vulkan/opengl vcxproj use ../../../renderers + RENDERER_VU…
cursoragent Apr 4, 2026
5e9d1b6
fix(msvc): libpng Debug|ARM64 — no PCH on NEON sources; disable /WX
cursoragent Apr 4, 2026
18abcea
fix: gate Sys_UpdateWindowTitle on USE_SDL; MSVC defines USE_SDL=0
cursoragent Apr 4, 2026
e712666
fix(win32): USE_SDL=0 vs #ifndef — restore DirectSound + title split
cursoragent Apr 4, 2026
ef6e1e3
Merge pull request #43 from timfox/cursor/pending-todo-item-3829
cursor[bot] Apr 4, 2026
bc22579
Merge pull request #45 from timfox/cursor/feature-flag-cleanup-16e7
cursor[bot] Apr 4, 2026
1bb8192
Merge pull request #42 from timfox/cursor/feature-flag-cleanup-583d
cursor[bot] Apr 4, 2026
fafdb74
Add unit tests for VM native module filename fallback
cursoragent Apr 4, 2026
8299af9
tests,scripts: run_vulkan launcher regression + helper script
cursoragent Apr 3, 2026
f61b079
fix(win32): reliable native DLL load diagnostics + dotted .dll paths
cursoragent Apr 4, 2026
386bd95
docs,qcommon: expand com_nativeLibraryDebug troubleshooting
cursoragent Apr 4, 2026
e20a62f
scripts: helper to close superseded agent PRs with gh
cursoragent Apr 4, 2026
e9d98fb
fix(msvc): link vm_native_module.c in client + dedicated vcxproj
cursoragent Apr 4, 2026
a3b8bbe
Add regression test for run_vulkan launcher selection
cursoragent Apr 5, 2026
a2d8cd0
fix(win32): MSVC jobs.c use Vista+ SDK for CONDITION_VARIABLE APIs
cursoragent Apr 6, 2026
2f09883
docs: document native VM module load order and FS resolution
cursoragent Apr 5, 2026
29e43ca
tests: harden run_vulkan regression script
cursoragent Apr 6, 2026
f2985e6
Merge branch 'next-gen-5' into main
cursoragent Apr 6, 2026
5a9cf1d
fix(vulkan): align PBR frag specialization struct with gen_frag.tmpl
cursoragent Apr 6, 2026
9aa0f64
fix(msvc): sync vcxproj with modular Vulkan and defer/ECS sources
cursoragent Apr 6, 2026
b2c37b7
docs: document native VM module load order and FS resolution (#47)
cursor[bot] Apr 6, 2026
7d119ea
tests: add run_vulkan launcher regression coverage
cursoragent Apr 6, 2026
cc4c5c6
fix(ci): Android GLimp link, Windows ded console, smoke arch paths
cursoragent Apr 6, 2026
40d5529
fix(ci): Windows ded stdout for smoke_test; macOS bundle binaries in bin
cursoragent Apr 6, 2026
b94e9db
Remove legacy r_vfog* cvars and vk_vfog module (#49)
cursor[bot] Apr 6, 2026
8900864
docs,scripts: production certification framework and readiness orches…
cursoragent Apr 6, 2026
ea5ac1f
docs,examples: add examples/ tree for build, renderer, and mod workflows
cursoragent Apr 6, 2026
0dd8300
ci,docs: Tier B self-hosted workflow; renderer_validation + title cer…
cursoragent Apr 6, 2026
21d19a4
Vulkan PBR: anisotropic GGX for direct specular with anisotropy map
cursoragent Apr 6, 2026
59020d4
Vulkan PBR: aniso visibility, IBL stretch, clearcoat/sheen energy
cursoragent Apr 6, 2026
aa34b02
examples: optional idtech3_demo.pk3 build; validation FINDINGS baseline
cursoragent Apr 6, 2026
a7e4d5f
docs: FINDINGS Tier A row without self-referential commit hash
cursoragent Apr 6, 2026
bd9d843
test: verify idtech3_demo.pk3 layout in ctest and validate_ci_build
cursoragent Apr 6, 2026
ec53409
Vulkan: extract qvk* proc pointers to vk_procs.c/h
cursoragent Apr 6, 2026
1acddf3
Vulkan: extract vk_create_shader_modules to vk_shader_modules.c
cursoragent Apr 6, 2026
c0c6845
Vulkan: extract vk_alloc_persistent_pipelines to vk_pipelines_persist…
cursoragent Apr 6, 2026
39d0e15
examples: demo_skeleton project to run idtech3_demo over user base/
cursoragent Apr 6, 2026
7e08960
examples: friendlier demo_skeleton + scripts/run_demo.sh
cursoragent Apr 6, 2026
12a89d3
Improve demo launcher UX and compile_game vulkan confusion
cursoragent Apr 6, 2026
ff683f8
Demo launch: release/local.env, skeleton run_demo.sh, setup writes ID…
cursoragent Apr 6, 2026
2d4ca15
Fix demo launcher when local.env has placeholder IDTECH3_DEMO_ROOT
cursoragent Apr 7, 2026
2be6b42
Clarify demo needs full base pk3s; preflight and better UI VM error
cursoragent Apr 7, 2026
0397128
demo: embed minimal native ui in idtech3_demo.pk3 for skeleton window
cursoragent Apr 7, 2026
28996ad
docs: stricter evidence roadmap + evidence_status.sh gap report
cursoragent Apr 7, 2026
fdf619e
Vulkan: extract framebuffer create/destroy to vk_framebuffers.c
cursoragent Apr 7, 2026
d8a2adb
refactor(vulkan): extract vk_attachments from vk.c
cursoragent Apr 7, 2026
f7d1f6b
refactor(vulkan): extract vk_resource_destroy from vk.c
cursoragent Apr 7, 2026
b945c19
Enable DTLS with OpenSSL by default; NanoSVG SVG; mesh import loaders
cursoragent Apr 7, 2026
0e9ff76
CI: fix MSVC OpenSSL path for DTLS (GITHUB_ENV + discovery)
cursoragent Apr 7, 2026
b61ce35
Vulkan: extract descriptor set alloc/updates to vk_descriptor_sets.c
cursoragent Apr 7, 2026
e582fb0
Vulkan: extract texture image create/upload to vk_texture_image.c
cursoragent Apr 7, 2026
9e844a1
Vulkan: extract post-process pipeline helpers to vk_pipeline_helpers.c
cursoragent Apr 7, 2026
02bf9c2
Vulkan: extract GPU occlusion queries to vk_occlusion.c
cursoragent Apr 7, 2026
b4d3cfd
Vulkan: extract main graphics pipeline factory to vk_create_pipeline.c
cursoragent Apr 7, 2026
bc3f1b7
Vulkan: extract draw/bind path to vk_draw_state.c
cursoragent Apr 7, 2026
68b65a1
Vulkan: extract volumetric/CBT/vegwind pipelines to vk_volumetric_pip…
cursoragent Apr 7, 2026
b8b1258
Vulkan: extract volumetric depth resolve and fluid sim to vk_volumetr…
cursoragent Apr 7, 2026
464bb7b
Vulkan: extract volumetric fog pass to vk_volumetric_pass_compute.c
cursoragent Apr 7, 2026
c59a71b
Vulkan: extract shutdown/release to vk_shutdown.c; move static VBO to…
cursoragent Apr 8, 2026
3348895
Vulkan: extract bloom/SSAO/OIT/SSR to vk_postfx_passes.c
cursoragent Apr 8, 2026
610ea05
Vulkan: extract in-pass clears to vk_clear_attachments.c
cursoragent Apr 8, 2026
87f7893
Vulkan: extract cubemap IBL prefilter to vk_cubemap_prefilter.c
cursoragent Apr 8, 2026
cc072fb
Android: recycle Vulkan surface on ANativeWindow destroy/recreate
cursoragent Apr 9, 2026
42ff806
Android: apkassets bootstrap, logcat Com_Printf, touch deltas, focus
cursoragent Apr 9, 2026
fdfca0f
Android: on-screen touch HUD (dual sticks + action buttons)
cursoragent Apr 9, 2026
fcca938
GOAP: correct A* planner, replan on world change, FEAR/TR-style defaults
cursoragent Apr 9, 2026
bb69ec4
docs: add GLTF.md (Vulkan-only, caps, animation/morph gaps)
cursoragent Apr 9, 2026
4950f7c
Vulkan glTF: runtime skeletal clip sampling and morph blending
cursoragent Apr 9, 2026
e5f1147
glTF PBR tess: fix TESS_PBR bitmask, qtangent recompute, mesh default…
cursoragent Apr 9, 2026
6f35a87
Android APK: enable full engine feature flags (minus game data)
cursoragent Apr 9, 2026
2c7567a
CI: align Android CMake job with Gradle feature flags
cursoragent Apr 9, 2026
9e81c0f
CI: fix Android Lua build, MSYS curl, branch triggers; relax Gradle JDK
cursoragent Apr 9, 2026
6daa3fe
CI: Bullet deps on Linux/macOS/MSYS; cache Android third-party downloads
cursoragent Apr 9, 2026
a72f8fb
Android DTLS: build static OpenSSL 3.0.15 when find_package fails
cursoragent Apr 9, 2026
a4f9f5f
Roadmap: refresh ROADMAP.md; CI Gradle APK + ANDROID_DEPS_CACHE
cursoragent Apr 9, 2026
7805fa4
CI: dedicated android-apk job for Gradle universal debug APK
cursoragent Apr 9, 2026
fb2cc70
README: per-renderer model format truth (Vulkan vs OpenGL)
cursoragent Apr 9, 2026
65443eb
Vulkan: extract vk.c modules (presentation, postfx refresh, veg wind,…
cursoragent Apr 9, 2026
c5c59e7
Vulkan: split vk_initialize and frame submit out of vk.c
cursoragent Apr 10, 2026
f2245ed
Vulkan: remove vk.c; sun shadow pass + MSAA shading in modules
cursoragent Apr 10, 2026
499a551
Vulkan: restore vk_validate_pbr_ibl_resources in vk_pbr_ibl_validate.c
cursoragent Apr 10, 2026
5f65e6b
Vulkan: restore cubemap pass + BRDF LUT bake (vk_create_brfdlut)
cursoragent Apr 10, 2026
a36a183
docs: refresh TODO_TRIAGE.md (vk.c removed, engine TODO scan, re-scan…
cursoragent Apr 10, 2026
c05ea7e
docs: fix stale vk.c pointers (terrain, fluid, RTX doc, triage)
cursoragent Apr 10, 2026
2a4d11d
feat(vulkan): Parallax Occlusion Mapping for PBR materials
cursoragent Apr 10, 2026
1142a32
refactor: rename POM cvars from r_pbr_pom* to r_pom*
cursoragent Apr 10, 2026
6783754
ci: improve cache reuse and apt/choco resilience
cursoragent Apr 10, 2026
da5e246
feat(vulkan): glTF GPU skinning and morph on PBR path
cursoragent Apr 10, 2026
61b96d9
docs: align README and renderer docs on OpenGL vs Vulkan models
cursoragent Apr 10, 2026
b946cd3
docs(ci): clarify Tier B/C validation and optional GAME_BASE secret
cursoragent Apr 10, 2026
bce4f39
docs: refresh Vulkan audit paths after vk.c split
cursoragent Apr 13, 2026
3245f81
fix(msvc): sync vulkan.vcxproj after vk.c split (#61)
timfox Apr 13, 2026
c318a4a
ci: fix renderer-tier-b workflow validation (secrets in job if) (#62)
timfox Apr 13, 2026
a13b1bb
feat(vulkan): glTF GPU morph with RE_SetEntityMorphWeight channels (#63)
timfox Apr 13, 2026
16aac06
feat(vulkan): glTF/IQM GPU morph top-8 + fixed morph SSBO layout (#64)
timfox Apr 13, 2026
a17c40b
ci(docs): require docs/GLTF.md in renderer regression manifest (#65)
timfox Apr 13, 2026
373b4fb
ci(renderer): extend regression check (docs + IQM_MORPH_TOP_K parity)…
timfox Apr 13, 2026
5e8b241
Android: fix Lua/OpenSSL cross-build; skip host Lua/Bullet on Android…
timfox Apr 13, 2026
ffc065f
ctest: harden smoke_test under parallel runs (#68)
timfox Apr 13, 2026
7701cb7
feat(vulkan): glTF GPU tangent Gram–Schmidt after skin+morph (r_gltfG…
timfox Apr 13, 2026
6f554db
android: Toast + logcat hint when no game data (pk3) (#70)
timfox Apr 13, 2026
494233b
Merge PR #71
cursor[bot] Apr 13, 2026
92537d0
Merge PR #58
cursor[bot] Apr 13, 2026
635a861
Merge PR #72: OpenGL glTF/OBJ/MD5 CPU tess
timfox Apr 13, 2026
97eca37
Merge PR #57
cursor[bot] Apr 13, 2026
80599e9
Merge PR #56
cursor[bot] Apr 13, 2026
be8fa8d
Merge PR #54
cursor[bot] Apr 13, 2026
e1c7910
Merge PR #59: docs audit pointers and glTF clarity
cursor[bot] Apr 13, 2026
8e03ab5
Merge PR #55
timfox Apr 13, 2026
3674a81
Merge PR #51
cursor[bot] Apr 13, 2026
9dc4889
Merge PR #52
cursor[bot] Apr 13, 2026
fc72f77
Merge origin/main; align run_vulkan test with main (test_run_vulkan_s…
cursoragent Apr 13, 2026
b9c5d37
Merge branch 'cursor/regression-test-coverage-f855' (PR #46); keep ma…
cursoragent Apr 13, 2026
f5e7b16
Merge PR #73: GLTF morph K parity in renderer_regression_check
timfox Apr 13, 2026
0b91972
Merge PR #74: glTF/IQM joint and morph cap parity
timfox Apr 13, 2026
3c9d4c5
Merge PR #75: OpenGL glTF CPU qtangent + _norm shader selection
timfox Apr 13, 2026
30d6011
OpenGL glTF: broaden normal-map heuristic; assert IQM_MORPH_TOP_K par…
timfox Apr 13, 2026
be551d3
Renderer validation: IQM_MORPH_MAX_CHANNELS parity + STATIC_ASSERT (#77)
timfox Apr 13, 2026
f25a732
OpenGL glTF: try base_norm when normal map path ends with _n (#78)
timfox Apr 13, 2026
b82bc2f
OpenGL glTF: deform tangents with morph+skin, Gram–Schmidt vs N (#79)
timfox Apr 13, 2026
99305c9
Audit: bound botlib l_precomp sprintf in platform trees; refresh audi…
timfox Apr 13, 2026
30d4bdc
Audit: align platform botlib be_ai_chat with bounded string APIs (#81)
timfox Apr 14, 2026
69c4abc
Docs: native qboolean is bool; clarify q_shared.h (#82)
timfox Apr 14, 2026
a7483d8
Build: optional ENABLE_LTO (IPO) for GCC/Clang Release (#83)
timfox Apr 14, 2026
b48aceb
Vulkan: dispatch vegetation-wind compute after tess upload (#84)
timfox Apr 14, 2026
76c7bc3
Vulkan: optional VK_NV_mesh_shader; log compute + DLSS policy (#85)
timfox Apr 14, 2026
27d4a2c
chore: resolve PR drift — branch aligned with main (next-gen-5 base r…
cursoragent Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
445 changes: 378 additions & 67 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

84 changes: 84 additions & 0 deletions .github/workflows/renderer-tier-b.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Tier B: content-backed renderer checks (GAME_BASE) on every main push.
#
# This job runs only when a repository variable OR secret provides the absolute path
# to a game **base** directory (see docs/renderer_validation/SELF_HOSTED_TIER_B.md).
# Prefer variable IDTECH3_GAME_BASE_PATH; use secret of the same name if the path must not appear in Settings UI.
#
# Requires a self-hosted runner labeled `idtech3-tierb` (plus `self-hosted`) with:
# - GAME_BASE path readable on that machine
# - Build deps (same family as docs/DEVELOPMENT_SETUP.md for Linux)
# - glslangValidator for renderer_regression_check.sh
#
# Note: GitHub does not allow `secrets.*` in job-level `if:` (workflow validation fails).
# A small ubuntu gate job evaluates var/secret in a step and sets `enabled` for the self-hosted job.

name: renderer-tier-b

permissions:
contents: read

on:
push:
branches:
- main
workflow_dispatch:

concurrency:
group: renderer-tier-b-${{ github.ref }}
cancel-in-progress: true

jobs:
tier_b_gate:
name: Tier B gate (config check)
runs-on: ubuntu-24.04
outputs:
enabled: ${{ steps.check.outputs.enabled }}
steps:
- id: check
env:
GAME_BASE_VAR: ${{ vars.IDTECH3_GAME_BASE_PATH }}
GAME_BASE_SECRET: ${{ secrets.IDTECH3_GAME_BASE_PATH }}
run: |
if [ -n "$GAME_BASE_VAR" ] || [ -n "$GAME_BASE_SECRET" ]; then
echo "enabled=true" >> "$GITHUB_OUTPUT"
echo "Tier B: IDTECH3_GAME_BASE_PATH is set (variable and/or secret); self-hosted job will run."
else
echo "enabled=false" >> "$GITHUB_OUTPUT"
echo "Tier B: IDTECH3_GAME_BASE_PATH unset — skipping self-hosted regression (forks/engine-only repos)."
fi

gamebase-regression:
name: Tier B (GAME_BASE regression)
needs: tier_b_gate
if: needs.tier_b_gate.outputs.enabled == 'true'
runs-on: [self-hosted, idtech3-tierb]
env:
DEBIAN_FRONTEND: noninteractive
# Variable wins if both are set (same rule as docs/renderer_validation/SELF_HOSTED_TIER_B.md).
GAME_BASE: ${{ vars.IDTECH3_GAME_BASE_PATH != '' && vars.IDTECH3_GAME_BASE_PATH || secrets.IDTECH3_GAME_BASE_PATH }}
steps:
- uses: actions/checkout@v4

- name: Verify GAME_BASE
run: |
set -euo pipefail
test -d "$GAME_BASE" || { echo "GAME_BASE is not a directory: $GAME_BASE" >&2; exit 1; }
echo "Using GAME_BASE=$GAME_BASE"

- name: Build Vulkan (Release)
env:
CFLAGS: "-DSKIP_IDPAK_CHECK=1"
CXXFLAGS: "-DSKIP_IDPAK_CHECK=1"
run: |
set -euo pipefail
./scripts/compile_engine.sh vulkan

- name: Renderer regression check (repo + optional BSP)
run: |
set -euo pipefail
GAME_BASE="$GAME_BASE" ./scripts/renderer_regression_check.sh

- name: Renderer regression map load (dedicated)
run: |
set -euo pipefail
GAME_BASE="$GAME_BASE" ./scripts/renderer_regression_maps.sh
13 changes: 12 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,15 @@ build_log.txt
src/renderers/vulkan/shaders/spirv/generated/backups/
android/.gradle/
android/app/.cxx/
android/local.properties
android/local.properties
.ci-android-deps/

# Local copies of examples/*/*.env.example (optional secrets / machine paths)
/local_validation.env
/game_base.env
/examples/demo_skeleton/local.env

# demo_skeleton/base/ is otherwise matched by `base/` above — keep only the placeholder tracked
!/examples/demo_skeleton/base/
/examples/demo_skeleton/base/*
!/examples/demo_skeleton/base/README.txt
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]

### Added
- `examples/demo_game`: `idtech3_demo.pk3` embeds a minimal native UI module (`vm/ui<arch>.so` or `.dll`) so the demo skeleton can open a window without retail `ui.qvm` (`examples/demo_game/native/ui_skeleton_stub.c`, CMake target `demo_ui_skeleton`).
- `examples/demo_skeleton/`: user-friendly demo playfield (`./scripts/run_demo.sh`, auto-detect layout, `baseq3` hint, help text); `scripts/run_demo.sh` entry point; `base/` + `idtech3_demo/` README stubs.
- CTest `test_demo_game_pk3`: verifies `examples/demo_game` zip layout (configs + optional **`cc`**-built **`vm/ui*.so`**) matches CMake staging.
- Vulkan: `vk_procs.c` holds `qvk*` function pointer definitions (split from `vk.c`); `vk_instance.c` no longer duplicates `extern` declarations.
- Vulkan: `vk_shader_modules.c` holds `vk_create_shader_modules` and includes `shader_data.c` / `shader_binding.c` (split from `vk.c`).
- Vulkan: `vk_pipelines_persistent.c` holds `vk_alloc_persistent_pipelines` (split from `vk.c`).
- CHANGELOG.md for release tracking
- Semantic versioning in CMake (project VERSION 1.0.0)
- ENABLE_FORTIFY_SOURCE option for buffer overflow protection (default ON)
Expand All @@ -23,6 +29,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- FORTIFY_SOURCE now enabled by default in Release builds (compile_engine.sh)
- Vulkan cinematic path: r_fboCinematic cvar, vk_in_render_pass reset, luminance skip workaround
- Vulkan PBR: direct specular uses **anisotropic GGX** when an anisotropy map is bound (`r_pbr_anisotropicSpecular` default 1); replaces the old roughness-only blend. Re-run `scripts/compile_shaders.sh` after changing `gen_frag.tmpl`.
- Vulkan PBR: **anisotropic visibility** for direct light; optional **IBL roughness stretch** from the anisotropy map (`r_pbr_iblAnisoStretch`); **clearcoat** base attenuation and **Charlie sheen** with optional fourth `sheenScale` roughness token.

### Removed
- Legacy `r_vfog*` engine cvars and `vk_vfog.c`/`vk_vfog.h`: volumetric fog is configured only via `r_volumetricFog*` (and map/`r_fog*` as documented). Editor `worldspawn` keys `vfog_*` remain separate map data, not console cvars.

### Security
- _FORTIFY_SOURCE=2 enabled for GCC/Clang Release builds when ENABLE_FORTIFY_SOURCE=ON
Expand Down
5 changes: 5 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ The renderer abstraction layer is **architecturally sensitive**:
- **C**: C23 with modern features (designated initializers, constexpr, etc.)
- **C++**: C++23 for complex systems (RAII, templates, smart pointers)
- **Compatibility**: Code must compile with GCC 15+ and Clang 18+
- **Booleans**: On native builds, **`qboolean` is `bool`** (from `<stdbool.h>`) and **`qtrue` / `qfalse`** expand to **`true` / `false`** (`q_shared.h`). Prefer **`qboolean`** for engine/game APIs and **`qtrue` / `qfalse`** in literals so code stays compatible with the legacy **`Q3_VM`** path, which still uses an enum-backed `qboolean`. Do not reintroduce **`typedef enum { qfalse, qtrue } qboolean`** for native targets.

### Naming Conventions

Expand Down Expand Up @@ -275,6 +276,10 @@ sudo apt-get install cmake clang-18 gcc-15 ninja-build

# Clean build
./scripts/compile_engine.sh clean vulkan

# Optional link-time optimization (Release/RelWithDebInfo; GCC/Clang; longer links)
./scripts/compile_engine.sh vulkan lto
# Equivalent: cmake -DENABLE_LTO=ON ... (see CMakeLists.txt; MSVC not wired for this option)
```

#### Windows (Cross-Platform Validation)
Expand Down
Loading
Loading