Route viewer through dynamic backend in experimental builds

This commit is contained in:
2026-07-13 10:19:29 +08:00
parent 3f43073261
commit 76a98e5a93
2 changed files with 20 additions and 1 deletions
+19 -1
View File
@@ -25,6 +25,9 @@
#include <QMessageBox> #include <QMessageBox>
#include "panel/panelmanager.h" #include "panel/panelmanager.h"
#ifdef OAK_ENABLE_DYNAMIC_RENDER_BACKEND
#include "render/backend/dynamicrenderer.h"
#endif
#include "render/opengl/openglrenderer.h" #include "render/opengl/openglrenderer.h"
#include "render/rendermanager.h" #include "render/rendermanager.h"
@@ -61,8 +64,15 @@ ManagedDisplayWidget::ManagedDisplayWidget(QWidget *parent)
inner_widget_->installEventFilter(this); 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); attached_renderer_ = new OpenGLRenderer(this);
#endif
// Create widget wrapper for OpenGL window // Create widget wrapper for OpenGL window
#ifdef USE_QOPENGLWINDOW #ifdef USE_QOPENGLWINDOW
@@ -244,6 +254,14 @@ void ManagedDisplayWidget::OnInit()
if (RenderManager::instance()->backend() == RenderManager::kOpenGL) { if (RenderManager::instance()->backend() == RenderManager::kOpenGL) {
QOpenGLContext *context = QOpenGLContext *context =
static_cast<ManagedDisplayWidgetOpenGL *>(inner_widget_)->context(); static_cast<ManagedDisplayWidgetOpenGL *>(inner_widget_)->context();
#ifdef OAK_ENABLE_DYNAMIC_RENDER_BACKEND
if (auto *dynamic_renderer =
dynamic_cast<DynamicRenderer *>(attached_renderer_)) {
dynamic_renderer->InitWithOpenGLContext(context);
dynamic_renderer->PostInit();
return;
}
#endif
static_cast<OpenGLRenderer *>(attached_renderer_)->Init(context); static_cast<OpenGLRenderer *>(attached_renderer_)->Init(context);
static_cast<OpenGLRenderer *>(attached_renderer_)->PostInit(); static_cast<OpenGLRenderer *>(attached_renderer_)->PostInit();
} }
+1
View File
@@ -77,6 +77,7 @@
## 阶段 4Viewer 双后端 ## 阶段 4Viewer 双后端
- 当前 viewer display 基于 OpenGL widget 和 GL texture id。 - 当前 viewer display 基于 OpenGL widget 和 GL texture id。
- 已在 `OAK_ENABLE_DYNAMIC_RENDER_BACKEND=ON` 实验构建下让 Viewer 的 managed display 使用 `DynamicRenderer` 创建 renderer,并把现有 `QOpenGLContext` 传入动态后端;默认构建仍直接使用 `OpenGLRenderer`
- 新增 backend-neutral viewer path。 - 新增 backend-neutral viewer path。
- OpenGL 使用现有 `QOpenGLWidget/QOpenGLWindow` - OpenGL 使用现有 `QOpenGLWidget/QOpenGLWindow`
- Vulkan 使用 `QVulkanWindow` 或 Qt RHI/QRhi 显示路径。 - Vulkan 使用 `QVulkanWindow` 或 Qt RHI/QRhi 显示路径。