render3d: baked textures before the PNG - a png_decode takes assets/baked/png, a cut-out load assets/baked/cutouts
baked_tex.ludic reads ludic.base's baked form by hand (render3d uses no package): the LBAK header, the
key ("png_sheets" / "cutouts", the Bakes rows) and the generator version, then the payload -
w, h, channels, depth and the samples for a PNG (the caller frees them as it would a decode), a whole
.dds for a cut-out (tex_load_dds_at: a .dds at an offset). Missing, or another key or version, and the
PNG path runs as before. Compiles with Maroon Lake (game, lab, lab/bake/textures).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
104ba696c2
commit
967f15ded9
5 changed files with 104 additions and 9 deletions
|
|
@ -115,6 +115,8 @@ function png_unfilter(raw: pointer, cur: int, prev: int, stride: int, fbpp: int,
|
|||
|
||||
@alloc_ok("loading a model, a texture or a font: a load, not a frame (a guest loading a teammate's look is one)")
|
||||
function png_decode(render3d_st: mut Render3dState, path: pointer) -> pointer {
|
||||
let bk = baked_png(render3d_st, path) # a build that baked it (baked_tex.ludic)
|
||||
if bk != null { return bk }
|
||||
let d = r3d_read_file(render3d_st, path)
|
||||
if d == null { print(`png: cannot read {path}`); return null }
|
||||
let size = render3d_st.tex_file_len
|
||||
|
|
@ -310,6 +312,13 @@ function tex_load_ex__t(render3d_st: mut Render3dState, path: pointer, srgb: boo
|
|||
return t
|
||||
}
|
||||
}
|
||||
if dilate > 0 {
|
||||
let cut = baked_cutout(render3d_st, path, srgb) # padded and compressed at build time
|
||||
if cut != 0 {
|
||||
tex_note_size(render3d_st, cut)
|
||||
return cut
|
||||
}
|
||||
}
|
||||
let px = png_decode(render3d_st, path)
|
||||
if px == null { return 0 }
|
||||
if dilate > 0 { tex_dilate(render3d_st, px, 60, dilate) }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue