| struct VertexInput { |
| float4 position; |
| float3 normal; |
| float4 tangent; |
| float2 texcoord; |
| uint4 joints; |
| float4 weights; |
| float4 instance0; |
| float4 instance1; |
| float4 instance2; |
| float4 instance3; |
| float4 instanceColor; |
| }; |
| struct VertexOutput { |
| float4 position; |
| float3 worldPos; |
| float3 view; |
| float2 texcoord; |
| float2 texcoord2; |
| float4 color; |
| float4 instanceColor; |
| float3 normal; |
| float3 tangent; |
| float3 bitangent; |
| }; |
| |
| cbuffer cbuffer_camera : register(b0, space0) { |
| uint4 camera[14]; |
| }; |
| |
| float4x4 getInstanceMatrix(VertexInput input) { |
| return float4x4(input.instance0, input.instance1, input.instance2, input.instance3); |
| } |
| |
| ByteAddressBuffer joint : register(t1, space0); |
| ByteAddressBuffer inverseBind : register(t2, space0); |
| |
| float4x4 tint_symbol_3(ByteAddressBuffer buffer, uint offset) { |
| return float4x4(asfloat(buffer.Load4((offset + 0u))), asfloat(buffer.Load4((offset + 16u))), asfloat(buffer.Load4((offset + 32u))), asfloat(buffer.Load4((offset + 48u)))); |
| } |
| |
| float4x4 getSkinMatrix(VertexInput input) { |
| const float4x4 joint0 = mul(tint_symbol_3(inverseBind, (64u * input.joints.x)), tint_symbol_3(joint, (64u * input.joints.x))); |
| const float4x4 joint1 = mul(tint_symbol_3(inverseBind, (64u * input.joints.y)), tint_symbol_3(joint, (64u * input.joints.y))); |
| const float4x4 joint2 = mul(tint_symbol_3(inverseBind, (64u * input.joints.z)), tint_symbol_3(joint, (64u * input.joints.z))); |
| const float4x4 joint3 = mul(tint_symbol_3(inverseBind, (64u * input.joints.w)), tint_symbol_3(joint, (64u * input.joints.w))); |
| const float4x4 skinMatrix = ((((joint0 * input.weights.x) + (joint1 * input.weights.y)) + (joint2 * input.weights.z)) + (joint3 * input.weights.w)); |
| return skinMatrix; |
| } |
| |
| struct tint_symbol_1 { |
| float4 position : TEXCOORD0; |
| float3 normal : TEXCOORD1; |
| float4 tangent : TEXCOORD2; |
| float2 texcoord : TEXCOORD3; |
| uint4 joints : TEXCOORD6; |
| float4 weights : TEXCOORD7; |
| float4 instance0 : TEXCOORD8; |
| float4 instance1 : TEXCOORD9; |
| float4 instance2 : TEXCOORD10; |
| float4 instance3 : TEXCOORD11; |
| float4 instanceColor : TEXCOORD12; |
| }; |
| struct tint_symbol_2 { |
| float3 worldPos : TEXCOORD0; |
| float3 view : TEXCOORD1; |
| float2 texcoord : TEXCOORD2; |
| float2 texcoord2 : TEXCOORD3; |
| float4 color : TEXCOORD4; |
| float4 instanceColor : TEXCOORD5; |
| float3 normal : TEXCOORD6; |
| float3 tangent : TEXCOORD7; |
| float3 bitangent : TEXCOORD8; |
| float4 position : SV_Position; |
| }; |
| |
| float4x4 tint_symbol_6(uint4 buffer[14], uint offset) { |
| const uint scalar_offset = ((offset + 0u)) / 4; |
| const uint scalar_offset_1 = ((offset + 16u)) / 4; |
| const uint scalar_offset_2 = ((offset + 32u)) / 4; |
| const uint scalar_offset_3 = ((offset + 48u)) / 4; |
| return float4x4(asfloat(buffer[scalar_offset / 4]), asfloat(buffer[scalar_offset_1 / 4]), asfloat(buffer[scalar_offset_2 / 4]), asfloat(buffer[scalar_offset_3 / 4])); |
| } |
| |
| VertexOutput vertexMain_inner(VertexInput input) { |
| VertexOutput output = (VertexOutput)0; |
| const float4x4 modelMatrix = getSkinMatrix(input); |
| output.normal = normalize(mul(float4(input.normal, 0.0f), modelMatrix).xyz); |
| output.tangent = normalize(mul(float4(input.tangent.xyz, 0.0f), modelMatrix).xyz); |
| output.bitangent = (cross(output.normal, output.tangent) * input.tangent.w); |
| output.color = float4((1.0f).xxxx); |
| output.texcoord = input.texcoord; |
| output.instanceColor = input.instanceColor; |
| const float4 modelPos = mul(input.position, modelMatrix); |
| output.worldPos = modelPos.xyz; |
| output.view = (asfloat(camera[12].xyz) - modelPos.xyz); |
| output.position = mul(modelPos, mul(tint_symbol_6(camera, 128u), tint_symbol_6(camera, 0u))); |
| return output; |
| } |
| |
| tint_symbol_2 vertexMain(tint_symbol_1 tint_symbol) { |
| const VertexInput tint_symbol_8 = {tint_symbol.position, tint_symbol.normal, tint_symbol.tangent, tint_symbol.texcoord, tint_symbol.joints, tint_symbol.weights, tint_symbol.instance0, tint_symbol.instance1, tint_symbol.instance2, tint_symbol.instance3, tint_symbol.instanceColor}; |
| const VertexOutput inner_result = vertexMain_inner(tint_symbol_8); |
| tint_symbol_2 wrapper_result = (tint_symbol_2)0; |
| wrapper_result.position = inner_result.position; |
| wrapper_result.worldPos = inner_result.worldPos; |
| wrapper_result.view = inner_result.view; |
| wrapper_result.texcoord = inner_result.texcoord; |
| wrapper_result.texcoord2 = inner_result.texcoord2; |
| wrapper_result.color = inner_result.color; |
| wrapper_result.instanceColor = inner_result.instanceColor; |
| wrapper_result.normal = inner_result.normal; |
| wrapper_result.tangent = inner_result.tangent; |
| wrapper_result.bitangent = inner_result.bitangent; |
| return wrapper_result; |
| } |