2022-05-04 05:07:27 +00:00
|
|
|
#version 450
|
2022-11-21 11:02:18 +00:00
|
|
|
#extension GL_GOOGLE_include_directive : enable
|
2023-01-22 10:23:15 +00:00
|
|
|
#extension GL_EXT_multiview : enable
|
2022-05-04 05:07:27 +00:00
|
|
|
|
2022-05-07 01:08:46 +00:00
|
|
|
layout (constant_id = 0) const bool IQMDepthOnly = false;
|
|
|
|
|
2022-11-21 11:02:18 +00:00
|
|
|
layout (set = 0, binding = 0) uniform
|
|
|
|
#include "matrices.h"
|
|
|
|
;
|
2022-05-04 05:07:27 +00:00
|
|
|
|
2022-05-07 01:08:46 +00:00
|
|
|
layout (set = 2, binding = 0) buffer Bones {
|
2022-05-04 05:07:27 +00:00
|
|
|
// NOTE these are transposed, so v * m
|
|
|
|
mat3x4 bones[];
|
|
|
|
};
|
|
|
|
|
|
|
|
layout (push_constant) uniform PushConstants {
|
|
|
|
mat4 Model;
|
|
|
|
float blend;
|
|
|
|
};
|
|
|
|
|
|
|
|
layout (location = 0) in vec3 vposition;
|
2022-05-07 01:08:46 +00:00
|
|
|
layout (location = 1) in uvec4 vbones;
|
2022-05-04 05:07:27 +00:00
|
|
|
layout (location = 2) in vec4 vweights;
|
|
|
|
layout (location = 3) in vec2 vtexcoord;
|
|
|
|
layout (location = 4) in vec3 vnormal;
|
|
|
|
layout (location = 5) in vec4 vtangent;
|
|
|
|
layout (location = 6) in vec4 vcolor;
|
|
|
|
|
|
|
|
layout (location = 0) out vec2 texcoord;
|
|
|
|
layout (location = 1) out vec4 position;
|
|
|
|
layout (location = 2) out vec3 normal;
|
|
|
|
layout (location = 3) out vec3 tangent;
|
|
|
|
layout (location = 4) out vec3 bitangent;
|
|
|
|
layout (location = 5) out vec4 color;
|
|
|
|
|
|
|
|
void
|
|
|
|
main (void)
|
|
|
|
{
|
|
|
|
mat3x4 m = bones[vbones.x] * vweights.x;
|
|
|
|
m += bones[vbones.y] * vweights.y;
|
|
|
|
m += bones[vbones.z] * vweights.z;
|
|
|
|
m += bones[vbones.w] * vweights.w;
|
2022-05-08 05:21:40 +00:00
|
|
|
vec4 pos = Model * vec4 (vec4(vposition, 1) * m, 1);
|
2023-01-22 10:23:15 +00:00
|
|
|
gl_Position = Projection3d * (View[gl_ViewIndex] * pos);
|
2022-05-07 01:08:46 +00:00
|
|
|
|
|
|
|
if (!IQMDepthOnly) {
|
|
|
|
position = pos;
|
|
|
|
mat3 adjTrans = mat3 (cross(m[1].xyz, m[2].xyz),
|
|
|
|
cross(m[2].xyz, m[0].xyz),
|
|
|
|
cross(m[0].xyz, m[1].xyz));
|
2022-05-07 04:00:02 +00:00
|
|
|
normal = normalize (mat3 (Model) * vnormal * adjTrans);
|
2022-05-07 01:08:46 +00:00
|
|
|
tangent = mat3 (Model) * vtangent.xyz * adjTrans;
|
2022-05-07 04:00:02 +00:00
|
|
|
tangent = normalize (tangent - dot (tangent, normal) * normal);
|
2022-05-07 01:08:46 +00:00
|
|
|
bitangent = cross (normal, tangent) * vtangent.w;
|
|
|
|
texcoord = vtexcoord;
|
|
|
|
color = vcolor;
|
|
|
|
}
|
2022-05-04 05:07:27 +00:00
|
|
|
}
|