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 m_vulkan(new QVulkanInstance())
18{
19 // Create the Vulkan instance. This must outlive the Vulkan window
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
83void MythPainterWindowVulkan::paintEvent(QPaintEvent* /*PaintEvent*/)
84{
86}
87
88void MythPainterWindowVulkan::resizeEvent(QResizeEvent* ResizeEvent)
89{
90 if (m_wrapper)
91 m_wrapper->resize(ResizeEvent->size());
93}
void drawScreen(QPaintEvent *Event=nullptr)
MythWindowVulkan * GetVulkanWindow(void)
void resizeEvent(QResizeEvent *ResizeEvent) override
void paintEvent(QPaintEvent *PaintEvent) override
MythPainterWindowVulkan(MythMainWindow *MainWindow)
void resizeEvent(QResizeEvent *) override
MythRender * m_render
static bool VERBOSE_LEVEL_CHECK(uint64_t mask, LogLevel_t level)
Definition: mythlogging.h:29
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
#define LOC