Fix same uniforms in fragment and vertex shaders not working in Metal #1808
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.
Describe your changes
Context: in OpenGL API setting shader uniforms works at the program level, which means that same named uniforms in vertex and fragment shaders are treated as the same variable, so when you set a uniform it is set in both shaders at once. In Metal API uniforms are set for vertex and fragment shaders separately.
In current Axmol's Metal implementation if you have a same named uniform in vertex and fragment shaders, then only the vertex shader's variable is set, which is different from OpenGL. This PR fixes Metal part to match OpenGL semantics.
This PR may have breaking changes as it modifies
UniformLocation
andShaderModuleMTL::getUniformLocation()
. But probably it's not a common thing to accessUniformLocation
internals or callingShaderModuleMTL::getUniformLocation()
.Issue ticket number and link
Checklist before requesting a review
For each PR
Add Copyright if it missed:
-
"Copyright (c) 2019-present Axmol Engine contributors (see AUTHORS.md)."
I have performed a self-review of my code.
Optional:
For core/new feature PR