diff --git a/app/widget/manageddisplay/manageddisplay.cpp b/app/widget/manageddisplay/manageddisplay.cpp index e25f16e0d..1e37b1684 100644 --- a/app/widget/manageddisplay/manageddisplay.cpp +++ b/app/widget/manageddisplay/manageddisplay.cpp @@ -25,6 +25,9 @@ #include #include "panel/panelmanager.h" +#ifdef OAK_ENABLE_DYNAMIC_RENDER_BACKEND +#include "render/backend/dynamicrenderer.h" +#endif #include "render/opengl/openglrenderer.h" #include "render/rendermanager.h" @@ -61,8 +64,15 @@ ManagedDisplayWidget::ManagedDisplayWidget(QWidget *parent) inner_widget_->installEventFilter(this); - // Create OpenGL renderer + // Create renderer bound to the widget's OpenGL context. +#ifdef OAK_ENABLE_DYNAMIC_RENDER_BACKEND + attached_renderer_ = new DynamicRenderer( + RenderManager::BackendToString( + RenderManager::instance()->requested_backend()), + this); +#else attached_renderer_ = new OpenGLRenderer(this); +#endif // Create widget wrapper for OpenGL window #ifdef USE_QOPENGLWINDOW @@ -244,6 +254,14 @@ void ManagedDisplayWidget::OnInit() if (RenderManager::instance()->backend() == RenderManager::kOpenGL) { QOpenGLContext *context = static_cast(inner_widget_)->context(); +#ifdef OAK_ENABLE_DYNAMIC_RENDER_BACKEND + if (auto *dynamic_renderer = + dynamic_cast(attached_renderer_)) { + dynamic_renderer->InitWithOpenGLContext(context); + dynamic_renderer->PostInit(); + return; + } +#endif static_cast(attached_renderer_)->Init(context); static_cast(attached_renderer_)->PostInit(); } diff --git a/docs/zh/render-backend-dynamic-plan.md b/docs/zh/render-backend-dynamic-plan.md index 2cc7a54a9..c9d51ff47 100644 --- a/docs/zh/render-backend-dynamic-plan.md +++ b/docs/zh/render-backend-dynamic-plan.md @@ -77,6 +77,7 @@ ## 阶段 4:Viewer 双后端 - 当前 viewer display 基于 OpenGL widget 和 GL texture id。 +- 已在 `OAK_ENABLE_DYNAMIC_RENDER_BACKEND=ON` 实验构建下让 Viewer 的 managed display 使用 `DynamicRenderer` 创建 renderer,并把现有 `QOpenGLContext` 传入动态后端;默认构建仍直接使用 `OpenGLRenderer`。 - 新增 backend-neutral viewer path。 - OpenGL 使用现有 `QOpenGLWidget/QOpenGLWindow`。 - Vulkan 使用 `QVulkanWindow` 或 Qt RHI/QRhi 显示路径。