Namespace PopcorningGuineaPig.Engine.Rendering
Classes
- CubemapSky
Cubemap sky loaded through IVirtualFileSystem. Six images, or one lat-long (raylib's
LoadTextureCubemaphas no lat-long layout, so the engine converts it). Drawn first insideBeginMode3D. The five-face Skybox stays for painted skies. IBL is a hemisphere taken from this image and is off until SetIbl(bool). See docs/architecture/skybox.md.
- InstancedMeshDraw
Many copies of one mesh, one draw. The shader declares
in mat4 instanceTransform. Each matrix is theDrawModelExproduct: scale, then rotation, then translation. Copies share one material. A different tint is a different draw.
- ModelSockets
Named attach points exported in a glTF/GLB. Raylib's
LoadModeldrops empties, so this reads the JSON chunk directly.
- ParticlePool
Fixed CPU billboard pool. Technique from Banqi
CaptureVfxand SvenParticlePool. No per-particle heap, no Box3D, no PGPSCN nodes.
- ParticlePresets
Tiny optional recipes. Game-specific bursts (feathers, axe slashes) stay in the games.
- Skybox
Axis-aligned sky cube. XZ follows the camera; Y sits on the ground so the map is the floor. Six ordinary 2D textures, NegY optional. Depth-write off, drawn first inside
BeginMode3D. See docs/architecture/skybox.md.
- SkyboxGeometry
Cube that follows the camera in XZ and sits on GroundY. Raylib-free so tests can lock the invariant.
Structs
- Frustum
Perspective camera as six inward planes. A box that crosses a plane stays visible. Near and far follow raylib
BeginMode3D(DefaultNear, DefaultFar) unless the caller passes others. A default value, and an orthographic camera, accept every box.
- Particle
One mote. Value type; the pool never boxes it. Games fill this via ParticleConfig or by constructing one and calling Emit(in Particle).
- ParticleConfig
Spawn recipe for Emit(int, Vector3, in ParticleConfig). Velocity is a cone (yaw full circle, pitch range) plus an optional bias. Physics is velocity + gravity + drag — not Box3D.