Skip to content

Refresh renderer bindings when native resources are deleted - #3063

Merged
riccardobl merged 1 commit into
jMonkeyEngine:masterfrom
8Keep:codex/native-resource-bindings
Nov 10, 2026
Merged

riccardobl merged 1 commit into
jMonkeyEngine:masterfrom
8Keep:codex/native-resource-bindings

Conversation

@8Keep

@8Keep 8Keep commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Explicitly deleting a shader, buffer or fence leaves its old registration behind, and renderer caches can still describe the deleted resource. When objects are recreated or native names are reused, jME can skip a required bind, reuse stale vertex pointers, or later try to clean up the old registration again.

Unregister explicitly deleted resources before resetting their IDs, release a deleted current program, and invalidate affected buffer/attribute/divisor caches. Keep uniform-buffer and storage-buffer indexed bindings separate through binding, invalidation and deletion: UBO slot 0 and SSBO slot 0 are different OpenGL bindings, even when they use the same BufferObject.

The existing public boundBO cache remains the UBO cache. This does not redesign the buffer/material APIs or require another patch.

Keep uniform and storage indexed bindings in separate caches, clear both on state invalidation and native deletion, and release cached vertex pointers and instance divisors when buffers are retired. Explicit shader, buffer, and fence deletion unregisters the original native name before wrapper reuse, and releases a currently bound program.

Validation: upstream-red recording regressions for each bug; 81 focused renderer/context tests pass, including simultaneous UBO/SSBO deletion and rebinding. No native GPU context required.

Checkstyle main/test completed with no candidate-attributable warnings; existing upstream warnings are unchanged.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-09T13:43:37.597663Z b80ce5c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@jaime-jmebot jaime-jmebot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thanks for putting together this fix. It addresses the stale native-object registrations and renderer state that can otherwise make resource recreation unreliable, while keeping UBO and SSBO indexed binding caches distinct without changing the public UBO cache.

I reviewed the deletion paths and the cache invalidation behavior, including current-program unbinding, vertex attribute/divisor refresh, and the independent indexed-binding caches. The regression tests exercise native-name reuse as well as the cases where deleting a resource must force the next bind or attribute-pointer update; that coverage is especially helpful for these stateful OpenGL paths. CI is also green.

Looks good to me—thanks for tackling this.

@riccardobl

Copy link
Copy Markdown
Member

Thanks!

@riccardobl
riccardobl merged commit 1bcd65e into jMonkeyEngine:master Nov 10, 2026
13 checks passed
8Keep added a commit to 8Keep/jmonkeyengine that referenced this pull request Nov 12, 2026
Keep reset buffer data eligible for reupload and tie deferred disposal to
its original native registration. Use the reviewed registration-cancellation
fix from PR jMonkeyEngine#3061 so reset and terminal cleanup cannot free replacement CPU
data. Keep the original fork framebuffer-tracking behavior and native probes.

The binding-cache and explicit renderer-deletion repairs now come from
upstream jMonkeyEngine#3063; use its boundSsbo name rather than restoring the older fork
copy. Preserve the reviewed manager regressions alongside the existing
native lifecycle coverage.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants