int main(int argc, char *argv[]) { QApplication a(argc, argv); QString line{}; if(!DBConfigDialog::readFromFile(line)) return 0; if(!line.isEmpty()){ const QStringList parameters = line.split(";"); Database::setParameters(parameters.at(0), parameters.at(1).toInt(), parameters.at(2), parameters.at(3), parameters.at(4)); // check connection if(!Database::connectToDatabase()) goto runCreator; } if(line.isEmpty()){ runCreator: DBConfigDialog dbConfig(line); if(dbConfig.exec()==DBConfigDialog::Rejected) return 0; } MainWindow w; w.show(); return a.exec(); }
IRenderer::Impl::Impl(HWND hwnd, U32 windowWidth, U32 windowHeight, IRenderer* pRenderer) : m_viewport(static_cast<F32>(windowWidth), static_cast<F32>(windowHeight)) , m_scissorRect(windowWidth, windowHeight) , m_psoManager(&m_device, &m_resCache, &m_rootSignature) , m_pRenderer(pRenderer) { // TEMP: Select the second(integrated card) adapter due to some problem with nvidia I can't pinpoint. auto pAdapter = m_hwCaps.GetDisplayAdapter(1).Get(); m_device.Init(pAdapter.Get()); m_hwCaps.CheckMSAASupport(m_device.Get()); m_commandQueue.Init(m_device.Get()); m_swapChain.Init(m_device.Get(), m_commandQueue.Get(), hwnd); m_commandAllocator.Init(m_device.Get()); CreateRootSignature(); // Create Resources ResourceConfig descCB(ResourceType::BUFFER, sizeof(XMFLOAT4X4)); m_viewProjConstBuffer.CreateCommited(m_device.Get(), descCB, &m_pViewProjDataBegin); // Create Descriptor Heaps m_cbDescHeap.Init(m_device.Get(), DescHeapType::CB_SR_UA, MAX_RENDER_ITEMS, true); m_dsvDescHeap.Init(m_device.Get(), DescHeapType::DEPTH_STENCIL, 1); // Create Depth Buffer ClearValue clearValue(DXGI_FORMAT_D32_FLOAT, 1.0f); ResourceConfig dbConfig(ResourceType::TEXTURE2D, 800, 600, DXGI_FORMAT_R32_TYPELESS, TextureLayout::UNKNOWN, ResourceFlag::ALLOW_DEPTH_STENCIL); m_depthBuffer.CreateCommited(m_device.Get(), dbConfig, nullptr, nullptr, 0, D3D12_HEAP_TYPE_DEFAULT, D3D12_RESOURCE_STATE_DEPTH_WRITE, &clearValue); DepthStencilView dsvDesc; m_device.Get()->CreateDepthStencilView(m_depthBuffer.Get(), &dsvDesc, m_dsvDescHeap.GetCPUHandle(0)); // Create a command list m_commandList.Init(m_device.Get(), m_commandAllocator.Get()); m_commandList.Close(); // Create synchronization objects m_fence.Init(m_device.Get(), 0); m_currentFence = 1; m_handleEvent = CreateEventEx(nullptr, FALSE, FALSE, EVENT_ALL_ACCESS); // Synchronize WaitForGPU(); m_resCache.Init(m_device.Get()); }