Log inGet started
World

Builtin Library

Branchmain
Branchesmainpublish
Commit61a33237e0

README.md

material_records

The material GPU records this session has released and nothing has filed again.

A .material asset files its GPU record at its point of use — matRef:handle() — and memoises the handle it filed on the ref's runtime, so a second bind of the same material costs a table read where the first cost a parse and an upload. That memo names a record the renderer's registry holds, and renderer.material.destroy takes the record away while the asset and its memo stand. The asset is what files the next record, so it has to know which names that applies to.

This set is that knowledge: a release puts the key in, filing a record under the key takes it out, and the point of use reads it for the cost of one table index.

Written by renderer.material.destroy and renderer.material.create; read by the .material assetType's handle().

API

local MaterialRecords = require("modules.material_records")

-- A point of use holding a memo asks whether the record it names still stands.
if MaterialRecords.released[identity] ~= nil then
    -- The record is gone: file another one, which takes the mark off.
end

MaterialRecords.noteReleased(key)  -- the record under `key` has been released
MaterialRecords.noteFiled(key)     -- a record stands under `key` again

Lifetime

The set lives in the session store, so it holds for as long as the GPU records it answers for: a VM reload leaves those records standing and leaves this standing with them, and both die with the engine process.