|
|
PixelBullet
0.0.1
A C++ game engine
|
This page defines physical ownership. Dependency and visibility rules are in Dependency and API Surfaces; executable and content classifications are in the surface taxonomy.
engine/include/pixelbullet owns backend-neutral engine concepts, value types, and facades intentionally available to first-party consumers. Public includes use pixelbullet/<domain>/<snake_case>.h. Public headers do not expose Vulkan, Volk, GLFW native handles, or backend implementation types.
This is a source-level API, not a frozen SDK. The root //engine:pixelbullet_workspace_api target compiles the umbrella header; normal first-party code uses focused headers and subsystem targets.
engine/src owns private implementations of public facades, backend-neutral runtime state, and focused adapters. Implementations consume exact subsystem contracts rather than routing through root runtime aggregates.
Neutral foundation ownership is split by purpose:
engine/integration owns narrow contracts shared by engine implementation, frameworks, BulletSketch, products, examples, and tests without promoting those contracts into public engine API. It is not a general private-header bucket.
engine/backend owns backend-specific implementation. The current production backend is the package family under engine/backend/graphics/vulkan. Backend code may use Vulkan directly; production framework, editor, product, and example code may not include it.
framework is the first-party layer above engine, not an operating-system abstraction:
Root framework facade targets are the preferred concrete-application boundary when a consumer does not need a named leaf package. Rich editor and test code may use exact leaf targets when the ownership relationship is intentional.
editor owns BulletSketch application composition and editor-specific UI, workspace, document, preview, material, diagnostics, and launch services. It builds on framework/authoring, uses ScenePlayClient for in-process play, and does not make authored assets depend on editor implementation.
tools/scene_runner owns generic external authored-scene execution. Examples own only their teaching-specific application composition. A product owns its game rules, session lifecycle, interactive adapters, assets, package, and composition root.
Core utilities and neutral policy-light modules use STL-adjacent lower-case functions where established. Engine domain APIs, frameworks, editor, and products use PascalCase functions. New camelCase C++ APIs are not introduced; serialized keys, shader ABI names, macros, third-party APIs, and user-visible text retain their required spelling.
Focused semantic modules are preferred over a catch-all foundation/ or resources/ directory.