| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
The engine calls SetColorModulation(1,1,1) immediately before DrawModel, so
the in-draw flag never sees it. Set the prop colour at the start of the prop
DrawModel hook instead (colour only, not alpha), and stop applying
ColorModulate to prop materials so only one mechanism touches props.
|
| |
|
|
|
|
|
| |
Log the first crate materials the tint pass modifies and the first DrawModel/
DrawModelArray calls with their model names, to see whether the crates are
brush materials that were never reached, materials loaded after the tint was
applied, or a studio draw path that is still missed.
|
| |
|
|
|
|
|
|
|
| |
Static props commonly use brush-style props/... materials
(props/woodcrate001a is LightmappedGeneric), so the models/props-only filter
missed them. Include the props/ prefix.
Also log the first static prop studio draws and a 500-draw summary so we can
see whether the engine draws props through DrawModelStaticProp at all.
|
| |
|
|
|
|
| |
The procedural texture reaches the sky sampler with the red and blue channels
exchanged (blue sky rendered orange/yellow), while the game's own textures are
correct. Swap R/B in the decoded buffer so the sampled colours match the PNG.
|
| |
|
|
|
|
|
|
|
|
| |
Move the HDR decision from texture load to apply_sky_texture, after the sky
materials have definitely been enumerated: compensate the pixel buffer
(sRGB -> linear, alpha = 1/8) and re-download the procedural texture before
assigning it. The earlier load-time check ran before the materials were
visible and silently chose the LDR path, so the 8x HDR decode stayed.
Also log the compensation explicitly so the chosen path is visible.
|
| |
|
|
|
|
| |
The material reports shader "Sky_HDR_DX9", not "sky", so the linear/alpha
compensation was never applied and the raw sRGB image was scaled by the HDR
decode's 8x. Match the Sky_HDR prefix so the compensation path is used.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The HDR "sky" shader samples the compressed texture as rgb *= alpha,
multiplies by 8, then converts linear->sRGB for display. Feeding it the raw
sRGB image produced the blown-out / oversaturated sky.
When the map uses the HDR sky shader, pre-convert the image to linear and set
alpha to 1/8 so the 8x scale cancels and the final linear->sRGB conversion
restores the original colours. For LDR (UnlitGeneric) materials, create the
texture with TEXTUREFLAGS_SRGB so the normal sRGB sampling is used.
The first sky material's shader name is logged for confirmation.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The last crash happened after "applied", in materialsystem while the renderer
walked a shader-parameter list that contained a null vtable entry. That points
at the Refresh()/SetUndefined experiment: undefining $hdrcompressedtexture
while the sky shader's static combo still expected it (and rebuilding state
mid-level) left a broken material.
Set the texture on $basetexture/$hdrbasetexture/$hdrcompressedtexture (and the
0/1/2 variants) and do neither SetUndefined nor Refresh: the visible-path
material binds its base texture dynamically, which is what made the earlier
black sky (empty 798x798 VTF) appear black at all. Log the first sky
material's shader name so we know whether this map uses the LDR (UnlitGeneric)
or HDR (sky) path.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- The material system rejects textures whose dimensions are not multiples of 4
("Image dimensions must be multiple of 4!"), so scale the decoded image to
the next power of two (bilinear). 798x798 -> 1024x1024. The invalid VTF also
crashed the renderer after the apply.
- Move skybox_update() out of the VGUI paint hook into the FRAME_RENDER_START
FrameStageNotify stage. ITexture::Download only regenerates bits when the
material system considers the frame render-safe; during paint it returned
early, the regenerator never ran (no pixels), and a later upload of the
empty VTF crashed.
- Log the regenerator entry so the log shows whether the upload path ran.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The HDR sky materials use the "sky" shader with $hdrcompressedtexture (DXT5).
Assigning an RGBA8 procedural texture there sampled as compressed data and
rendered black. Point $hdrbasetexture at the image, undefine
$hdrcompressedtexture (and its 0/1/2 variants) so the shader falls back, and
call IMaterial::Refresh (37) because the sky shader binds textures in
SHADER_INIT, which is otherwise cached.
GUI: draw_checkbox and the card expand chevron ignored the content clip, so
cards scrolled out of view leaked header widgets outside the window.
Log the first regenerator call (size/pitch/first pixel) for diagnosis.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
client.so, engine.so and vguimatsurface.so all export their own
png_create_read_struct. Loading the system libpng16 made its internal calls
bind to the game's older libpng, whose png_struct layout differs, so
png_safe_warning read a NULL error_ptr and crashed.
Replace libpng with a small PNG reader: zlib's uncompress (dlopen'ed) plus the
five PNG row filters, supporting 8-bit non-interlaced RGB/RGBA/gray/palette
images with tRNS alpha for palettes. Output verified byte-identical to libpng
for the skybox.png in use.
|
| |
|
|
|
|
|
|
|
|
|
| |
The crash was CreateTextureFromBits: this build's IMaterialSystem interface
stops at GetDisplayDeviceName, and the slots after it are CMaterialSystem's
own virtuals, so index 134 was an unrelated function.
Use CreateProceduralTexture (81, verified by disassembling the interface
vtable) together with an ITextureRegenerator (SetTextureRegenerator 12,
Download 13) that fills mip 0 via IVTFTexture::ImageData (39; IVTFTexture has
a two-slot virtual destructor, so Width=15, Height=16, RowSizeInBytes=19).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sv_skyname did not take effect at runtime in this build, so the Skybox card now
replaces the skybox materials' textures with <config dir>/skybox.png.
The PNG is decoded through libpng16's simplified API (dlopen'ed, so no new link
dependency) and uploaded with IMaterialSystem::CreateTextureFromBits as an
RGBA8888 texture. IMaterialVar::SetTextureValue assigns it to $basetexture and
the HDR variants for every material in the SkyBox textures group (all six
faces get the same image).
Original textures are recorded per material/var (texture pointer plus string
fallback) and restored when the feature is off. Records survive level changes
so a reused sky material is still restorable; the override is re-applied to a
new map automatically. The card shows the image path and has a Reload image
button; a missing/unreadable PNG raises an error toast.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
New Visuals -> Skybox card with a runtime sv_skyname override using the same
mechanism as the stock skybox_swapper entity. The choice list is the HL2
skybox set extracted from the game VPKs.
The map's own sky is captured from loaded materials (SkyBox group, parsing
skybox/<name>... face names) before the first override, so turning the
feature off or picking "Map default" restores it; a level change restores it
implicitly. Sky changes invalidate the world tint so new sky materials are
tinted as well.
GUI: add a CK_CHOICE control (value box with < / > zones).
|
| |
|
|
|
|
|
|
|
|
| |
- World tint now also colours prop materials (models/props*) with their own
colour, covering static props and prop_physics while leaving NPC, player and
weapon materials untouched.
- New Fog card: fog_override colour/start/end via ClientCmd, optional skybox
fog, and a Remove fog mode. Restores the map fog (fog_override 0) when
disabled and re-applies after level changes.
- Config sections [worldtint] prop/colour keys and [fog].
|
|
|
Port Amalgam's modulation approach: obtain IMaterialSystem from the already
loaded materialsystem.so (VMaterialSystem080) and walk materials with
FirstMaterial/NextMaterial/GetMaterial. ColorModulate the "World textures"
group (sky names excluded) and the "SkyBox textures"/sky-named group.
The walk runs only when the enabled groups or colours change, restores white
when disabled, and re-applies after level changes. Before touching materials,
GetNumMaterials() and the first material's name/group are sanity-checked so a
wrong vtable slot logs and aborts instead of walking garbage.
GUI: "World tint" card with world/sky toggles and RGB sliders; config section
[worldtint].
|