PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
PixelBullet Documentation

This site is the generated documentation home for the PixelBullet workspace. It complements the repository root README.md, which remains the main onboarding document for host setup, build/test quickstarts, and day-to-day development workflows.

What Lives Here

  • Hand-authored documentation pages under docs/
  • Generated API and source documentation for the public include tree under engine/include/pixelbullet plus the implementation tree under engine/src
  • Durable module-local notes that are useful to keep alongside the code they describe

Documentation Map

Guides

  • Repo development and distribution model
  • Graphics roadmap and asset contract
  • Logging workflow

Module Notes

  • The graphics and shader pipeline notes live in the Graphics Module page generated from engine/src/graphics/module_notes.md.

API Surface

  • Public engine headers live under engine/include/pixelbullet and are exported through curated engine Bazel targets.
  • Repo-private first-party engine bridges live under engine/private and are not part of the source-level public API surface.
  • Within scene-private code, engine/private/scene/common owns the shared scene model and helper layer, while scene/authoring, scene/runtime, and scene/rendering stay domain-specific.
  • engine/private/scene/rendering is reserved for renderer-facing subrender, shadow, and render-resource support rather than shared camera, extraction, analysis, or transform/prefab resolution surfaces.
  • The cleaned host/runtime graphics bridge is now part of the public engine include surface under engine/include/pixelbullet/graphics, including renderer, render-target, render-stage, render-frame-context, GPU diagnostics, and GPU-session helpers.
  • engine/private/graphics/runtime is now reserved for repo-private host binding plus explicit non-default runtime-support image/resource wrappers, while graphics/rendering stays the lower-level backend/resource/test-support surface.
  • GPU launch-default persistence is also public under engine/include/pixelbullet/application/launch_gpu_defaults.h; engine/private/application/rmlui remains private.
  • //engine:pixelbullet_workspace_api is the retained header-only umbrella target for pixelbullet/pixelbullet.h.
  • The engine implementation surface is split across subsystem libraries such as pixelbullet_core, pixelbullet_filesystem, pixelbullet_assets, pixelbullet_scene, pixelbullet_window, pixelbullet_audio, pixelbullet_graphics, pixelbullet_application, and pixelbullet_imgui.
  • pixelbullet_application is the application framework surface, while pixelbullet_imgui is the optional Vulkan/GLFW ImGui integration layer.
  • The source-level public header surface lives under engine/include/pixelbullet. The only supported public include form is pixelbullet/<subsystem>/<snake_case>.h. First-party repo code uses pixelbullet/private/... for engine-private bridge headers, and lower-level backend and plumbing headers remain internal under engine/src.
  • platform/authoring, platform/scene_play, and platform/ui are first-party internal platform layers shared by the editor, products, and examples, not external distribution surfaces.
  • platform/authoring owns the reusable non-UI authoring core; editor/ is the authoring client and UI shell built on top of it.
  • platform/scene_play owns the canonical runtime client, concrete scene-play layer, and shared presentation spine used by the editor, products, and examples.
  • platform/ui owns capability-based runtime-UI services rather than separate live-vs-authoring facades.
  • products/ is the home for first-party playable builds that consume that platform, currently including level_slice, behavior_lab, and world_sandbox.
  • world_sandbox is the dedicated graphics-first exploration product; level_slice and behavior_lab remain gameplay and logic pressure surfaces respectively.
  • The editor, products, and curated examples stay application-focused; their source trees are not treated as primary API documentation surfaces, and first-party code should use direct includes plus explicit subsystem deps rather than pixelbullet_workspace_api.
  • tests/engine covers first-party engine API and behavior, while tests/internal/engine is the intentional home for engine-private coverage.

Build And Verification Entry Points

The repository is Bazel-first. The main entrypoints are:

bazel test //:fast_ci_tests
bazel build --config=debug //engine:pixelbullet_workspace_api
bazel run //tools/dev:refresh_compile_commands
bazel build //doxygen:html

The generated HTML output is written under bazel-bin/doxygen/html/.

Optional slower validation suites:

bazel test //:desktop_smoke_tests
bazel test //:extended_regression_tests
bazel test //:artifact_smoke_tests
bazel test //:repo_policy_tests
bazel test //:repo_audit_tests

Local CI Parity

PixelBullet supports local job parity, not full GitLab runner emulation.

Windows/MSVC:

.\ci\bootstrap_wsl.ps1
.\ci\local.ps1 fast_ci
.\ci\local.ps1 desktop_smoke
.\ci\local.ps1 extended_regression
.\ci\local.ps1 -Wsl fast_ci

Bash or WSL:

bash ci/bootstrap_wsl.sh
bash ci/local.sh fast_ci
bash ci/local.sh desktop_smoke
bash ci/local.sh extended_regression

Use the bootstrap script when Ubuntu/WSL does not already have Bazelisk on PATH. Add -InstallSystemPackages or --install-system-packages if you want the wrapper to install the broader Ubuntu toolchain with apt-get.

Packaging Notes

PixelBullet currently treats the editor runtime bundle as the only intentional packaged output:

  • //packaging:bundle_editor_release for the editor runtime bundle

The per-app runtime bundle targets remain available for first-party local workflows:

  • //packaging:bundle_level_slice_release for the level_slice runtime bundle
  • //packaging:bundle_behavior_lab_release for the behavior_lab runtime bundle
  • //packaging:bundle_world_sandbox_release for the world_sandbox runtime bundle

Those runtime bundle targets, including their _debug variants, should still be treated as host-specific developer artifacts rather than portable distributions.

The legacy aggregate Bazel targets //engine:pixelbullet_foundation and //engine:pixelbullet_engine are no longer part of the supported surface.

Theme Integration

This site uses a pinned upstream doxygen-awesome-css dependency through Bazel, plus a small repo-local header and logo layer under doxygen/theme/ to preserve the PixelBullet presentation. The plain Doxygen helper reuses the same staged theme assets instead of keeping a vendored theme copy in the workspace.