Fix local uniform buffers not always bound on draw #5681
Merged
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.
This caused Metal to crash when loading a colour picker, due to the UBO not being bound in the front-to-back pass. Rather than duplicating code there, I've refactored the API to force UBOs to always be bound whenever the
DrawNode
wishes to bind the shader.DrawNode
s that bind other shaders will have to manually bind UBOs themselves. One alternative direction I had was to completely markIShader.Bind/Unbind
internal and re-define the methods inDrawNode
instead, along with logic to store uniform blocks in the shader in order to be bound onDrawNode.BindShader
.vNext
TexturedShaderDrawNode.TextureShader
is made privateThis is partially done to force consumers into binding uniform blocks in the newly defined
TexturedShaderDrawNode.BindUniformResources
method, such that uniform blocks are always bound whenever the corresponding shader is used for drawing in the framework.For binding/unbinding shaders, use
TexturedShaderDrawNode.BindTextureShader
/TexturedShaderDrawNode.UnbindTextureShader
instead.