Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Skinned Model Shader
- ; Constants
- .constf zeros(0, 0, 0, 0)
- .constf ones(1, 1, 1, 1)
- ; Inputs
- .alias inpos v0
- .alias innrm v1
- .alias inclr v2
- .alias inuv v3
- .alias inbid v4
- .alias inbwt v5
- ; Outputs
- .out outpos position
- .out outclr color
- .out outuv texcoord0
- ; Uniforms
- .fvec projectionMatrix[4]
- .fvec viewMatrix[4]
- .fvec modelMatrix[4]
- .fvec boneMatrices[64]
- ; Main Function
- .proc main
- ; Calculate the first transformed position.
- mova a0.x, inbwt.x
- dp4 r0.x, boneMatrices[a0.x], inpos
- dp4 r0.y, boneMatrices[a0.x + 1], inpos
- dp4 r0.z, boneMatrices[a0.x + 2], inpos
- dp4 r0.w, boneMatrices[a0.x + 3], inpos
- ; Calculate the second transformed position.
- mova a0.x, inbwt.y
- dp4 r1.x, boneMatrices[a0.x], inpos
- dp4 r1.y, boneMatrices[a0.x + 1], inpos
- dp4 r1.z, boneMatrices[a0.x + 2], inpos
- dp4 r1.w, boneMatrices[a0.x + 3], inpos
- ; Calculate the third transformed position.
- mova a0.x, inbwt.z
- dp4 r2.x, boneMatrices[a0.x], inpos
- dp4 r2.y, boneMatrices[a0.x + 1], inpos
- dp4 r2.z, boneMatrices[a0.x + 2], inpos
- dp4 r2.w, boneMatrices[a0.x + 3], inpos
- ; Multiply each register by the corresponding weight.
- mul r0, r0, inbwt.xxxx
- mul r1, r1, inbwt.yyyy
- mul r2, r2, inbwt.zzzz
- ; Add the transformed positions together to get the final model-space position of the vertex.
- add r3, zeros, r0
- add r3, r3, r1
- add r3, r3, r2
- ; modelMatrix * inpos
- dp4 r4.x, modelMatrix[0], r3
- dp4 r4.y, modelMatrix[1], r3
- dp4 r4.z, modelMatrix[2], r3
- dp4 r4.w, modelMatrix[3], r3
- ; viewMatrix * modelMatrix * inpos
- dp4 r5.x, viewMatrix[0], r4
- dp4 r5.y, viewMatrix[1], r4
- dp4 r5.z, viewMatrix[2], r4
- dp4 r5.w, viewMatrix[3], r4
- ; projectionMatrix * viewMatrix * modelMatrix * inpos
- dp4 outpos.x, projectionMatrix[0], r5
- dp4 outpos.y, projectionMatrix[1], r5
- dp4 outpos.z, projectionMatrix[2], r5
- dp4 outpos.w, projectionMatrix[3], r5
- ; outclr = inclr
- mov outclr, inclr
- ; outuv = inuv
- mov outuv, inuv
- ; Function termination
- end
- .end
Advertisement
Add Comment
Please, Sign In to add comment