diff options
Diffstat (limited to 'demo/d3d/renderParamsD3D.cpp')
| -rw-r--r-- | demo/d3d/renderParamsD3D.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/demo/d3d/renderParamsD3D.cpp b/demo/d3d/renderParamsD3D.cpp new file mode 100644 index 0000000..22962ba --- /dev/null +++ b/demo/d3d/renderParamsD3D.cpp @@ -0,0 +1,178 @@ +/* + * 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. + */ + + +#include "renderParamsD3D.h" + +/* static */void RenderParamsUtilD3D::calcShadowParams(Vec3 lightPos, Vec3 lightTarget, Matrix44 lightTransform, float shadowBias, ShadowParamsD3D* paramsOut) +{ + paramsOut->lightTransform = (DirectX::XMMATRIX&)(convertGLToD3DProjection(lightTransform)); + paramsOut->lightPos = (float3&)lightPos; + paramsOut->lightDir = (float3&)Normalize(lightTarget - lightPos); + paramsOut->bias = shadowBias; + + const Vec4 taps[] = + { + Vec2(-0.326212f,-0.40581f), Vec2(-0.840144f,-0.07358f), + Vec2(-0.695914f,0.457137f), Vec2(-0.203345f,0.620716f), + Vec2(0.96234f,-0.194983f), Vec2(0.473434f,-0.480026f), + Vec2(0.519456f,0.767022f), Vec2(0.185461f,-0.893124f), + Vec2(0.507431f,0.064425f), Vec2(0.89642f,0.412458f), + Vec2(-0.32194f,-0.932615f), Vec2(-0.791559f,-0.59771f) + }; + memcpy(paramsOut->shadowTaps, taps, sizeof(taps)); +} + +Matrix44 RenderParamsUtilD3D::convertGLToD3DProjection(const Matrix44& proj) +{ + Matrix44 scale = Matrix44::kIdentity; + scale.columns[2][2] = 0.5f; + + Matrix44 bias = Matrix44::kIdentity; + bias.columns[3][2] = 1.0f; + + return scale*bias*proj; +} + +/* static */void RenderParamsUtilD3D::calcMeshConstantBuffer(const MeshDrawParamsD3D& params, Hlsl::MeshShaderConst& constBuf) +{ + constBuf.modelViewProjection = (float4x4&)(XMMatrixMultiply(XMMatrixMultiply(params.model, params.view), params.projection)); + + constBuf.modelView = (float4x4&)XMMatrixMultiply(params.model, params.view); + + constBuf.objectTransform = (float4x4&)params.objectTransform; + constBuf.lightTransform = (float4x4&)params.lightTransform; + + constBuf.clipPlane = params.clipPlane; + constBuf.fogColor = params.fogColor; + constBuf.color = params.color; + constBuf.secondaryColor = params.secondaryColor; + + constBuf.lightPos = params.lightPos; + constBuf.lightDir = params.lightDir; + + constBuf.bias = params.bias; + constBuf.expand = params.expand; + constBuf.spotMin = params.spotMin; + constBuf.spotMax = params.spotMax; + + constBuf.grid = params.grid; + constBuf.tex = params.tex; + constBuf.colorArray = params.colorArray; + + memcpy(constBuf.shadowTaps, params.shadowTaps, sizeof(constBuf.shadowTaps)); +} + +/* static */void RenderParamsUtilD3D::calcFluidConstantBuffer(const FluidDrawParamsD3D& params, Hlsl::FluidShaderConst& constBuf) +{ + constBuf.modelViewProjection = (Hlsl::float4x4&)(XMMatrixMultiply(XMMatrixMultiply(params.model, params.view), params.projection)); + constBuf.projection = (Hlsl::float4x4&)params.projection; + constBuf.inverseModelView = (Hlsl::float4x4&)XMMatrixInverse(nullptr, XMMatrixMultiply(params.model, params.view)); + constBuf.inverseProjection = (Hlsl::float4x4&)XMMatrixInverse(nullptr, params.projection); + + //constBuf.invTexScale = invTexScale; + //constBuf.invProjection = invProjection; + constBuf.invViewport = params.invViewport; + + constBuf.blurRadiusWorld = params.blurRadiusWorld; + constBuf.blurScale = params.blurScale; + constBuf.blurFalloff = params.blurFalloff; + constBuf.debug = params.debug; +} + +/* static */void RenderParamsUtilD3D::calcDiffuseConstantBuffer(const DiffuseDrawParamsD3D& params, Hlsl::DiffuseShaderConst& constBuf) +{ + using namespace DirectX; + + XMMATRIX modelViewProj = XMMatrixMultiply(XMMatrixMultiply(params.model, params.view), params.projection); + constBuf.modelViewProjection = (Hlsl::float4x4&)modelViewProj; + XMMATRIX modelView = XMMatrixMultiply(params.model, params.view); + constBuf.modelView = (Hlsl::float4x4&)modelView; + constBuf.projection = (Hlsl::float4x4&)params.projection; + + constBuf.motionBlurScale = params.motionScale; + constBuf.diffuseRadius = params.diffuseRadius; + constBuf.diffuseScale = params.diffuseScale; + constBuf.spotMin = params.spotMin; + constBuf.spotMax = params.spotMax; + + constBuf.lightTransform = (Hlsl::float4x4&)params.lightTransform; + constBuf.lightPos = params.lightPos; + constBuf.lightDir = params.lightDir; + constBuf.color = params.color; + + memcpy(constBuf.shadowTaps, params.shadowTaps, sizeof(constBuf.shadowTaps)); +} + +/* static */void RenderParamsUtilD3D::calcFluidCompositeConstantBuffer(const FluidDrawParamsD3D& params, Hlsl::FluidShaderConst& constBuf) +{ + constBuf.modelViewProjection = (Hlsl::float4x4&)(XMMatrixMultiply(XMMatrixMultiply(params.model, params.view), params.projection)); + constBuf.modelView = (Hlsl::float4x4&)XMMatrixMultiply(params.model, params.view); + constBuf.projection = (Hlsl::float4x4&)params.projection; + constBuf.inverseModelView = (Hlsl::float4x4&)XMMatrixInverse(nullptr, XMMatrixMultiply(params.model, params.view)); + constBuf.inverseProjection = (Hlsl::float4x4&)XMMatrixInverse(nullptr, params.projection); + + constBuf.lightTransform = (Hlsl::float4x4&)params.lightTransform; + + constBuf.invTexScale = params.invTexScale; + + //constBuf.invViewport = params.invViewport; + //constBuf.invProjection = params.invProjection; + + constBuf.blurRadiusWorld = params.blurRadiusWorld; + constBuf.blurScale = params.blurScale; + constBuf.blurFalloff = params.blurFalloff; + constBuf.debug = params.debug; + + constBuf.clipPosToEye = params.clipPosToEye; + constBuf.color = params.color; + constBuf.ior = params.ior; + constBuf.spotMin = params.spotMin; + constBuf.spotMax = params.spotMax; + + constBuf.lightPos = params.lightPos; + constBuf.lightDir = params.lightDir; + + typedef DirectX::XMFLOAT2 float2; + const float2 taps[] = + { + float2(-0.326212f,-0.40581f), float2(-0.840144f,-0.07358f), + float2(-0.695914f,0.457137f), float2(-0.203345f,0.620716f), + float2(0.96234f,-0.194983f), float2(0.473434f,-0.480026f), + float2(0.519456f,0.767022f), float2(0.185461f,-0.893124f), + float2(0.507431f,0.064425f), float2(0.89642f,0.412458f), + float2(-0.32194f,-0.932615f), float2(-0.791559f,-0.59771f) + }; + memcpy(constBuf.shadowTaps, taps, sizeof(taps)); +} + +/* static */void RenderParamsUtilD3D::calcPointConstantBuffer(const PointDrawParamsD3D& params, Hlsl::PointShaderConst& constBuf) +{ + using namespace DirectX; + + constBuf.modelView = (float4x4&)XMMatrixMultiply(params.model, params.view); + constBuf.projection = (float4x4&)params.projection; + + constBuf.pointRadius = params.pointRadius; + constBuf.pointScale = params.pointScale; + constBuf.spotMin = params.spotMin; + constBuf.spotMax = params.spotMax; + + constBuf.lightTransform = (float4x4&)params.lightTransform; + constBuf.lightPos = params.lightPos; + constBuf.lightDir = params.lightDir; + + for (int i = 0; i < 8; i++) + constBuf.colors[i] = params.colors[i]; + + memcpy(constBuf.shadowTaps, params.shadowTaps, sizeof(constBuf.shadowTaps)); + + constBuf.mode = params.mode; +}
\ No newline at end of file |