summaryrefslogtreecommitdiff
path: root/drivers/gles2/shaders
diff options
context:
space:
mode:
authorJuan Linietsky <juan@godotengine.org>2019-03-03 12:23:03 -0300
committerJuan Linietsky <juan@godotengine.org>2019-03-03 12:24:00 -0300
commit2f32a75d2e2afc22e7e170c2506455010d063ce8 (patch)
treeb8831d5da49f47ee1d3e4542744e903fa89d36e8 /drivers/gles2/shaders
parent9db96d9f810ebf60e807eb46a1bd02974be1f375 (diff)
Skeletons can now choose between using local or world coords for processing, fixes #26468
Diffstat (limited to 'drivers/gles2/shaders')
-rw-r--r--drivers/gles2/shaders/scene.glsl13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl
index 371ea8498a..e3c6966e21 100644
--- a/drivers/gles2/shaders/scene.glsl
+++ b/drivers/gles2/shaders/scene.glsl
@@ -59,6 +59,10 @@ uniform ivec2 skeleton_texture_size;
#endif
+uniform highp mat4 skeleton_transform;
+uniform highp mat4 skeleton_transform_inverse;
+uniform bool skeleton_in_world_coords;
+
#endif
#ifdef USE_INSTANCING
@@ -404,7 +408,14 @@ void main() {
#endif
- world_matrix = bone_transform * world_matrix;
+ if (skeleton_in_world_coords) {
+ bone_transform = skeleton_transform * (bone_transform * skeleton_transform_inverse);
+ world_matrix = bone_transform * world_matrix;
+ } else {
+ world_matrix = world_matrix * bone_transform;
+ }
+
+
#endif
#ifdef USE_INSTANCING