| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- Parameters =
- {
- float3 gViewDir : auto("ViewDir");
- float3 gViewOrigin : auto("ViewOrigin");
- mat4x4 gMatViewProj : auto("VP");
- mat4x4 gMatView : auto("V");
- mat4x4 gMatProj : auto("P");
- mat4x4 gMatInvProj : auto("IP");
- mat4x4 gMatInvViewProj : auto("IVP");
-
- // Special inverse view-projection matrix that had projection entries that affect z and w eliminated.
- // Used to transform a vector(clip_x, clip_y, view_z, view_w), where clip_x/clip_y are in clip space,
- // and view_z/view_w in view space, into world space
- mat4x4 gMatScreenToWorld : auto("ScreenToWorld");
-
- // Converts device Z to world Z using this formula: worldZ = (1 / (deviceZ + y)) * x
- float2 gDeviceZToWorldZ : auto("DeviceToWorldZ");
-
- // x - near plane distance, y - far plane distance
- float2 gNearFar : auto("NearFar");
-
- // xy - Viewport offset in pixels
- // zw - Viewport width & height in pixels
- int4 gViewportRectangle : auto("ViewportRect");
-
- // xy - (Viewport size in pixels / 2) / Target size in pixels
- // zw - (Viewport offset in pixels + (Viewport size in pixels / 2) + Optional pixel center offset) / Target size in pixels
- float4 gClipToUVScaleOffset : auto("ClipToUVScaleOffset");
- float gAmbientFactor;
- };
- Blocks =
- {
- Block PerCamera : auto("PerCamera");
- };
- Technique : base("PerCameraData") =
- {
- Language = "HLSL11";
- Pass =
- {
- Common =
- {
- cbuffer PerCamera
- {
- float3 gViewDir;
- float3 gViewOrigin;
- float4x4 gMatViewProj;
- float4x4 gMatView;
- float4x4 gMatProj;
- float4x4 gMatInvProj;
- float4x4 gMatInvViewProj;
- float4x4 gMatScreenToWorld;
- float2 gDeviceZToWorldZ;
- float2 gNDCZToWorldZ;
- float2 gNearFar;
- int4 gViewportRectangle;
- float4 gClipToUVScaleOffset;
- float gAmbientFactor;
- }
-
- /** Converts Z value in range [0,1] into Z value in view space. */
- float convertFromDeviceZ(float deviceZ)
- {
- return (1.0f / (deviceZ + gDeviceZToWorldZ.y)) * gDeviceZToWorldZ.x;
- }
- };
- };
- };
- Technique : base("PerCameraData") =
- {
- Language = "GLSL";
- Pass =
- {
- Common =
- {
- layout(binding = 0, std140) uniform PerCamera
- {
- vec3 gViewDir;
- vec3 gViewOrigin;
- mat4 gMatViewProj;
- mat4 gMatView;
- mat4 gMatProj;
- mat4 gMatInvProj;
- mat4 gMatInvViewProj;
- mat4 gMatScreenToWorld;
- vec2 gDeviceZToWorldZ;
- vec2 gNDCZToWorldZ;
- vec2 gNearFar;
- ivec4 gViewportRectangle;
- vec4 gClipToUVScaleOffset;
- float gAmbientFactor;
- };
-
- /** Converts Z value in range [0,1] into Z value in view space. */
- float convertFromDeviceZ(float deviceZ)
- {
- return (1.0f / (deviceZ + gDeviceZToWorldZ.y)) * gDeviceZToWorldZ.x;
- }
- };
- };
- };
|