// API Function Definitions void pbrtInit(const Options &opt) { PbrtOptions = opt; // API Initialization if (currentApiState != APIState::Uninitialized) Error("pbrtInit() has already been called."); currentApiState = APIState::OptionsBlock; renderOptions.reset(new RenderOptions); graphicsState = GraphicsState(); // General \pbrt Initialization SampledSpectrum::Init(); InitProfiler(); }
void InitApplication(u32 windowWidth, u32 windowHeight, ApplicationFlagsEnum flags, ApplicationPresentProfileEnum profile, i32 adapterIndex) { GDisplaySettings.resolution.x = windowWidth; GDisplaySettings.resolution.y = windowHeight; switch (profile) { case APP_PRESENT_THROUGHPUT: { GDisplaySettings.vsync = 1; GDisplaySettings.backbuffers_num = 3; GDisplaySettings.max_gpu_buffered_frames = 3; GDisplaySettings.wait_to_vblank = false; } break; case APP_PRESENT_UNTHROTTLED: { GDisplaySettings.vsync = 0; GDisplaySettings.backbuffers_num = 3; GDisplaySettings.max_gpu_buffered_frames = 3; GDisplaySettings.wait_to_vblank = false; } break; case APP_PRESENT_LOWLATENCY: { GDisplaySettings.vsync = 1; GDisplaySettings.backbuffers_num = 3; GDisplaySettings.max_gpu_buffered_frames = 2; GDisplaySettings.wait_to_vblank = true; } break; case APP_PRESENT_VERYLOWLATENCY: { GDisplaySettings.vsync = 1; GDisplaySettings.backbuffers_num = 2; GDisplaySettings.max_gpu_buffered_frames = 1; GDisplaySettings.wait_to_vblank = true; } break; default: Check(0); } InitMainThread(); InitProfiler(); PROFILE_NAME_THREAD("Main"); InitScheduler(); InitSDL(&SDLWindow); InitDevice(GDisplaySettings.hwnd, false, flags & APP_FLAG_D3D12_DEBUG, adapterIndex); InitRenderingEngines(); InitResources(); GGPUMainQueue = CreateQueue(TEXT_("3d_engine"), GPUQueueEnum::Direct); GGPUCopyQueue = CreateQueue(TEXT_("copy_engine"), GPUQueueEnum::Copy); CreateSwapChain(GetD12Queue(GGPUMainQueue)); ImGuiIO& io = ImGui::GetIO(); io.KeyMap[ImGuiKey_Tab] = SDL_SCANCODE_TAB; io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; io.KeyMap[ImGuiKey_UpArrow] = SDL_SCANCODE_UP; io.KeyMap[ImGuiKey_DownArrow] = SDL_SCANCODE_DOWN; io.KeyMap[ImGuiKey_Home] = SDL_SCANCODE_HOME; io.KeyMap[ImGuiKey_End] = SDL_SCANCODE_END; io.KeyMap[ImGuiKey_Delete] = SDL_SCANCODE_DELETE; io.KeyMap[ImGuiKey_Backspace] = SDL_SCANCODE_BACKSPACE; io.KeyMap[ImGuiKey_Enter] = SDL_SCANCODE_RETURN; io.KeyMap[ImGuiKey_Escape] = SDL_SCANCODE_ESCAPE; io.KeyMap[ImGuiKey_A] = SDL_SCANCODE_A; io.KeyMap[ImGuiKey_C] = SDL_SCANCODE_C; io.KeyMap[ImGuiKey_V] = SDL_SCANCODE_V; io.KeyMap[ImGuiKey_X] = SDL_SCANCODE_X; io.KeyMap[ImGuiKey_Y] = SDL_SCANCODE_Y; io.KeyMap[ImGuiKey_Z] = SDL_SCANCODE_Z; io.RenderDrawListsFn = Essence::RenderImDrawLists; io.ImeWindowHandle = GDisplaySettings.hwnd; io.Fonts->AddFontDefault(); unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); io.Fonts->TexID = nullptr; D3D12_SUBRESOURCE_DATA imageData; imageData.pData = pixels; imageData.RowPitch = sizeof(u32) * width; imageData.SlicePitch = sizeof(u32) * width * height; auto fontsTexture = CreateTexture2D(width, height, DXGI_FORMAT_R8G8B8A8_UNORM, NO_TEXTURE_FLAGS, "font_texture"); CopyFromCpuToSubresources(GGPUCopyQueue, Slice(fontsTexture), 1, &imageData); io.Fonts->TexID = HandleToImGuiTexID(fontsTexture); GApplicationInitializeFunction(); // after issuing init copies waiting for completion QueueWait(GGPUMainQueue, GetLastSignaledFence(GGPUCopyQueue)); }