MythTV
master
mythtv
libs
libmythui
vulkan
mythpainterwindowvulkan.cpp
Go to the documentation of this file.
1
// Qt
2
#include <QLoggingCategory>
3
#include <QResizeEvent>
4
5
// MythTV
6
#include "
libmythbase/mythlogging.h
"
7
#include "
mythmainwindow.h
"
8
#include "
vulkan/mythrendervulkan.h
"
9
#include "
vulkan/mythwindowvulkan.h
"
10
#include "
vulkan/mythpainterwindowvulkan.h
"
11
12
#define LOC QString("VulkanPaintWin: ")
13
14
MythPainterWindowVulkan::MythPainterWindowVulkan
(
MythMainWindow
*MainWindow)
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
63
MythPainterWindowVulkan::~MythPainterWindowVulkan
()
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
73
bool
MythPainterWindowVulkan::IsValid
(
void
)
const
74
{
75
return
m_valid
;
76
}
77
78
MythWindowVulkan
*
MythPainterWindowVulkan::GetVulkanWindow
(
void
)
79
{
80
return
m_window
;
81
}
82
83
void
MythPainterWindowVulkan::paintEvent
(QPaintEvent*
/*PaintEvent*/
)
84
{
85
m_parent
->
drawScreen
();
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:177
MythMainWindow
Definition:
mythmainwindow.h:28
MythMainWindow::drawScreen
void drawScreen(QPaintEvent *Event=nullptr)
Definition:
mythmainwindow.cpp:375
mythpainterwindowvulkan.h
MythPainterWindowVulkan::m_parent
MythMainWindow * m_parent
Definition:
mythpainterwindowvulkan.h:27
Generated on Wed Feb 26 2025 03:18:03 for MythTV by
1.8.17