#version 450 #extension GL_KHR_vulkan_glsl : enable //#include "ShaderDescriptorDefinitions.glsl" layout(location = 0) in vec3 aVertexPos; layout(location = 4) in mat4 worldTransform; layout(location = 9) in uvec4 aBoneIndices; layout(location = 10) in vec4 aBoneWeights; layout(location = 11) in uint firstBoneIndex; layout(set = 1, binding = 0) uniform CameraData { vec4 position; mat4 vpMat; mat4 viewMat; mat4 projMat; } cameraData; layout (std430, set = 2, binding = 1) buffer AnimBoneMatrices { mat4 data[]; } BoneMatrices; void main() { // // Compute bone matrix mat4 boneMatrix = BoneMatrices.data[firstBoneIndex + aBoneIndices[0]] * aBoneWeights[0]; boneMatrix += BoneMatrices.data[firstBoneIndex + aBoneIndices[1]] * aBoneWeights[1]; boneMatrix += BoneMatrices.data[firstBoneIndex + aBoneIndices[2]] * aBoneWeights[2]; boneMatrix += BoneMatrices.data[firstBoneIndex + aBoneIndices[3]] * aBoneWeights[3]; // clip space for rendering // gl_Position = cameraData.vpMat * worldTransform * vec4 (aVertexPos, 1.0f); gl_Position = cameraData.vpMat * worldTransform * boneMatrix * vec4 (aVertexPos, 1.0f); }