struct vIn { float4 tex : TEXCOORD; float4 color : DIFFUSE; float4 position : POSITION; }; struct vOut { float4 pos : POSITION; float4 col : COLOR; float4 tex : TEXCOORD0; }; vOut main( vIn input, uniform float4x4 mvp, uniform float4 vp_scale, uniform float4 vp_offset ) { vOut result; float4 position; position = float4(input.position.xyz, 1.0f); position = mul(position, mvp); position.xyz = position.xyz / position.w; position.x = position.x * vp_scale.x + vp_offset.x; position.y = position.y * vp_scale.y + vp_offset.y; position.z = position.z * vp_scale.z + vp_offset.z; //position.w = 1.0 / half_viewport.w; result.pos = position; result.col = input.color; result.tex = input.tex; return result; }