[codex] reuse registered shaders across engines - #3087
Closed
cptbtptpbcptdtptp wants to merge 2 commits into
Closed
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.shaderccontentShader.createand_createFromPrecompiledcalls return the registered Shader instead ofundefinedProblem
Shader descriptors live in a global name registry, while every Engine owns an independent ResourceManager cache. After an Engine is destroyed, a new Engine loading the same shader asset reaches
Shader.createagain. The duplicate-name branch previously returnedundefined; ResourceManager then tried to cache that value and accessedinstanceId, turning an expected descriptor reuse into a loading failure.GPU Shader Programs are still scoped to their Engine/WebGL context.
Engine.destroy()clears the destroyed Engine's program maps, and the reused Shader descriptor creates a new program when compiled by the next Engine.The loader records the original URL and source string in a
WeakMapkeyed by Shader. This keeps exact comparison off the render loop and preserves the previous duplicate-name conflict behavior for different projects that happen to use the same shader name.Verification
pnpm run b:modulepnpm run b:typespnpm exec vitest run tests/src/loader/ShaderLoader.test.ts tests/src/core/Shader.test.ts tests/src/core/resource/ResourceManager.test.ts --browser.headless(30 tests passed)