diff options
Diffstat (limited to 'demo/d3d/renderParamsD3D.h')
| -rw-r--r-- | demo/d3d/renderParamsD3D.h | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/demo/d3d/renderParamsD3D.h b/demo/d3d/renderParamsD3D.h new file mode 100644 index 0000000..0c730bc --- /dev/null +++ b/demo/d3d/renderParamsD3D.h @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved. + * + * NVIDIA CORPORATION and its licensors retain all intellectual property + * and proprietary rights in and to this software, related documentation + * and any modifications thereto. Any use, reproduction, disclosure or + * distribution of this software and related documentation without an express + * license agreement from NVIDIA CORPORATION is strictly prohibited. + */ + +#pragma once + +#define NOMINMAX + +#include "core/maths.h" +#include <DirectXMath.h> + +#include "shaderCommonD3D.h" + +struct ShadowMapD3D; + +typedef DirectX::XMFLOAT3 float3; +typedef DirectX::XMFLOAT4 float4; +typedef DirectX::XMFLOAT4X4 float4x4; + +struct DiffuseDrawParamsD3D +{ + DirectX::XMMATRIX projection; + DirectX::XMMATRIX view; + DirectX::XMMATRIX model; + + float diffuseRadius; // point size in world space + float diffuseScale; // scale to calculate size in pixels + float spotMin; + float spotMax; + float motionScale; + + DirectX::XMMATRIX lightTransform; + float3 lightPos; + float3 lightDir; + + float4 color; + + float4 shadowTaps[12]; + ShadowMapD3D* shadowMap; + + int mode; +}; + +enum FluidRenderMode +{ + FLUID_RENDER_WIREFRAME, + FLUID_RENDER_SOLID, + NUM_FLUID_RENDER_MODES +}; + +enum FluidCullMode +{ + FLUID_CULL_NONE, + FLUID_CULL_FRONT, + FLUID_CULL_BACK, + NUM_FLUID_CULL_MODES +}; + +enum FluidDrawStage +{ + FLUID_DRAW_NULL, + FLUID_DRAW_SHADOW, + FLUID_DRAW_REFLECTION, + FLUID_DRAW_LIGHT +}; + +struct FluidDrawParamsD3D +{ + FluidRenderMode renderMode; + FluidCullMode cullMode; + FluidDrawStage renderStage; + + int offset; + int n; + + DirectX::XMMATRIX projection; + DirectX::XMMATRIX view; + DirectX::XMMATRIX model; + + float4 invTexScale; + + float3 invViewport; + float3 invProjection; + + float blurRadiusWorld; + float blurScale; + float blurFalloff; + int debug; + + float3 lightPos; + float3 lightDir; + DirectX::XMMATRIX lightTransform; + + float4 color; + float4 clipPosToEye; + + float spotMin; + float spotMax; + float ior; + + ShadowMapD3D* shadowMap; + + // Used on D3D12 + int m_srvDescriptorBase; + int m_sampleDescriptorBase; +}; + +enum MeshRenderMode +{ + MESH_RENDER_WIREFRAME, + MESH_RENDER_SOLID, + NUM_MESH_RENDER_MODES +}; + +enum MeshCullMode +{ + MESH_CULL_NONE, + MESH_CULL_FRONT, + MESH_CULL_BACK, + NUM_MESH_CULL_MODES +}; + +enum MeshDrawStage +{ + MESH_DRAW_NULL, + MESH_DRAW_SHADOW, + MESH_DRAW_REFLECTION, + MESH_DRAW_LIGHT +}; + +struct MeshDrawParamsD3D +{ + MeshRenderMode renderMode; + MeshCullMode cullMode; + MeshDrawStage renderStage; + + DirectX::XMMATRIX projection; + DirectX::XMMATRIX view; + DirectX::XMMATRIX model; + + float4x4 objectTransform; + + DirectX::XMMATRIX lightTransform; + float3 lightPos; + float3 lightDir; + + float4 clipPlane; + float4 fogColor; + float4 color; + float4 secondaryColor; + + float bias; + float expand; + float spotMin; + float spotMax; + + int grid; + int tex; + int colorArray; + + float4 shadowTaps[12]; + ShadowMapD3D* shadowMap; +}; + +enum PointRenderMode +{ + POINT_RENDER_WIREFRAME, + POINT_RENDER_SOLID, + NUM_POINT_RENDER_MODES +}; + +enum PointCullMode +{ + POINT_CULL_NONE, + POINT_CULL_FRONT, + POINT_CULL_BACK, + NUM_POINT_CULL_MODES +}; + +enum PointDrawStage +{ + POINT_DRAW_NULL, + POINT_DRAW_SHADOW, + POINT_DRAW_REFLECTION, + POINT_DRAW_LIGHT +}; + +struct PointDrawParamsD3D +{ + PointRenderMode renderMode; + PointCullMode cullMode; + PointDrawStage renderStage; + + DirectX::XMMATRIX projection; + DirectX::XMMATRIX view; + DirectX::XMMATRIX model; + + float pointRadius; // point size in world space + float pointScale; // scale to calculate size in pixels + float spotMin; + float spotMax; + + DirectX::XMMATRIX lightTransform; + float3 lightPos; + float3 lightDir; + + float4 colors[8]; + + float4 shadowTaps[12]; + ShadowMapD3D* shadowMap; + + int mode; +}; + +struct ShadowParamsD3D +{ + DirectX::XMMATRIX lightTransform; + float3 lightPos; + float3 lightDir; + float bias; + float4 shadowTaps[12]; +}; + +struct RenderParamsUtilD3D +{ + /// Assumes the lightTransform is in OpenGl projection format + static void calcShadowParams(Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, float shadowBias, ShadowParamsD3D* paramsOut); + + /// Convert a projection from GL into the same projection as can be used by Direct3D + /// D3D has clip z range [0, 1], GL -1 to 1 (as is unit cube) + static Matrix44 convertGLToD3DProjection(const Matrix44& proj); + + static void calcMeshConstantBuffer(const MeshDrawParamsD3D& params, Hlsl::MeshShaderConst& constBufOut); + + static void calcFluidConstantBuffer(const FluidDrawParamsD3D& params, Hlsl::FluidShaderConst& constBuf); + + static void calcFluidCompositeConstantBuffer(const FluidDrawParamsD3D& params, Hlsl::FluidShaderConst& constBuf); + + static void calcDiffuseConstantBuffer(const DiffuseDrawParamsD3D& params, Hlsl::DiffuseShaderConst& constBuf); + + static void calcPointConstantBuffer(const PointDrawParamsD3D& params, Hlsl::PointShaderConst& constBuf); +}; |