summaryrefslogtreecommitdiffstats
path: root/servers/rendering/renderer_rd/shaders/skeleton.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'servers/rendering/renderer_rd/shaders/skeleton.glsl')
-rw-r--r--servers/rendering/renderer_rd/shaders/skeleton.glsl28
1 files changed, 14 insertions, 14 deletions
diff --git a/servers/rendering/renderer_rd/shaders/skeleton.glsl b/servers/rendering/renderer_rd/shaders/skeleton.glsl
index 59c161548c..894dee1728 100644
--- a/servers/rendering/renderer_rd/shaders/skeleton.glsl
+++ b/servers/rendering/renderer_rd/shaders/skeleton.glsl
@@ -49,7 +49,7 @@ layout(push_constant, std430) uniform Params {
uint blend_shape_count;
bool normalized_blend_shapes;
- uint pad0;
+ uint normal_tangent_stride;
uint pad1;
vec2 skeleton_transform_x;
@@ -188,15 +188,15 @@ void main() {
vertex = uintBitsToFloat(uvec3(src_vertices.data[src_offset + 0], src_vertices.data[src_offset + 1], src_vertices.data[src_offset + 2]));
- src_offset += 3;
+ uint src_normal = params.vertex_count * params.vertex_stride + index * params.normal_tangent_stride;
if (params.has_normal) {
- normal = decode_uint_oct_to_norm(src_vertices.data[src_offset]);
- src_offset++;
+ normal = decode_uint_oct_to_norm(src_vertices.data[src_normal]);
+ src_normal++;
}
if (params.has_tangent) {
- tangent = decode_uint_oct_to_tang(src_vertices.data[src_offset]);
+ tangent = decode_uint_oct_to_tang(src_vertices.data[src_normal]);
}
if (params.has_blend_shape) {
@@ -208,19 +208,19 @@ void main() {
for (uint i = 0; i < params.blend_shape_count; i++) {
float w = blend_shape_weights.data[i];
if (abs(w) > 0.0001) {
- uint base_offset = (params.vertex_count * i + index) * params.vertex_stride;
+ uint base_offset = params.vertex_count * i * (params.vertex_stride + params.normal_tangent_stride) + index * params.vertex_stride;
blend_vertex += uintBitsToFloat(uvec3(src_blend_shapes.data[base_offset + 0], src_blend_shapes.data[base_offset + 1], src_blend_shapes.data[base_offset + 2])) * w;
- base_offset += 3;
+ uint base_normal = params.vertex_count * i * (params.vertex_stride + params.normal_tangent_stride) + params.vertex_count * params.vertex_stride + index * params.normal_tangent_stride;
if (params.has_normal) {
- blend_normal += decode_uint_oct_to_norm(src_blend_shapes.data[base_offset]) * w;
- base_offset++;
+ blend_normal += decode_uint_oct_to_norm(src_blend_shapes.data[base_normal]) * w;
+ base_normal++;
}
if (params.has_tangent) {
- blend_tangent += decode_uint_oct_to_tang(src_blend_shapes.data[base_offset]).rgb * w;
+ blend_tangent += decode_uint_oct_to_tang(src_blend_shapes.data[base_normal]).rgb * w;
}
blend_total += w;
@@ -291,15 +291,15 @@ void main() {
dst_vertices.data[dst_offset + 1] = uvertex.y;
dst_vertices.data[dst_offset + 2] = uvertex.z;
- dst_offset += 3;
+ uint dst_normal = params.vertex_count * params.vertex_stride + index * params.normal_tangent_stride;
if (params.has_normal) {
- dst_vertices.data[dst_offset] = encode_norm_to_uint_oct(normal);
- dst_offset++;
+ dst_vertices.data[dst_normal] = encode_norm_to_uint_oct(normal);
+ dst_normal++;
}
if (params.has_tangent) {
- dst_vertices.data[dst_offset] = encode_tang_to_uint_oct(tangent);
+ dst_vertices.data[dst_normal] = encode_tang_to_uint_oct(tangent);
}
#endif