summaryrefslogtreecommitdiffstats
path: root/CONTEXT.md
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-11-04 21:35:44 +0100
committersalmonik <salmonik@tuta.io>2026-11-04 21:35:44 +0100
commitc35fc21f345ac9ecf9017115c4481a1147d05206 (patch)
tree6907a027a097aec5af994b5bdcb20dddce6e984a /CONTEXT.md
parentChams: make Fullbright a white-hot additive glow (diff)
downloadhl2h-c35fc21f345ac9ecf9017115c4481a1147d05206.tar.gz
hl2h-c35fc21f345ac9ecf9017115c4481a1147d05206.zip
Chams: real additive material, addref cached materials
Testing on :99 showed ADDITIVE on debugtranslucentsinglecolor did nothing and alpha lost the colour, because that VMT has no $translucent and the engine bound an unreferenced material. Use debug/debugtranslucentmodelhulls (VMT has $additive 1 + $color) for Additive/Fullbright, and addref every preloaded material so the engine stops warning "bad reference count 0" and applies $color/ColorModulate. Verified: Solid is flat blue, Additive is a translucent coloured glow, Fullbright is a white additive glow, White is opaque white. Also drop the viewmodel additive base (the solid material is opaque, so it made an opaque blob) and never call FindMaterial inside DrawModelExecute. Document that the alpha control is stored but has no effect until a custom $translucent model VMT is added.
Diffstat (limited to '')
-rw-r--r--CONTEXT.md41
1 files changed, 24 insertions, 17 deletions
diff --git a/CONTEXT.md b/CONTEXT.md
index bfb0d8e..5b96c33 100644
--- a/CONTEXT.md
+++ b/CONTEXT.md
@@ -294,31 +294,38 @@ vocabulary / decisions.
294 alpha only. The through-wall pass uses `MATERIAL_VAR_IGNOREZ` (1 << 15) 294 alpha only. The through-wall pass uses `MATERIAL_VAR_IGNOREZ` (1 << 15)
295 through `IMaterial::SetMaterialVarFlag` (slot 29); colours use 295 through `IMaterial::SetMaterialVarFlag` (slot 29); colours use
296 `$color`/`$color2` (IMaterialVar slot 11, SetVecValue 3-float slot 11) and 296 `$color`/`$color2` (IMaterialVar slot 11, SetVecValue 3-float slot 11) and
297 `ColorModulate` (slot 28). Alpha uses `$alpha` (IMaterialVar slot 3, 297 `ColorModulate` (slot 28). `$alpha` is set through IMaterialVar slot 3
298 SetFloatValue) and `MATERIAL_VAR_TRANSLUCENT` (1 << 21) when alpha < 255. 298 (SetFloatValue). Shared materials are restored after each draw.
299 Shared materials are restored after each draw.
300- The GUI colour picker (`add_color_alpha`) has an alpha bar, checkerboard 299- The GUI colour picker (`add_color_alpha`) has an alpha bar, checkerboard
301 preview and `#RRGGBBAA` readout; plain `add_color` keeps the old opaque 300 preview and `#RRGGBBAA` readout; plain `add_color` keeps the old opaque
302 three-component behaviour. Chams colours are four ints (r, g, b, a). 301 three-component behaviour. Chams colours are four ints (r, g, b, a).
303- Styles are built from `debug/debugtranslucentsinglecolor` (UnlitGeneric, 302- **Alpha is stored but has no visual effect yet.** The usable model
304 `$color`) and material flags: 303 materials are opaque: `debug/debugtranslucentsinglecolor` has no
305 0 Flat (solid + FLAT), 1 Wireframe (`debug/debugwireframe`), 2 Additive 304 `$translucent`, and toggling `MATERIAL_VAR_TRANSLUCENT` (1 << 21) or
306 (+ ADDITIVE), 3 Solid, 4 White (colour forced white), 5 Fullbright 305 rebuilding the state snapshot does not change the static shader combo.
307 (ADDITIVE|SELFILLUM, colour forced white so it reads as a white-hot glow 306 `debug/debugtranslucentvertexcolor`/`debug/debughitbox` are translucent but
308 instead of matching Solid), 6 Glow outline 307 need vertex colours and render nothing on skinned models. A custom VMT with
309 (solid plus a `debug/debugwireframe` contour pass drawn with ZNEARER 308 `$model 1` + `$translucent 1` (or a white basetexture) is needed to make the
310 (1 << 10) and a brightened colour so the base cannot bury it). 309 alpha control real.
310- Styles: 0 Flat (`debug/debugtranslucentsinglecolor` + FLAT), 1 Wireframe
311 (`debug/debugwireframe`), 2 Additive
312 (`debug/debugtranslucentmodelhulls`, whose VMT has `$additive 1` + `$color`;
313 the ADDITIVE flag on the solid material did nothing), 3 Solid, 4 White
314 (solid, colour forced white), 5 Fullbright (the additive material, colour
315 forced white, giving a white-hot glow), 6 Glow outline (solid plus a
316 `debug/debugwireframe` contour pass drawn with ZNEARER (1 << 10) and a
317 brightened colour so the base cannot bury it).
311 `vgui/white` is vertex-colour based and has no `$model`/`$basetexture`, so it 318 `vgui/white` is vertex-colour based and has no `$model`/`$basetexture`, so it
312 is never used for chams; `models/debug/debugwhite` is EP2-only and the old 319 is never used for chams; `models/debug/debugwhite` is EP2-only and the old
313 VGUI additive material was invisible on NPCs. 320 VGUI additive material was invisible on NPCs.
314- Style materials are preloaded from `outer_draw` (throttled) and cached; the 321- Style materials are preloaded from `outer_draw` (throttled) and cached; the
315 render hook never calls FindMaterial itself. A missing style uses solid. 322 render hook never calls FindMaterial itself. A missing style uses solid.
316- Viewmodels are collated by the engine as `RENDER_GROUP_VIEW_MODEL_OPAQUE`, 323 `FindMaterial` can return an unreferenced material, so each cached material
317 so an additive forced material can wash out against a bright sky or wall 324 is addref'd (`IncrementReferenceCount`, IMaterial slot 12); without this the
318 (and the engine may not treat the draw as translucent). Additive styles on 325 engine warns "bad reference count 0 when being bound" and the material's
319 the viewmodel therefore draw a faint translucent base (alpha/8) first, then 326 `$color`/`ColorModulate` changes are ignored.
320 the additive pass, so the model keeps a silhouette on bright backgrounds 327- Additive styles still wash out against a bright sky or wall (inherent to
321 without becoming an opaque blob. 328 additive blending).
322- Feature is off by default. Config sections: `[chams]` (active/bind), 329- Feature is off by default. Config sections: `[chams]` (active/bind),
323 `[chams_hostile|neutral|friendly]` (`vis`, `vis_mat`, `vis_r/g/b/a`, `inv`, 330 `[chams_hostile|neutral|friendly]` (`vis`, `vis_mat`, `vis_r/g/b/a`, `inv`,
324 `inv_mat`, `inv_r/g/b/a`) and `[chams_vm]` (`on`, `mat`, `r/g/b/a`). The GUI 331 `inv_mat`, `inv_r/g/b/a`) and `[chams_vm]` (`on`, `mat`, `r/g/b/a`). The GUI