cbuffer MatrixBuffer { matrix worldMatrix; matrix viewMatrix; matrix projectionMatrix; }; struct VertexInput { float4 position : POSITION; float2 texCoord0 : TEXCOORD0; float3 texCoord1 : TANGENT; //xy = tex #2, z = material intensity float3 texCoord2 : BINORMAL; //xy = tex #3 float4 color : COLOR; }; struct VS_to_PS { float4 position : SV_POSITION; float4 texCoord0 : TEXCOORD0; float4 texCoord1 : TEXCOORD1; float4 viewPosition : TEXCOORD2; float4 mvpPosition : TEXCOORD3; float4 color : COLOR; }; VS_to_PS UberParticleVertexShader(VertexInput input) { VS_to_PS output; input.position.w = 1.0f; output.position = mul(input.position, worldMatrix); output.position = mul(output.position, viewMatrix); output.viewPosition = output.position; output.position = mul(output.position, projectionMatrix); output.mvpPosition = output.position; output.texCoord0.xy = input.texCoord0; output.texCoord0.zw = input.texCoord1.xy; output.texCoord1.xy = input.texCoord2.xy; output.texCoord1.zw = float2(input.texCoord1.z, 0); output.color = input.color; return output; }