| 485 | } |
| 486 | |
| 487 | ExampleBase::ExampleBase(const LLGL::UTF8String& title) |
| 488 | { |
| 489 | // Set report callback to standard output if not already done |
| 490 | LLGL::Log::RegisterCallbackStd(); |
| 491 | |
| 492 | // Set up renderer descriptor |
| 493 | LLGL::RenderSystemDescriptor rendererDesc = g_Config.rendererModule; |
| 494 | |
| 495 | #if defined LLGL_OS_ANDROID |
| 496 | |
| 497 | LLGL::RendererConfigurationOpenGL cfgGL; |
| 498 | |
| 499 | if (android_app* app = ExampleBase::androidApp_) |
| 500 | rendererDesc.androidApp = app; |
| 501 | else |
| 502 | LLGL_THROW_INVALID_ARGUMENT("'android_app' state was not specified"); |
| 503 | |
| 504 | if (rendererDesc.moduleName == "OpenGLES3") |
| 505 | { |
| 506 | cfgGL.majorVersion = 3; |
| 507 | cfgGL.minorVersion = 1; |
| 508 | rendererDesc.rendererConfig = &cfgGL; |
| 509 | rendererDesc.rendererConfigSize = sizeof(cfgGL); |
| 510 | } |
| 511 | #endif |
| 512 | |
| 513 | if (g_Config.debugger) |
| 514 | { |
| 515 | debuggerObj_ = std::unique_ptr<LLGL::RenderingDebugger>{ new LLGL::RenderingDebugger() }; |
| 516 | #ifdef LLGL_DEBUG |
| 517 | rendererDesc.flags = LLGL::RenderSystemFlags::DebugDevice; |
| 518 | #endif |
| 519 | rendererDesc.debugger = debuggerObj_.get(); |
| 520 | } |
| 521 | |
| 522 | // Create render system |
| 523 | LLGL::Report report; |
| 524 | rendererDesc.flags |= g_Config.flags; |
| 525 | renderer = LLGL::RenderSystem::Load(rendererDesc, &report); |
| 526 | |
| 527 | // Fallback to null device if selected renderer cannot be loaded |
| 528 | if (!renderer) |
| 529 | { |
| 530 | LLGL::Log::Errorf("Failed to load \"%s\" module. Falling back to \"Null\" device.\n", rendererDesc.moduleName.c_str()); |
| 531 | LLGL::Log::Errorf("Reason for failure: %s", report.HasErrors() ? report.GetText() : "Unknown\n"); |
| 532 | renderer = LLGL::RenderSystem::Load("Null"); |
| 533 | if (!renderer) |
| 534 | { |
| 535 | LLGL::Log::Errorf("Failed to load \"Null\" module. Exiting.\n"); |
| 536 | exit(1); |
| 537 | } |
| 538 | } |
| 539 | |
| 540 | // Create swap-chain |
| 541 | LLGL::SwapChainDescriptor swapChainDesc; |
| 542 | { |
| 543 | swapChainDesc.debugName = "SwapChain"; |
| 544 | swapChainDesc.resolution = ScaleResolutionForDisplay(g_Config.windowSize, LLGL::Display::GetPrimary()); |
nothing calls this directly
no test coverage detected