aboutsummaryrefslogtreecommitdiff
path: root/samples/dual_layer/D3D12/src/D3D12Mesh.cpp
diff options
context:
space:
mode:
authorlbavoil <[email protected]>2018-03-15 11:08:34 +0100
committerlbavoil <[email protected]>2018-03-15 11:08:34 +0100
commit636807e68a85a978473764d171ed0c7cc36f9be6 (patch)
tree784a3d4fa8f48b4c085dd959678505b2af12f425 /samples/dual_layer/D3D12/src/D3D12Mesh.cpp
parentRemove test folder (diff)
downloadhbaoplus-636807e68a85a978473764d171ed0c7cc36f9be6.tar.xz
hbaoplus-636807e68a85a978473764d171ed0c7cc36f9be6.zip
HBAO+ 4.0.0.23740451
Diffstat (limited to 'samples/dual_layer/D3D12/src/D3D12Mesh.cpp')
-rw-r--r--samples/dual_layer/D3D12/src/D3D12Mesh.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/samples/dual_layer/D3D12/src/D3D12Mesh.cpp b/samples/dual_layer/D3D12/src/D3D12Mesh.cpp
new file mode 100644
index 0000000..e7f13d5
--- /dev/null
+++ b/samples/dual_layer/D3D12/src/D3D12Mesh.cpp
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2008-2018, 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.
+*/
+
+#define _SCL_SECURE_NO_WARNINGS
+#include "D3D12Mesh.h"
+#include "d3dx12.h"
+
+bool D3D12Mesh::InitializeFromMesh(ID3D12Device* device, Mesh& mesh)
+{
+ mNumIndices = (uint32_t)mesh.mIndices.size();
+
+ ID3D12Resource* vertexBuffer = nullptr;
+ ID3D12Resource* indexBuffer = nullptr;
+
+ uint32_t vertexBufferSize = (uint32_t)mesh.mVertices.size() * sizeof(decltype(mesh.mVertices)::value_type);
+ uint32_t indexBufferSize = (uint32_t)mesh.mIndices.size() * sizeof(decltype(mesh.mIndices)::value_type);
+
+ device->CreateCommittedResource(&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), D3D12_HEAP_FLAG_NONE, &CD3DX12_RESOURCE_DESC::Buffer(vertexBufferSize),
+ D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&vertexBuffer));
+
+ device->CreateCommittedResource(&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), D3D12_HEAP_FLAG_NONE, &CD3DX12_RESOURCE_DESC::Buffer(indexBufferSize),
+ D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&indexBuffer));
+
+ void* uploadPtr = nullptr;
+ vertexBuffer->Map(0, nullptr, &uploadPtr);
+ std::copy(mesh.mVertices.begin(), mesh.mVertices.end(), (decltype(mesh.mVertices)::value_type*)uploadPtr);
+ vertexBuffer->Unmap(0, nullptr);
+
+ indexBuffer->Map(0, nullptr, &uploadPtr);
+ std::copy(mesh.mIndices.begin(), mesh.mIndices.end(), (decltype(mesh.mIndices)::value_type*)uploadPtr);
+ indexBuffer->Unmap(0, nullptr);
+
+ mVertexBuffer.BufferLocation = vertexBuffer->GetGPUVirtualAddress();
+ mVertexBuffer.SizeInBytes = vertexBufferSize;
+ mVertexBuffer.StrideInBytes = sizeof(decltype(mesh.mVertices)::value_type);
+
+ mIndexBuffer.BufferLocation = indexBuffer->GetGPUVirtualAddress();
+ mIndexBuffer.SizeInBytes = indexBufferSize;
+ mIndexBuffer.Format = DXGI_FORMAT_R32_UINT;
+
+ return true;
+}