diff options
| author | Miles Macklin <[email protected]> | 2017-06-09 13:41:15 +1200 |
|---|---|---|
| committer | Miles Macklin <[email protected]> | 2017-06-09 13:41:15 +1200 |
| commit | 688b5f42e9bfe498d7af7075d4d8f4429867f3a3 (patch) | |
| tree | 7e0d0e7c95298f0418723abd92f61ac6e16b055e /demo/d3d11/fluidRenderD3D11.h | |
| parent | Update README.md (diff) | |
| download | flex-688b5f42e9bfe498d7af7075d4d8f4429867f3a3.tar.xz flex-688b5f42e9bfe498d7af7075d4d8f4429867f3a3.zip | |
1.2.0.beta.11.2.0.beta.1
Diffstat (limited to 'demo/d3d11/fluidRenderD3D11.h')
| -rw-r--r-- | demo/d3d11/fluidRenderD3D11.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/demo/d3d11/fluidRenderD3D11.h b/demo/d3d11/fluidRenderD3D11.h new file mode 100644 index 0000000..ad59534 --- /dev/null +++ b/demo/d3d11/fluidRenderD3D11.h @@ -0,0 +1,109 @@ +/* + * 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 + +#include <DirectXMath.h> + +#include <d3d11.h> + +#include "renderTargetD3D11.h" +#include "shadowMapD3D11.h" +#include "../include/NvFlex.h" +#include "../d3d/renderParamsD3D.h" +#include "shaders.h" + + +struct FluidRenderBuffersD3D11 +{ + FluidRenderBuffersD3D11(): + m_positionsBuf(nullptr), + m_densitiesBuf(nullptr), + m_indicesBuf(nullptr) + { + for (int i = 0; i < 3; i++) + { + m_anisotropiesBufArr[i] = nullptr; + } + m_numParticles = 0; + } + ~FluidRenderBuffersD3D11() + { + NvFlexUnregisterD3DBuffer(m_positionsBuf); + NvFlexUnregisterD3DBuffer(m_densitiesBuf); + NvFlexUnregisterD3DBuffer(m_indicesBuf); + + for (int i = 0; i < 3; i++) + { + NvFlexUnregisterD3DBuffer(m_anisotropiesBufArr[i]); + } + } + + int m_numParticles; + ComPtr<ID3D11Buffer> m_positions; + ComPtr<ID3D11Buffer> m_densities; + ComPtr<ID3D11Buffer> m_anisotropiesArr[3]; + ComPtr<ID3D11Buffer> m_indices; + + ComPtr<ID3D11Buffer> m_fluid; // to be removed + + // wrapper buffers that allow Flex to write directly to VBOs + NvFlexBuffer* m_positionsBuf; + NvFlexBuffer* m_densitiesBuf; + NvFlexBuffer* m_anisotropiesBufArr[3]; + NvFlexBuffer* m_indicesBuf; +}; + +struct FluidRendererD3D11 +{ + void init(ID3D11Device* device, ID3D11DeviceContext* context, int width, int height); + + void drawEllipsoids(const FluidDrawParamsD3D* params, const FluidRenderBuffersD3D11* buffers); + void drawBlurDepth(const FluidDrawParamsD3D* params); + void drawComposite(const FluidDrawParamsD3D* params, ID3D11ShaderResourceView* sceneMap); + + FluidRendererD3D11(): + m_device(nullptr), + m_deviceContext(nullptr) + {} + + void _createScreenQuad(); + + ID3D11Device* m_device; + ID3D11DeviceContext* m_deviceContext; + + ComPtr<ID3D11InputLayout> m_ellipsoidDepthLayout; + ComPtr<ID3D11VertexShader> m_ellipsoidDepthVs; + ComPtr<ID3D11GeometryShader> m_ellipsoidDepthGs; + ComPtr<ID3D11PixelShader> m_ellipsoidDepthPs; + + ComPtr<ID3D11InputLayout> m_passThroughLayout; + ComPtr<ID3D11VertexShader> m_passThroughVs; + + ComPtr<ID3D11PixelShader> m_blurDepthPs; + ComPtr<ID3D11PixelShader> m_compositePs; + + ComPtr<ID3D11Buffer> m_constantBuffer; + + // Right handed rasterizer state + ComPtr<ID3D11RasterizerState> m_rasterizerState[NUM_FLUID_RENDER_MODES][NUM_FLUID_CULL_MODES]; + + ComPtr<ID3D11Buffer> m_quadVertexBuffer; + ComPtr<ID3D11Buffer> m_quadIndexBuffer; + + RenderTargetD3D11 m_depthTexture; + RenderTargetD3D11 m_depthSmoothTexture; + RenderTargetD3D11 m_thicknessTexture; + + int m_sceneWidth; + int m_sceneHeight; +}; + + |