aboutsummaryrefslogtreecommitdiff
path: root/demo/d3d11/fluidRenderD3D11.h
diff options
context:
space:
mode:
authorMiles Macklin <[email protected]>2017-06-09 13:41:15 +1200
committerMiles Macklin <[email protected]>2017-06-09 13:41:15 +1200
commit688b5f42e9bfe498d7af7075d4d8f4429867f3a3 (patch)
tree7e0d0e7c95298f0418723abd92f61ac6e16b055e /demo/d3d11/fluidRenderD3D11.h
parentUpdate README.md (diff)
downloadflex-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.h109
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;
+};
+
+