void UtilityShaderDraw::DrawQuad(int dst_x, int dst_y, int dst_width, int dst_height, int src_x, int src_y, int src_layer, int src_width, int src_height, int src_full_width, int src_full_height, float z) { float u0 = float(src_x) / float(src_full_width); float v0 = float(src_y) / float(src_full_height); float u1 = float(src_x + src_width) / float(src_full_width); float v1 = float(src_y + src_height) / float(src_full_height); float w = static_cast<float>(src_layer); UtilityShaderVertex vertices[4]; vertices[0].SetPosition(-1.0f, 1.0f, z); vertices[0].SetTextureCoordinates(u0, v1, w); vertices[0].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[1].SetPosition(1.0f, 1.0f, z); vertices[1].SetTextureCoordinates(u1, v1, w); vertices[1].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[2].SetPosition(-1.0f, -1.0f, z); vertices[2].SetTextureCoordinates(u0, v0, w); vertices[2].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[3].SetPosition(1.0f, -1.0f, z); vertices[3].SetTextureCoordinates(u1, v0, w); vertices[3].SetColor(1.0f, 1.0f, 1.0f, 1.0f); Util::SetViewportAndScissor(m_command_buffer, dst_x, dst_y, dst_width, dst_height); UploadVertices(vertices, ArraySize(vertices)); Draw(); }
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 UtilityShaderDraw::DrawColoredQuad(int x, int y, int width, int height, u32 color, float z) { UtilityShaderVertex vertices[4]; vertices[0].SetPosition(-1.0f, 1.0f, z); vertices[0].SetTextureCoordinates(0.0f, 1.0f); vertices[0].SetColor(color); vertices[1].SetPosition(1.0f, 1.0f, z); vertices[1].SetTextureCoordinates(1.0f, 1.0f); vertices[1].SetColor(color); vertices[2].SetPosition(-1.0f, -1.0f, z); vertices[2].SetTextureCoordinates(0.0f, 0.0f); vertices[2].SetColor(color); vertices[3].SetPosition(1.0f, -1.0f, z); vertices[3].SetTextureCoordinates(1.0f, 0.0f); vertices[3].SetColor(color); Util::SetViewportAndScissor(m_command_buffer, x, y, width, height); UploadVertices(vertices, ArraySize(vertices)); Draw(); }
void UtilityShaderDraw::DrawQuad(int x, int y, int width, int height, float z) { UtilityShaderVertex vertices[4]; vertices[0].SetPosition(-1.0f, 1.0f, z); vertices[0].SetTextureCoordinates(0.0f, 1.0f); vertices[0].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[1].SetPosition(1.0f, 1.0f, z); vertices[1].SetTextureCoordinates(1.0f, 1.0f); vertices[1].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[2].SetPosition(-1.0f, -1.0f, z); vertices[2].SetTextureCoordinates(0.0f, 0.0f); vertices[2].SetColor(1.0f, 1.0f, 1.0f, 1.0f); vertices[3].SetPosition(1.0f, -1.0f, z); vertices[3].SetTextureCoordinates(1.0f, 0.0f); vertices[3].SetColor(1.0f, 1.0f, 1.0f, 1.0f); Util::SetViewportAndScissor(m_command_buffer, x, y, width, height); UploadVertices(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, vertices, ArraySize(vertices)); Draw(); }