MythTV  master
mythpainterwindowvulkan.cpp
Go to the documentation of this file.
1 // Qt
2 #include <QLoggingCategory>
3 #include <QResizeEvent>
4 
5 // MythTV
7 #include "mythmainwindow.h"
11 
12 #define LOC QString("VulkanPaintWin: ")
13 
15  : MythPainterWindow(MainWindow),
16  m_parent(MainWindow)
17 {
18  // Create the Vulkan instance. This must outlive the Vulkan window
19  m_vulkan = new QVulkanInstance();
20  m_vulkan->setApiVersion(QVersionNumber(1, 1));
21  m_vulkan->setExtensions(QByteArrayList() << VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME <<
22  VK_EXT_DEBUG_MARKER_EXTENSION_NAME);
23  // As for OpenGL - VB_GPU enables debug output - but this also requires the
24  // validation layers to be installed
25  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
26  {
27 #ifndef Q_OS_ANDROID
28  m_vulkan->setLayers(QByteArrayList() << "VK_LAYER_LUNARG_standard_validation");
29 #else
30  m_vulkan->setLayers(QByteArrayList() << "VK_LAYER_GOOGLE_threading" << "VK_LAYER_LUNARG_parameter_validation"
31  << "VK_LAYER_LUNARG_object_tracker" << "VK_LAYER_LUNARG_core_validation"
32  << "VK_LAYER_LUNARG_image" << "VK_LAYER_LUNARG_swapchain"
33  << "VK_LAYER_GOOGLE_unique_objects");
34 #endif
35  // Add some Qt internal Vulkan logging
36  QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true"));
37  }
38 
39  if (!m_vulkan->create())
40  {
41  LOG(VB_GENERAL, LOG_ERR, LOC + QString("Failed to create Vulkan instance (%1)")
42  .arg(m_vulkan->errorCode()));
43  return;
44  }
45 
46  // Create the Vulkan renderer
47  auto* render = new MythRenderVulkan();
48  m_render = render;
49 
50  // Create the the Vulkan window
51  m_window = new MythWindowVulkan(render);
52  m_window->setVulkanInstance(m_vulkan);
53  render->SetVulkanWindow(m_window);
54  m_window->resize(this->size());
55 
56  // Wrap the window in a widget
57  m_wrapper = QWidget::createWindowContainer(m_window, this);
58  m_wrapper->show();
59 
60  m_valid = true;
61 }
62 
64 {
65  // N.B. m_render is owned by QVulkanWindow - do not delete/decref
66  delete m_window;
67  delete m_wrapper;
68  if (m_vulkan)
69  m_vulkan->destroy();
70  delete m_vulkan;
71 }
72 
74 {
75  return m_valid;
76 }
77 
79 {
80  return m_window;
81 }
82 
83 void MythPainterWindowVulkan::paintEvent(QPaintEvent* /*PaintEvent*/)
84 {
86 }
87 
88 void MythPainterWindowVulkan::resizeEvent(QResizeEvent* ResizeEvent)
89 {
90  if (m_wrapper)
91  m_wrapper->resize(ResizeEvent->size());
92  MythPainterWindow::resizeEvent(ResizeEvent);
93 }
MythPainterWindowVulkan::m_window
MythWindowVulkan * m_window
Definition: mythpainterwindowvulkan.h:30
mythwindowvulkan.h
LOC
#define LOC
Definition: mythpainterwindowvulkan.cpp:12
MythPainterWindowVulkan::paintEvent
void paintEvent(QPaintEvent *PaintEvent) override
Definition: mythpainterwindowvulkan.cpp:83
VERBOSE_LEVEL_CHECK
static bool VERBOSE_LEVEL_CHECK(uint64_t mask, LogLevel_t level)
Definition: mythlogging.h:29
MythPainterWindow
Definition: mythpainterwindow.h:34
MythPainterWindowVulkan::m_vulkan
QVulkanInstance * m_vulkan
Definition: mythpainterwindowvulkan.h:28
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
MythPainterWindowVulkan::m_wrapper
QWidget * m_wrapper
Definition: mythpainterwindowvulkan.h:29
MythPainterWindowVulkan::resizeEvent
void resizeEvent(QResizeEvent *ResizeEvent) override
Definition: mythpainterwindowvulkan.cpp:88
MythWindowVulkan
Definition: mythwindowvulkan.h:10
MythPainterWindowVulkan::~MythPainterWindowVulkan
~MythPainterWindowVulkan() override
Definition: mythpainterwindowvulkan.cpp:63
MythPainterWindowVulkan::MythPainterWindowVulkan
MythPainterWindowVulkan(MythMainWindow *MainWindow)
Definition: mythpainterwindowvulkan.cpp:14
mythlogging.h
MythPainterWindowVulkan::GetVulkanWindow
MythWindowVulkan * GetVulkanWindow(void)
Definition: mythpainterwindowvulkan.cpp:78
MythPainterWindowVulkan::IsValid
bool IsValid(void) const
Definition: mythpainterwindowvulkan.cpp:73
MythPainterWindow::m_render
MythRender * m_render
Definition: mythpainterwindow.h:58
MythPainterWindowVulkan::m_valid
bool m_valid
Definition: mythpainterwindowvulkan.h:26
MythRenderVulkan
Definition: mythrendervulkan.h:57
mythrendervulkan.h
mythmainwindow.h
MythPainterWindow::resizeEvent
void resizeEvent(QResizeEvent *) override
Definition: mythpainterwindow.cpp:175
MythMainWindow
Definition: mythmainwindow.h:28
MythMainWindow::drawScreen
void drawScreen(QPaintEvent *Event=nullptr)
Definition: mythmainwindow.cpp:376
mythpainterwindowvulkan.h
MythPainterWindowVulkan::m_parent
MythMainWindow * m_parent
Definition: mythpainterwindowvulkan.h:27