2023-08-06 08:48:11 -04:00
|
|
|
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
|
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
|
2022-04-12 00:54:11 -04:00
|
|
|
#version 450
|
|
|
|
|
|
|
|
layout(location = 0) in vec3 inPosition;
|
2023-12-09 14:49:31 -05:00
|
|
|
layout(location = 1) in vec2 inUV0;
|
|
|
|
layout(location = 2) in vec2 inUV1;
|
|
|
|
layout(location = 3) in vec3 inNormal;
|
|
|
|
layout(location = 4) in uvec4 inTangent1;
|
|
|
|
layout(location = 5) in uvec4 inTangent2;
|
|
|
|
layout(location = 6) in vec4 inColor;
|
|
|
|
layout(location = 7) in vec4 inBoneWeights;
|
|
|
|
layout(location = 8) in uvec4 inBoneIds;
|
2022-04-12 00:54:11 -04:00
|
|
|
|
2022-04-12 09:11:31 -04:00
|
|
|
layout(location = 0) out vec3 outNormal;
|
|
|
|
layout(location = 1) out vec3 outFragPos;
|
2022-08-11 17:53:56 -04:00
|
|
|
layout(location = 2) out vec2 outUV;
|
2022-04-12 09:11:31 -04:00
|
|
|
|
2023-04-09 15:26:27 -04:00
|
|
|
layout(binding = 3) uniform sampler2D diffuseTexture;
|
|
|
|
layout(binding = 4) uniform sampler2D normalTexture;
|
|
|
|
layout(binding = 5) uniform sampler2D specularTexture;
|
|
|
|
layout(binding = 6) uniform sampler2D multiTexture;
|
|
|
|
|
|
|
|
layout(std430, push_constant) uniform PushConstant {
|
2022-04-28 17:50:05 -04:00
|
|
|
mat4 vp, model;
|
|
|
|
int boneOffset;
|
2023-04-09 15:26:27 -04:00
|
|
|
int type;
|
2022-04-28 17:50:05 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
layout(std430, binding = 2) buffer readonly BoneInformation {
|
|
|
|
mat4 bones[128];
|
2022-04-12 02:06:16 -04:00
|
|
|
};
|
|
|
|
|
2022-04-12 00:54:11 -04:00
|
|
|
void main() {
|
2022-04-28 17:50:05 -04:00
|
|
|
mat4 BoneTransform = bones[boneOffset + inBoneIds[0]] * inBoneWeights[0];
|
|
|
|
BoneTransform += bones[boneOffset + inBoneIds[1]] * inBoneWeights[1];
|
|
|
|
BoneTransform += bones[boneOffset + inBoneIds[2]] * inBoneWeights[2];
|
|
|
|
BoneTransform += bones[boneOffset + inBoneIds[3]] * inBoneWeights[3];
|
|
|
|
|
|
|
|
BoneTransform = model * BoneTransform;
|
|
|
|
|
|
|
|
vec4 bPos = BoneTransform * vec4(inPosition, 1.0);
|
|
|
|
vec4 bNor = BoneTransform * vec4(inNormal, 0.0);
|
|
|
|
|
|
|
|
gl_Position = vp * bPos;
|
|
|
|
outNormal = bNor.xyz;
|
|
|
|
outFragPos = vec3(model * vec4(inPosition, 1.0));
|
2023-12-09 14:49:31 -05:00
|
|
|
outUV = inUV0;
|
2022-04-12 00:54:11 -04:00
|
|
|
}
|