render3d: @owns on the handles records hold

Target's framebuffer and its colour and depth textures, a Mesh's index buffer (gvk_buf_new /
gvk_buf_delete now @creates / @releases GpuBuffer too), a Prim's mesh and an Actor's own skin clone.
ludic deps --resources over main: resource_drops 0, owned_leaks 0; a probe freeing a Target's fbo
alone was reported for its colour and depth (2), then removed. Compiled (steady).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-28 17:08:15 +03:00
parent f16ac4ef9e
commit bc50bd9b9a
5 changed files with 8 additions and 6 deletions

View file

@ -634,6 +634,7 @@ function gvk_sampler(render3d_st: mut Render3dState, min_f: int, mag_f: int, wra
# destroyed at gvk_retire_flush, after the frame's work is done.
@alloc_ok("loading a model, a texture or a font: a load, not a frame (a guest loading a teammate's look is one)")
@creates(GpuBuffer)
function gvk_buf_new(render3d_st: mut Render3dState) -> int {
let zero: long = 0
if render3d_st.gvk_buf == null {
@ -655,6 +656,7 @@ function gvk_buf_new(render3d_st: mut Render3dState) -> int {
# a buffer done with for good (a mesh freed): its storage goes, and its handle is handed out again
# by gvk_buf_new. gvk_buf_release alone keeps the handle, for a caller that fills it again.
@releases(GpuBuffer)
function gvk_buf_delete(render3d_st: mut Render3dState, b: int) -> void {
if b <= 0 or b >= len(render3d_st.gvk_buf) { return }
gvk_buf_release(render3d_st, b)