mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[Fix] (Pipe, State): look the resource handle up on the content paths instead of minting it, publish the bind mask from the two draw-time emitters, pair the destroy with the create's own latch, and state the record-lifetime rule the applier now holds
This commit is contained in:
@@ -292,6 +292,10 @@
|
||||
/* MarkVertexArrayForDeletion -> delete_vertex_elements, published through the */ \
|
||||
/* death notice ~VertexArrayObject already raises for the VertexElementsCso */ \
|
||||
/* kind; the CSO handle is minted per frontend VAO off its lifetime id. */ \
|
||||
/* THE PUBLISHER IS THE BACKEND'S (Managers.cpp's OnFrontendStateObject- */ \
|
||||
/* Destroyed consumer, package espryt), not the client's: the client mints */ \
|
||||
/* the CSO handle and emits create/bind, and the free rides with that */ \
|
||||
/* consumer. Until it lands the row states the design, not the tree. */ \
|
||||
X(MarkBufferObjectForDeletion, kExplicitDestroy) \
|
||||
X(MarkFramebufferObjectForDeletion, kExplicitDestroy) \
|
||||
X(MarkProgramForDeletion, kUnpublishedDestroy) \
|
||||
|
||||
@@ -115,7 +115,14 @@ namespace MobileGL::MG_Pipe {
|
||||
void MGPipeMintResourceHandle(MG_State::GLState::BufferObject& buffer);
|
||||
// In this order, and it is not negotiable (D-L): the destroy resolves the handle, and
|
||||
// MGPipeSlotAllocator::Free erases the lifetimeId -> slot mapping it resolves through.
|
||||
void MGPipeEmitResourceDestroyAndFree(MG_State::GLState::BufferObject& buffer);
|
||||
//
|
||||
// RETURNS whether resource_destroy was emitted, which is the LATCH taken at this buffer's
|
||||
// create and not a second reading of MGPipeResourceSubsystemEnabled(). The destructor
|
||||
// needs that answer to decide whether the legacy OnDestroy still owes a call: asking the
|
||||
// predicate twice pairs a create emitted under one registration with a destroy gated on
|
||||
// another, and either direction leaks - a live applier record on a slot about to be
|
||||
// re-handed-out, or a backend object nobody releases.
|
||||
Bool MGPipeEmitResourceDestroyAndFree(MG_State::GLState::BufferObject& buffer);
|
||||
|
||||
void MGPipeEmitResourceCreate(MG_State::GLState::BufferObject& buffer);
|
||||
void MGPipeEmitResourceRespecify(MG_State::GLState::BufferObject& buffer);
|
||||
|
||||
Reference in New Issue
Block a user