Frees screen shader and releases GPU resources (removes from shader map, clears if currently active).
Takes shader (shader handle from b3dLoadScreenShader, positive integer).
Returns nothing.
Shaders
Parameters & Returns
Parameters
shaderInt
Returns
Void
Quick Summary
Frees screen shader and releases GPU resources (removes from shader map, clears if currently active).
Takes shader (shader handle from b3dLoadScreenShader, positive integer).
Returns nothing.
Technical Exegesis...
Frees screen shader and releases GPU resources (removes from shader map, clears if currently active). Takes shader (shader handle from b3dLoadScreenShader, positive integer). Returns nothing. Removes shader from g_screenShaders3D map (erases entry, releases PSO and bytecode), clears active shader if this one (sets g_activeScreenShader3D = 0 if freeing currently applied shader, reverts to default).
Frees screen shader and releases GPU resources (removes from shader map, clears if currently active). Takes shader (shader handle from b3dLoadScreenShader, positive integer). Returns nothing. Removes shader from g_screenShaders3D map (erases entry, releases PSO and bytecode), clears active shader if this one (sets g_activeScreenShader3D = 0 if freeing currently applied shader, reverts to default). Use to release shader resources (free memory and GPU objects when shader no longer needed), cleanup on exit (free all shaders before program close), or dynamic shader management (load/free shaders as needed for scene). Free behavior: checks shader exists (looks up in g_screenShaders3D map, ignores if not found), clears if active (if g_activeScreenShader3D == shader, sets to 0, reverts to default rendering next frame), removes from map (g_screenShaders3D.erase, releases ScreenShader3D structure), releases PSO (ID3D12PipelineState destroyed automatically via ComPtr, GPU resources freed). Use cases: (1) Cleanup on exit (For Each shader: b3dFreeScreenShader(shader) free all before close), (2) Scene transition (free unused shaders when switching levels, load new ones for next scene), (3) Dynamic effects (load shader for cutscene, free after cutscene ends), (4) Memory management (free old shaders to make room for new ones, prevent accumulation), (5) Error recovery (free failed shader attempts, retry with different file). Common patterns: cleanup = b3dFreeScreenShader(shader) free after use; conditional = If Not usingShader Then b3dFreeScreenShader(shader) free if unused. Typical workflow: load shader (shader = b3dLoadScreenShader("effect.hlsl")), use shader (b3dApplyScreenShader(shader) for frames), free shader (this function when done, releases resources). Active shader handling: clears active if match (prevents using freed shader, automatic safety), reverts to default (g_activeScreenShader3D = 0, next frame uses default rendering), no visual glitch (screen renders normally after freeing active shader, seamless transition). Shader lifetime: loaded shaders persist (remain in memory until explicitly freed, not automatic cleanup), manual management (user must call FreeScreenShader, engine doesn't auto-free), typical lifetime (load once at start, free once at end, or load/free per scene). GPU resource cleanup: PSO destroyed (ID3D12PipelineState released, GPU state object freed), bytecode cleared (std::vector<BYTE> released, memory freed), map entry removed (g_screenShaders3D entry erased, slot freed for reuse). Validation: ignores if shader <= 0 (invalid handle, early return), ignores if shader not found (not in g_screenShaders3D map, silent no-op), safe to call multiple times (freeing already-freed shader harmless, just no-op). No return value: void function (doesn't indicate success/failure), assumes success (shader freed if existed, nothing if didn't), silent operation (no error messages, no confirmation prints). Related: b3dLoadScreenShader loads shader (creates shader freed by this function), b3dApplyScreenShader applies shader (uses shader, should not free while active), b3dClearScreenShader clears active (alternative to freeing, just deactivates without freeing), b3dSetDefaultScreenShader same as clear (reverts to default without freeing).