#ifdef COMPILEVS float3x3 GetCameraRot() { return float3x3(cViewInv[0][0], cViewInv[0][1], cViewInv[0][2], cViewInv[1][0], cViewInv[1][1], cViewInv[1][2], cViewInv[2][0], cViewInv[2][1], cViewInv[2][2]); } float4 GetScreenPos(float4 clipPos) { return float4( clipPos.x * cGBufferOffsets.z + cGBufferOffsets.x * clipPos.w, -clipPos.y * cGBufferOffsets.w + cGBufferOffsets.y * clipPos.w, 0.0, clipPos.w); } float2 GetScreenPosPreDiv(float4 clipPos) { return float2( clipPos.x / clipPos.w * cGBufferOffsets.z + cGBufferOffsets.x, -clipPos.y / clipPos.w * cGBufferOffsets.w + cGBufferOffsets.y); } float2 GetQuadTexCoord(float4 clipPos) { return float2( clipPos.x / clipPos.w * 0.5 + 0.5, -clipPos.y / clipPos.w * 0.5 + 0.5); } float2 GetQuadTexCoordNoFlip(float3 worldPos) { return float2( worldPos.x * 0.5 + 0.5, -worldPos.y * 0.5 + 0.5); } float3 GetFarRay(float4 clipPos) { float3 viewRay = float3( clipPos.x / clipPos.w * cFrustumSize.x, clipPos.y / clipPos.w * cFrustumSize.y, cFrustumSize.z); return mul(viewRay, GetCameraRot()); } float3 GetNearRay(float4 clipPos) { float3 viewRay = float3( clipPos.x / clipPos.w * cFrustumSize.x, clipPos.y / clipPos.w * cFrustumSize.y, 0.0); return mul(viewRay, GetCameraRot()) * cDepthMode.z; } #endif