Enables/disables quad rays system (activates volumetric light post-processing, shows/hides quad ray billboards). Takes enable (1 = enable quad rays, 0 = disable). Returns nothing. Sets g_quadRaysEnabled flag (activates post-processing effect), initializes quad rays system on first enable (calls InitializeQuadRaysSystem, creates occlusion textures and shaders), shows/hides quad ray billboards (entity.visible = true/false for all quad ray billboard entities).
Enables/disables quad rays system (activates volumetric light post-processing, shows/hides quad ray billboards). Takes enable (1 = enable quad rays, 0 = disable). Returns nothing. Sets g_quadRaysEnabled flag (activates post-processing effect), initializes quad rays system on first enable (calls InitializeQuadRaysSystem, creates occlusion textures and shaders), shows/hides quad ray billboards (entity.visible = true/false for all quad ray billboard entities). Use to toggle volumetric light effect (enable for dramatic lighting, disable for performance), control visibility of god rays (atmospheric effect on/off), or test performance impact (measure framerate with/without quad rays). Enable initializes system: calls InitializeQuadRaysSystem (creates R8_UNORM occlusion texture 1024x576, compiles quad rays compute shader, allocates shader resources), sets g_quadRaysEnabled = true (activates rendering pipeline), shows all quad ray billboards (loops through g_entities, finds quadRayBillboardHandle entities, sets visible = true). Disable tears down effect: sets g_quadRaysEnabled = false (deactivates rendering pipeline, skips occlusion pass and post-processing), hides all quad ray billboards (sets visible = false for all quad ray billboard entities), resources remain allocated (textures and shaders persist, quick re-enable without reallocation).
Quad ray billboards: NOT IMPLEMENTED YET (quadRayBillboardHandle = -1 for all entities currently, billboard-based quad rays pending), mesh-based quad rays work (isQuadRaySource entities render in occlusion pass, function still useful for enable/disable). Enable behavior: first enable initializes (creates GPU resources, one-time setup cost ~1ms), subsequent enables reactivate (no resource creation, instant), shows billboards (future feature, currently no-op). Disable behavior: hides effect immediately (no rendering next frame), preserves settings (g_quadRaysSettings unchanged, intensity/decay/samples remain configured), fast toggle (enable/disable per-frame possible, minimal overhead). Use cases: (1) Toggle effect (enable for outdoor scenes, disable for indoor caves), (2) Performance testing (measure FPS impact of quad rays, compare enabled vs disabled), (3) Debugging (enable to visualize volumetric light, disable to isolate other rendering issues), (4) Dynamic effect (enable during sunrise/sunset, disable at night), (5) User settings (graphics quality option, let user toggle volumetric lighting).
Common patterns: startup initialization = b3dEnableQuadRays(1) enable system once at start, configure settings afterward; toggle effect = If sunny Then b3dEnableQuadRays(1) Else b3dEnableQuadRays(0) toggle based on weather; performance mode = If lowQuality Then b3dEnableQuadRays(0) disable for low-end hardware. Typical usage: create quad ray sources (b3dLoadQuadRayMesh loads source meshes, position/rotate sources in scene), configure global settings (b3dSetQuadRaysIntensity/Decay/Samples/Length set effect parameters), enable system (this function, activates effect), configure per-entity settings (b3dSetQuadRayFadeDistance/RadianceDistance/Direction customize individual sources). Initialization performance: first enable creates GPU resources (occlusion texture allocation ~0.5ms, shader compilation ~1ms, total ~1-2ms one-time cost), subsequent enables instant (resources already exist, flag toggle only), disable instant (flag toggle, no GPU work).
Quad rays rendering pipeline when enabled: (1) Occlusion pass (render quad ray sources WHITE, all other geometry BLACK to R8_UNORM texture 1024x576), (2) Post-processing compute shader (reads occlusion texture, traces rays from white pixels, samples numSamples times per ray, accumulates light based on intensity/decay/weight), (3) Blend with main scene (additive blend, quad rays added to final frame buffer). When disabled: skips occlusion pass (no quad ray source rendering), skips post-processing (no ray tracing compute shader), no blend (quad rays not added to frame), saves ~2-3ms per frame (typical cost of quad rays system). Global settings persist: intensity/decay/weight/exposure/samples/length unchanged (b3dSetQuadRays functions set g_quadRaysSettings, values persist across enable/disable), per-entity settings unchanged (fadeStart/fadeFalloff/radiance/direction/spread remain configured).
Thread-safe: function safe to call from main thread (rendering functions not thread-safe, call during setup or main loop), enable/disable per-frame possible (toggle dynamically, responds immediately next frame). Validation: no parameters validated (enable treated as boolean, non-zero = true, zero = false), no error messages (InitializeQuadRaysSystem may fail silently, check g_quadRaysEnabled after enable to verify). Related: b3dLoadQuadRayMesh creates quad ray source (load mesh and mark as source, required before enabling system), b3dSetQuadRaysIntensity configures brightness (global intensity multiplier, affects all quad rays), b3dSetQuadRaysDecay configures falloff (ray intensity decay along length, higher decay = shorter visible rays), b3dSetQuadRaysSamples configures quality (8-512 samples, more samples = smoother rays but slower), b3dSetQuadRaysLength configures ray length (world units, how far rays extend from source), b3dShowQuadRayEmitters shows source meshes (debugging, visualize quad ray source positions).