bool DynamicStreamingD3D12Bundle::CreateGeometryBuffer(size_t _maxVertexCount) { const size_t sizeofVertex = sizeof(Vec2); m_BufferSize = sizeofVertex * _maxVertexCount; const size_t totalSize = m_BufferSize * NUM_ACCUMULATED_FRAMES; if (FAILED(g_D3D12Device->CreateCommittedResource( &CD3D12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), D3D12_HEAP_FLAG_NONE, &CD3D12_RESOURCE_DESC::Buffer(totalSize), D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&m_GeometryBuffer) ))) return false; m_VertexBufferView = D3D12_VERTEX_BUFFER_VIEW{ m_GeometryBuffer->GetGPUVirtualAddress(), totalSize, sizeofVertex }; m_GeometryBuffer->Map(0, 0, reinterpret_cast<void**>(&m_VertexData)); kVertexSizeBytes = sizeof(Vec2); kParticleCount = _maxVertexCount / kVertsPerParticle; kTotalVertices = _maxVertexCount; kOffsetInBytes = m_BufferSize * g_curContext; kPerticleInBytes = kVertsPerParticle * kVertexSizeBytes; return true; }
void TextureManager::LoadTextures(const std::vector<std::string>& TexturesLocation) { for (std::string TextureLoc : TexturesLocation) { const std::string &fixed = "..\\examples\\assets\\" + TextureLoc.substr(0, TextureLoc.find_last_of('.')) + ".DDS"; std::ifstream DDSFile(fixed, std::ifstream::binary); irr::video::CImageLoaderDDS DDSPic(DDSFile); #ifdef GLBUILD WrapperResource *res = (WrapperResource*)malloc(sizeof(WrapperResource)); // TODO : clean it GLTexture *tmptexture = new GLTexture(DDSPic.getLoadedImage()); res->GLValue.Resource = tmptexture->Id; res->GLValue.Type = GL_TEXTURE_2D; #endif #ifdef DXBUILD D3DTexture TextureInRam(DDSPic.getLoadedImage()); WrapperResource *res = (WrapperResource*)malloc(sizeof(WrapperResource)); HRESULT hr = Context::getInstance()->dev->CreateCommittedResource( &CD3D12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT), D3D12_HEAP_MISC_NONE, &CD3D12_RESOURCE_DESC::Tex2D(TextureInRam.getFormat(), (UINT)TextureInRam.getWidth(), (UINT)TextureInRam.getHeight(), 1, (UINT16)TextureInRam.getMipLevelsCount()), D3D12_RESOURCE_USAGE_GENERIC_READ, nullptr, IID_PPV_ARGS(&res->D3DValue.resource) ); Microsoft::WRL::ComPtr<ID3D12CommandAllocator> cmdalloc; Context::getInstance()->dev->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&cmdalloc)); Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> cmdlist; Context::getInstance()->dev->CreateCommandList(1, D3D12_COMMAND_LIST_TYPE_DIRECT, cmdalloc.Get(), nullptr, IID_PPV_ARGS(&cmdlist)); TextureInRam.CreateUploadCommandToResourceInDefaultHeap(cmdlist.Get(), res->D3DValue.resource); cmdlist->Close(); Context::getInstance()->cmdqueue->ExecuteCommandLists(1, (ID3D12CommandList**)cmdlist.GetAddressOf()); HANDLE handle = getCPUSyncHandle(Context::getInstance()->cmdqueue.Get()); res->D3DValue.description.TextureView.SRV = TextureInRam.getResourceViewDesc(); WaitForSingleObject(handle, INFINITE); CloseHandle(handle); #endif textureSet.emplace(TextureLoc, res); } }