bool Shape::CombineWith(Shape* otherShape, D2D1_COMBINE_MODE mode) { Microsoft::WRL::ComPtr<ID2D1GeometrySink> sink; Microsoft::WRL::ComPtr<ID2D1PathGeometry> path; HRESULT hr = Canvas::c_D2DFactory->CreatePathGeometry(path.GetAddressOf()); if (FAILED(hr)) return false; hr = path->Open(sink.GetAddressOf()); if (FAILED(hr)) return false; if (otherShape) { hr = m_Shape->CombineWithGeometry( otherShape->m_Shape.Get(), mode, otherShape->GetShapeMatrix(), sink.Get()); if (FAILED(hr)) return false; sink->Close(); hr = path.CopyTo(m_Shape.ReleaseAndGetAddressOf()); if (FAILED(hr)) return false; return true; } static const D2D1_RECT_F rect = { 0.0f, 0.0f, 0.0f, 0.0f }; Microsoft::WRL::ComPtr<ID2D1RectangleGeometry> emptyShape; hr = Canvas::c_D2DFactory->CreateRectangleGeometry(rect, emptyShape.GetAddressOf()); if (FAILED(hr)) return false; hr = emptyShape->CombineWithGeometry(m_Shape.Get(), mode, GetShapeMatrix(), sink.Get()); sink->Close(); if (FAILED(hr)) return false; hr = path.CopyTo(m_Shape.ReleaseAndGetAddressOf()); if (FAILED(hr)) return false; m_Rotation = 0.0f; m_RotationAnchor = D2D1::Point2F(); m_RotationAnchorDefined = false; m_Scale = D2D1::SizeF(1.0f, 1.0f); m_ScaleAnchor = D2D1::Point2F(); m_ScaleAnchorDefined = false; m_Skew = D2D1::Point2F(); m_SkewAnchor = D2D1::Point2F(); m_SkewAnchorDefined = false; m_Offset = D2D1::SizeF(0.0f, 0.0f); return true; }
Arc::Arc(FLOAT x1, FLOAT y1, FLOAT x2, FLOAT y2, FLOAT xRadius, FLOAT yRadius, FLOAT angle, D2D1_SWEEP_DIRECTION sweep, D2D1_ARC_SIZE size, D2D1_FIGURE_END ending) : Shape(ShapeType::Arc), m_StartPoint(D2D1::Point2F(x1, y1)), m_ArcSegment(D2D1::ArcSegment( D2D1::Point2F(x2, y2), D2D1::SizeF(xRadius, yRadius), angle, sweep, size)), m_ShapeEnding(ending) { Microsoft::WRL::ComPtr<ID2D1GeometrySink> sink; Microsoft::WRL::ComPtr<ID2D1PathGeometry> path; HRESULT hr = Canvas::c_D2DFactory->CreatePathGeometry(path.GetAddressOf()); if (SUCCEEDED(hr)) { hr = path->Open(sink.GetAddressOf()); if (SUCCEEDED(hr)) { sink->BeginFigure(m_StartPoint, D2D1_FIGURE_BEGIN_FILLED); sink->AddArc(m_ArcSegment); sink->EndFigure(m_ShapeEnding); sink->Close(); hr = path.CopyTo(m_Shape.GetAddressOf()); if (SUCCEEDED(hr)) return; } } LogErrorF(L"Could not create arc object. X1=%i, Y1=%i, X2=%i, Y2=%i, XRadius=%i, YRadius=%i, Angle=%i", (int)x1, (int)y1, (int)x2, (int)y2, (int)xRadius, (int)yRadius, (int)angle); }
void Model::Create() { CreateRootSignature(); CreatePipelineState(); Microsoft::WRL::ComPtr<ID3D12CommandAllocator> CommandAllocator; Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> CommandList; Microsoft::WRL::ComPtr<ID3D12Resource> VertexUploadResource; Microsoft::WRL::ComPtr<ID3D12Resource> IndexUploadResource; GPUFence Fence; Fence.Initialize(DeviceContext.GetDevice()); Utility::ThrowOnFail(DeviceContext.GetDevice()->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&CommandAllocator))); Utility::ThrowOnFail(DeviceContext.GetDevice()->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, CommandAllocator.Get(), nullptr, IID_PPV_ARGS(&CommandList))); UploadVertices(CommandList, VertexUploadResource); UploadIndices(CommandList, IndexUploadResource); Utility::ThrowOnFail(CommandList->Close()); ID3D12CommandList * CommandListPointer = CommandList.Get(); DeviceContext.GetCommandQueue()->ExecuteCommandLists(1, &CommandListPointer); Fence.SetAndWait(DeviceContext.GetCommandQueue()); }
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); } }