diff --git a/src/engine/engine.cc b/src/engine/engine.cc index ba93638..64ddbd9 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -203,19 +203,18 @@ void Engine::CreateRenderer(bool vulkan) { return; if (vulkan) - renderer_ = std::make_unique(); + renderer_ = + std::make_unique(std::bind(&Engine::ContextLost, this)); else - renderer_ = std::make_unique(); - renderer_->SetContextLostCB(std::bind(&Engine::ContextLost, this)); + renderer_ = + std::make_unique(std::bind(&Engine::ContextLost, this)); bool result = renderer_->Initialize(platform_); - LOG_IF(!result) << "Failed to initialize " << renderer_->GetDebugName() - << " renderer."; if (!result && vulkan) { + LOG << "Failed to initialize " << renderer_->GetDebugName() << " renderer."; LOG << "Fallback to OpenGL renderer."; - renderer_ = std::make_unique(); - renderer_->SetContextLostCB(std::bind(&Engine::ContextLost, this)); - result = renderer_->Initialize(platform_); + CreateRenderer(false); + return; } CHECK(result) << "Failed to initialize " << renderer_->GetDebugName() << " renderer."; diff --git a/src/engine/renderer/opengl/renderer_opengl.cc b/src/engine/renderer/opengl/renderer_opengl.cc index 3a5fd44..8f3c2ef 100644 --- a/src/engine/renderer/opengl/renderer_opengl.cc +++ b/src/engine/renderer/opengl/renderer_opengl.cc @@ -40,8 +40,9 @@ const std::string kAttributeNames[eng::kAttribType_Max] = { namespace eng { #ifdef THREADED_RENDERING -RendererOpenGL::RendererOpenGL() - : main_thread_task_runner_(TaskRunner::GetThreadLocalTaskRunner()) {} +RendererOpenGL::RendererOpenGL(base::Closure context_lost_cb) + : Renderer(context_lost_cb), + main_thread_task_runner_(TaskRunner::GetThreadLocalTaskRunner()) {} #else RendererOpenGL::RendererOpenGL() = default; #endif // THREADED_RENDERING diff --git a/src/engine/renderer/opengl/renderer_opengl.h b/src/engine/renderer/opengl/renderer_opengl.h index 4752c5c..e5c02e6 100644 --- a/src/engine/renderer/opengl/renderer_opengl.h +++ b/src/engine/renderer/opengl/renderer_opengl.h @@ -37,7 +37,7 @@ struct RenderCommand; class RendererOpenGL final : public Renderer { public: - RendererOpenGL(); + RendererOpenGL(base::Closure context_lost_cb); ~RendererOpenGL() final; virtual bool Initialize(Platform* platform) final; diff --git a/src/engine/renderer/renderer.h b/src/engine/renderer/renderer.h index 533590c..564b7b5 100644 --- a/src/engine/renderer/renderer.h +++ b/src/engine/renderer/renderer.h @@ -19,11 +19,10 @@ class Renderer { public: const unsigned kInvalidId = 0; - Renderer() = default; + Renderer(base::Closure context_lost_cb) + : context_lost_cb_{std::move(context_lost_cb)} {} virtual ~Renderer() = default; - void SetContextLostCB(base::Closure cb) { context_lost_cb_ = std::move(cb); } - virtual bool Initialize(Platform* platform) = 0; virtual void Shutdown() = 0; diff --git a/src/engine/renderer/vulkan/renderer_vulkan.cc b/src/engine/renderer/vulkan/renderer_vulkan.cc index 290189f..7affd05 100644 --- a/src/engine/renderer/vulkan/renderer_vulkan.cc +++ b/src/engine/renderer/vulkan/renderer_vulkan.cc @@ -370,7 +370,8 @@ std::pair GetNumBlocksForImageFormat(VkFormat format, namespace eng { -RendererVulkan::RendererVulkan() = default; +RendererVulkan::RendererVulkan(base::Closure context_lost_cb) + : Renderer(context_lost_cb) {} RendererVulkan::~RendererVulkan() { Shutdown(); diff --git a/src/engine/renderer/vulkan/renderer_vulkan.h b/src/engine/renderer/vulkan/renderer_vulkan.h index 3a6a4a7..0bc09e8 100644 --- a/src/engine/renderer/vulkan/renderer_vulkan.h +++ b/src/engine/renderer/vulkan/renderer_vulkan.h @@ -20,7 +20,7 @@ namespace eng { class RendererVulkan final : public Renderer { public: - RendererVulkan(); + RendererVulkan(base::Closure context_lost_cb); ~RendererVulkan() final; virtual bool Initialize(Platform* platform) final;