Assigns custom shader to entity (sets entity's shader handle, used during rendering).
Takes entity (entity handle from b3dLoadMesh/b3dLoadAnimMesh/etc, positive integer), shader (shader handle from b3dLoadEntityShader, positive integer, or 0 for default).
Returns nothing.
Shaders
Parameters & Returns
Parameters
entityInt
shaderInt
Returns
Void
Quick Summary
Assigns custom shader to entity (sets entity's shader handle, used during rendering).
Takes entity (entity handle from b3dLoadMesh/b3dLoadAnimMesh/etc, positive integer), shader (shader handle from b3dLoadEntityShader, positive integer, or 0 for default).
Returns nothing.
Technical Exegesis...
Assigns custom shader to entity (sets entity's shader handle, used during rendering). Takes entity (entity handle from b3dLoadMesh/b3dLoadAnimMesh/etc, positive integer), shader (shader handle from b3dLoadEntityShader, positive integer, or 0 for default). Returns nothing. Sets entity.shaderHandle = shader (stores handle in entity's structure, persists until changed).
Assigns custom shader to entity (sets entity's shader handle, used during rendering). Takes entity (entity handle from b3dLoadMesh/b3dLoadAnimMesh/etc, positive integer), shader (shader handle from b3dLoadEntityShader, positive integer, or 0 for default). Returns nothing. Sets entity.shaderHandle = shader (stores handle in entity's structure, persists until changed). Use to apply custom rendering (assign toon shader to character, outline shader to important objects), switch effects dynamically (change shader based on game state, conditional effects), or clear custom shader (pass 0 to revert to default mesh shader). Assignment behavior: stores shader handle (entity.shaderHandle stores value, used by rendering pipeline), immediate next frame (shader applies starting next b3dRenderWorld call), persists until changed (remains active each frame until different b3dEntityShader called), shader 0 reverts to default (passing 0 clears custom shader, uses default mesh pixel shader). Use cases: (1) Apply toon shader (b3dEntityShader(character, toonShader) cel shading on character mesh), (2) Switch conditionally (If powerUp Then b3dEntityShader(player, glowShader) Else b3dEntityShader(player, 0)), (3) Outline important objects (b3dEntityShader(targetEntity, outlineShader) highlight target), (4) Holographic effect (b3dEntityShader(hologram, holoShader) transparent scan lines), (5) Clear shader (b3dEntityShader(entity, 0) revert to default rendering). Common patterns: assign = b3dEntityShader(entity, shader) apply shader; clear = b3dEntityShader(entity, 0) revert to default; conditional = If condition Then b3dEntityShader(entity, effectShader). Typical workflow: load shader (shader = b3dLoadEntityShader("effect.hlsl")), configure parameters (b3dSetEntityShaderFloat/Int/etc set uniforms), assign to entity (this function, activates for entity), render (b3dRenderWorld applies shader to this entity's mesh), update or clear (call b3dEntityShader again to change/clear shader). Rendering pipeline: entity rendered with custom shader (PSO from shader handle used instead of default mesh PSO), vertex shader unchanged (default mesh vertex shader always used, only pixel shader replaced), parameters passed (shader's floatParams/intParams/textureParams uploaded to constant buffer), per-entity basis (different entities can use different shaders, mixed rendering). Shader persistence: active until changed (shader applies every frame automatically, engine uses entity.shaderHandle), call once to enable (don't need to call every frame, persists across frames), call again to switch (change active shader, instant switch next frame), call with 0 to disable (reverts to default mesh shader, no custom effects). Multiple entities: each entity has independent shader (entity1.shaderHandle separate from entity2.shaderHandle), same shader for many entities OK (multiple entities can reference same shader handle, efficient shader reuse), mixed rendering (some entities with shaders, some without, rendered in same frame). Shader sharing: multiple entities one shader efficient (shader loaded once, PSO created once, referenced by many entities), parameters NOT per-entity (shader's floatParams shared by all entities using it, can't have different parameters per entity), workaround (load multiple instances of shader with different parameters, or use per-entity properties like entity color). Validation: ignores if entity not found (entity not in g_entities map, silent no-op), accepts any shader value (positive for valid shader, 0 for default, negative treated as 0), doesn't check shader exists (assumes valid handle, using invalid shader handle may crash or render with default). No return value: void function (doesn't indicate success/failure), assumes success (shader assigned if entity valid, nothing if invalid), silent operation (no error messages, no confirmation prints). Performance: assign cost zero (flag set, trivial CPU operation), shader cost depends on complexity (per-pixel operation, simple shaders ~0.1ms, complex shaders ~1-5ms per entity), multiple entities with shaders OK (PSO switch cost minimal, batching may be affected). Related: b3dLoadEntityShader loads shader (creates shader assigned by this function), b3dFreeEntityShader frees shader (should not assign after freeing), b3dGetEntityShader queries shader (returns shader handle assigned to entity), b3dSetEntityShaderFloat sets shader parameter (configures shader uniform, used before/after assign), b3dSetEntityShaderInt sets shader parameter (configures shader uniform), b3dSetEntityShaderFloat2/Float3/Float4 set vector parameters (multiple component uniforms), b3dSetEntityShaderTexture sets shader texture (custom texture binding).