MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Blast / SkinnedRenderMesh

Method SkinnedRenderMesh

samples/SampleBase/renderer/SkinnedRenderMesh.cpp:32–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30#include "Renderer.h"
31
32SkinnedRenderMesh::SkinnedRenderMesh(const std::vector<const SimpleMesh*>& meshes)
33{
34 PX_ASSERT_WITH_MESSAGE(meshes.size() <= MeshesCountMax, "meshes.size() have to be <= SkinnedRenderMesh::MeshesCountMax");
35
36 m_device = GetDeviceManager()->GetDevice();
37
38 // input element desc setup
39 m_inputDesc.push_back({ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 });
40 m_inputDesc.push_back({ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 });
41 m_inputDesc.push_back({ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 });
42 m_inputDesc.push_back({ "TEXCOORD", 1, DXGI_FORMAT_R32_UINT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 });
43
44 // reserve VB
45 uint32_t verticesTotal = 0;
46 std::for_each(meshes.begin(), meshes.end(), [&](const SimpleMesh* c) { verticesTotal += (uint32_t)c->vertices.size(); });
47 std::vector<SimpleMesh::Vertex> vertexBuffer;
48 vertexBuffer.reserve(verticesTotal);
49
50 // reserve IB
51 uint32_t indicesTotal = 0;
52 std::for_each(meshes.begin(), meshes.end(), [&](const SimpleMesh* c) { indicesTotal += (uint32_t)c->indices.size(); });
53 m_indices.reserve(indicesTotal);
54
55 // fill VB, IB, MeshInfo
56 m_meshesInfo.resize(meshes.size());
57 for (uint32_t meshIndex = 0; meshIndex < meshes.size(); ++meshIndex)
58 {
59 const SimpleMesh* mesh = meshes[meshIndex];
60 MeshInfo& meshInfo = m_meshesInfo[meshIndex];
61
62 meshInfo.firstVertex = (uint32_t)vertexBuffer.size();
63 vertexBuffer.insert(vertexBuffer.end(), mesh->vertices.begin(), mesh->vertices.end());
64 meshInfo.verticesCount = (uint32_t)mesh->vertices.size();
65
66 meshInfo.firstIndex = (uint32_t)m_indices.size();
67 uint32_t indexOffset = meshInfo.firstVertex;
68 for (uint32_t index : mesh->indices)
69 {
70 m_indices.push_back((uint32_t)index + indexOffset);
71 }
72 meshInfo.indicesCount = (uint32_t)mesh->indices.size();
73 }
74
75 // vertex buffer
76 {
77 D3D11_SUBRESOURCE_DATA vertexBufferData;
78
79 ZeroMemory(&vertexBufferData, sizeof(vertexBufferData));
80 vertexBufferData.pSysMem = vertexBuffer.data();
81
82 D3D11_BUFFER_DESC bufferDesc;
83
84 memset(&bufferDesc, 0, sizeof(D3D11_BUFFER_DESC));
85 bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
86 bufferDesc.ByteWidth = (uint32_t)(sizeof(SimpleMesh::Vertex) * vertexBuffer.size());
87 bufferDesc.CPUAccessFlags = 0;
88 bufferDesc.MiscFlags = 0;
89 bufferDesc.Usage = D3D11_USAGE_IMMUTABLE;

Callers

nothing calls this directly

Calls 7

GetDeviceManagerFunction · 0.85
GetDeviceMethod · 0.80
push_backMethod · 0.80
resizeMethod · 0.80
sizeMethod · 0.45
reserveMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected