chore: sync from fn-registry agent
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
---
|
||||
name: engine_smoke
|
||||
lang: cpp
|
||||
domain: gamedev
|
||||
description: "Smoke test del stack gamedev: SDL3 + sokol_gfx + Dear ImGui. Valida que el stack compila y corre en PC (Linux/Windows desktop GL) y WASM (WebGL2 via emscripten) antes de invertir tiempo en runtime real (issue 0072a)."
|
||||
tags: [imgui, sdl3, sokol, gamedev, smoke, wasm]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
framework: "imgui"
|
||||
entry_point: "main.cpp"
|
||||
dir_path: "cpp/apps/engine_smoke"
|
||||
repo_url: ""
|
||||
e2e_checks:
|
||||
- id: build_pc
|
||||
cmd: "cmake --build build --target engine_smoke -j"
|
||||
timeout_s: 300
|
||||
- id: smoke_self
|
||||
cmd: "timeout 5 ./build/cpp/apps/engine_smoke/engine_smoke || test $? = 124"
|
||||
timeout_s: 10
|
||||
severity: warning # requires display in CI; warning, not critical
|
||||
- id: build_wasm
|
||||
cmd: "bash bash/functions/pipelines/build_wasm_cpp_app.sh engine_smoke"
|
||||
timeout_s: 600
|
||||
severity: warning # requires emsdk
|
||||
- id: wasm_size_budget
|
||||
cmd: "test -f build/wasm/engine_smoke/engine_smoke.wasm.gz && test $(stat -c%s build/wasm/engine_smoke/engine_smoke.wasm.gz) -lt 1572864"
|
||||
severity: warning
|
||||
---
|
||||
|
||||
# engine_smoke
|
||||
|
||||
Primer experimento del stack gamedev (issue [0072a](../../../dev/issues/0072a-gamedev-smoke-sdl3-sokol-imgui.md)).
|
||||
|
||||
## Que hace
|
||||
|
||||
1. Abre ventana SDL3 1280x720 con context OpenGL.
|
||||
2. Inicializa `sokol_gfx` sobre ese context (GL 3.3 desktop, GLES3 en WASM).
|
||||
3. Pinta un fullscreen triangle con un fragment shader animado (gradient time-based).
|
||||
4. Pinta sobre eso un panel ImGui con FPS, tamaño de ventana y boton Quit.
|
||||
|
||||
Sin `fn_framework`, sin `add_imgui_app()`. CMakeLists standalone para evitar contaminar el shell desktop hasta validar el stack.
|
||||
|
||||
## Build PC (Linux)
|
||||
|
||||
Desde la raiz del fn_registry:
|
||||
|
||||
```bash
|
||||
cmake -S cpp -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build --target engine_smoke -j
|
||||
./build/cpp/apps/engine_smoke/engine_smoke
|
||||
```
|
||||
|
||||
## Build WASM
|
||||
|
||||
Requiere `emsdk` instalado y activado en el shell. Ver `cpp/vendor/sokol.VENDORING.md` y `bash/functions/pipelines/build_wasm_cpp_app.sh`.
|
||||
|
||||
```bash
|
||||
bash bash/functions/pipelines/build_wasm_cpp_app.sh engine_smoke
|
||||
# Sirve build/wasm/engine_smoke/engine_smoke.html en navegador
|
||||
```
|
||||
|
||||
Budget objetivo: gzip ≤ 1.5 MB.
|
||||
|
||||
## Stack vendoreado
|
||||
|
||||
- `cpp/vendor/sdl3/` — SDL3 release-3.4.8
|
||||
- `cpp/vendor/sokol/` — sokol_gfx single-header pinned commit
|
||||
- `cpp/vendor/imgui/` — ImGui 1.92.7 con backends `imgui_impl_sdl3` + `imgui_impl_opengl3`
|
||||
|
||||
## Notas de implementacion
|
||||
|
||||
- Fullscreen tri via `gl_VertexID` (3 vertices, no VBO). Cubre todo el viewport sin atributos.
|
||||
- Uniform `u_time` actualizado por frame.
|
||||
- Backend ImGui = `imgui_impl_opengl3` (oficial, 0 LoC custom). Compatible WebGL2 emscripten.
|
||||
- `SOKOL_GLCORE` desktop / `SOKOL_GLES3` web — selccion compile-time.
|
||||
- `setup_gfx` se llama UNA VEZ tras crear el GL context. `sg_setup` toma `sglue_environment()` que lee el contexto activo.
|
||||
|
||||
## No-objetivos (smoke)
|
||||
|
||||
- No texturas reales (eso entra en 0072b).
|
||||
- No audio.
|
||||
- No input game-style.
|
||||
- No fn_framework integration.
|
||||
- No mobile (Android/iOS son issues 0072g/h).
|
||||
Reference in New Issue
Block a user