/* * 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 #include #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 m_positions; ComPtr m_densities; ComPtr m_anisotropiesArr[3]; ComPtr m_indices; ComPtr 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 drawThickness(const FluidDrawParamsD3D* params, const FluidRenderBuffersD3D11* buffers); 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 m_pointThicknessLayout; ComPtr m_pointThicknessVs; ComPtr m_pointThicknessGs; ComPtr m_pointThicknessPs; ComPtr m_ellipsoidDepthLayout; ComPtr m_ellipsoidDepthVs; ComPtr m_ellipsoidDepthGs; ComPtr m_ellipsoidDepthPs; ComPtr m_passThroughLayout; ComPtr m_passThroughVs; ComPtr m_blurDepthPs; ComPtr m_compositePs; ComPtr m_constantBuffer; // Right handed rasterizer state ComPtr m_rasterizerState[NUM_FLUID_RENDER_MODES][NUM_FLUID_CULL_MODES]; ComPtr m_quadVertexBuffer; ComPtr m_quadIndexBuffer; RenderTargetD3D11 m_thicknessTexture; RenderTargetD3D11 m_depthTexture; RenderTargetD3D11 m_depthSmoothTexture; int m_sceneWidth; int m_sceneHeight; };