render3d: recycle texture and buffer ids, free a released model whole, actor_release
A freed texture or buffer id goes on a spare list the next one takes; tex_note_size keeps sizes by id. model_release frees prims, meshes, material names, the skin and leaves gltf_cached. actor_release takes an actor off the stage and actor_new reuses its record (ECS's Things come and go all day). steady.ludic: an actor round at 0 bytes over 2000. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
2fe4018d28
commit
9b482d609a
14 changed files with 208 additions and 39 deletions
|
|
@ -284,22 +284,23 @@ function tex_load_ex(render3d_st: mut Render3dState, path: pointer, srgb: bool,
|
|||
return id
|
||||
}
|
||||
# the size each loaded texture was, by id: a nine-slice or a UI image asks
|
||||
# a texture's size, by its id: a slot per id (ids are reused), not a list that grows by every load
|
||||
function tex_note_size(render3d_st: mut Render3dState, id: int) -> void {
|
||||
push(render3d_st.tex_size_ids, id)
|
||||
push(render3d_st.tex_size_ws, render3d_st.tex_w)
|
||||
push(render3d_st.tex_size_hs, render3d_st.tex_h)
|
||||
if id <= 0 { return }
|
||||
while len(render3d_st.tex_size_ws) <= id { push(render3d_st.tex_size_ws, 0); push(render3d_st.tex_size_hs, 0) }
|
||||
render3d_st.tex_size_ws[id] = render3d_st.tex_w
|
||||
render3d_st.tex_size_hs[id] = render3d_st.tex_h
|
||||
}
|
||||
function tex_note_forget(render3d_st: mut Render3dState, id: int) -> void {
|
||||
if id > 0 and id < len(render3d_st.tex_size_ws) { render3d_st.tex_size_ws[id] = 0; render3d_st.tex_size_hs[id] = 0 }
|
||||
}
|
||||
function tex_width(render3d_st: Render3dState, id: int) -> int {
|
||||
for i in 0 .. len(render3d_st.tex_size_ids) {
|
||||
if render3d_st.tex_size_ids[i] == id { return render3d_st.tex_size_ws[i] }
|
||||
}
|
||||
return 0
|
||||
if id <= 0 or id >= len(render3d_st.tex_size_ws) { return 0 }
|
||||
return render3d_st.tex_size_ws[id]
|
||||
}
|
||||
function tex_height(render3d_st: Render3dState, id: int) -> int {
|
||||
for i in 0 .. len(render3d_st.tex_size_ids) {
|
||||
if render3d_st.tex_size_ids[i] == id { return render3d_st.tex_size_hs[i] }
|
||||
}
|
||||
return 0
|
||||
if id <= 0 or id >= len(render3d_st.tex_size_hs) { return 0 }
|
||||
return render3d_st.tex_size_hs[id]
|
||||
}
|
||||
|
||||
# A small solid-colour fallback texture (linear rgb 0..255), for missing maps.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue