| 268 | } |
| 269 | |
| 270 | int provider_main(int argc, char* argv[]) |
| 271 | { |
| 272 | // report process information |
| 273 | auto id = skr_get_current_process_id(); |
| 274 | SKR_LOG_DEBUG(u8"exec_mode: %s, process id: %lld", argv[1], id); |
| 275 | const SProcessId provider_id = skr_get_current_process_id(); |
| 276 | SKR_LOG_TRACE(u8"provider id: %d", provider_id); |
| 277 | |
| 278 | // initialize db |
| 279 | MDB_env* env = nullptr; |
| 280 | env_create(&env); |
| 281 | MDB_dbi dbi; |
| 282 | dbi_create(env, &dbi, false); |
| 283 | SKR_LOG_TRACE(u8"db id: %u", dbi); |
| 284 | |
| 285 | // initialize renderer |
| 286 | if (SDL_Init(SDL_INIT_EVERYTHING) != 0) return -1; |
| 287 | auto renderer = SkrNew<ProviderRenderer>(); |
| 288 | if (argc >= 3) |
| 289 | { |
| 290 | renderer->backend = (strcmp(argv[2], "--d3d12") == 0) ? CGPU_BACKEND_D3D12 : renderer->backend; |
| 291 | renderer->backend = (strcmp(argv[2], "--vulkan") == 0) ? CGPU_BACKEND_VULKAN : renderer->backend; |
| 292 | } |
| 293 | renderer->create_window(); |
| 294 | renderer->create_api_objects(); |
| 295 | renderer->create_render_pipeline(); |
| 296 | renderer->create_blit_pipeline(); |
| 297 | |
| 298 | // initialize render graph |
| 299 | namespace render_graph = skr::render_graph; |
| 300 | auto graph = render_graph::RenderGraph::create( |
| 301 | [=](render_graph::RenderGraphBuilder& builder) { |
| 302 | builder.with_device(renderer->device) |
| 303 | .with_gfx_queue(renderer->gfx_queue); |
| 304 | }); |
| 305 | |
| 306 | // loop |
| 307 | bool quit = false; |
| 308 | while (!quit) |
| 309 | { |
| 310 | SDL_Event event; |
| 311 | while (SDL_PollEvent(&event)) |
| 312 | { |
| 313 | if (SDL_GetWindowID(renderer->sdl_window) == event.window.windowID) |
| 314 | { |
| 315 | if (!SDLEventHandler(&event, renderer->sdl_window)) |
| 316 | { |
| 317 | quit = true; |
| 318 | } |
| 319 | } |
| 320 | if (event.type == SDL_WINDOWEVENT) |
| 321 | { |
| 322 | Uint8 window_event = event.window.event; |
| 323 | if (window_event == SDL_WINDOWEVENT_SIZE_CHANGED) |
| 324 | { |
| 325 | cgpu_wait_queue_idle(renderer->gfx_queue); |
| 326 | cgpu_free_swapchain(renderer->swapchain); |
| 327 | int width = 0, height = 0; |
no test coverage detected