void setupVertexInputState(std::vector<vkMeshLoader::VertexLayout> layout) { bindingDescription = vkTools::initializers::vertexInputBindingDescription( vertexBufferBinding, vertexSize(layout), VK_VERTEX_INPUT_RATE_VERTEX); attributeDescriptions.clear(); uint32_t offset = 0; uint32_t binding = 0; for (auto& layoutDetail : layout) { // Format (layout) VkFormat format = (layoutDetail == VERTEX_LAYOUT_UV) ? VK_FORMAT_R32G32_SFLOAT : VK_FORMAT_R32G32B32_SFLOAT; attributeDescriptions.push_back( vkTools::initializers::vertexInputAttributeDescription( vertexBufferBinding, binding, format, offset)); // Offset offset += (layoutDetail == VERTEX_LAYOUT_UV) ? (2 * sizeof(float)) : (3 * sizeof(float)); binding++; } vertexInputState = vkTools::initializers::pipelineVertexInputStateCreateInfo(); vertexInputState.vertexBindingDescriptionCount = 1; vertexInputState.pVertexBindingDescriptions = &bindingDescription; vertexInputState.vertexAttributeDescriptionCount = attributeDescriptions.size(); vertexInputState.pVertexAttributeDescriptions = attributeDescriptions.data(); }
void RayTracerMaterial::createVertexBuffer(ID3D11Device* device, VertexPositionTexture* vertices, UINT vertexCount, ID3D11Buffer** vertexBuffer) const { D3D11_BUFFER_DESC vertexBufferDesc; ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc)); vertexBufferDesc.ByteWidth = vertexSize() * vertexCount; vertexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; D3D11_SUBRESOURCE_DATA vertexSubResourceData; ZeroMemory(&vertexSubResourceData, sizeof(vertexSubResourceData)); vertexSubResourceData.pSysMem = vertices; if (FAILED(device->CreateBuffer(&vertexBufferDesc, &vertexSubResourceData, vertexBuffer))) { throw GameException("ID3D11Device::CreateBuffer() failed."); } }
void SkyboxMaterial::createVertexBuffer(ID3D11Device * device, XMFLOAT4 * vertices, UINT vertexCount, ID3D11Buffer** vertexBuffers)const { D3D11_BUFFER_DESC vertexBufferDesc; ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc)); vertexBufferDesc.ByteWidth = vertexCount * vertexSize(); vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE; D3D11_SUBRESOURCE_DATA vertexSubResource; ZeroMemory(&vertexSubResource, sizeof(vertexSubResource)); vertexSubResource.pSysMem = vertices; if (FAILED(device->CreateBuffer(&vertexBufferDesc, &vertexSubResource, vertexBuffers))) { throw GameException(L"CreateBuffer Failed "); } }
size_t Mesh::byteSize() { return _layout.size() * vertexSize(); }