qt6windows7/examples/vulkan/hellovulkanwidget/main.cpp
2023-10-29 23:33:08 +01:00

54 lines
1.7 KiB
C++

// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QApplication>
#include <QPlainTextEdit>
#include <QVulkanInstance>
#include <QLibraryInfo>
#include <QLoggingCategory>
#include <QPointer>
#include "hellovulkanwidget.h"
Q_LOGGING_CATEGORY(lcVk, "qt.vulkan")
static QPointer<QPlainTextEdit> messageLogWidget;
static QtMessageHandler oldMessageHandler = nullptr;
static void messageHandler(QtMsgType msgType, const QMessageLogContext &logContext, const QString &text)
{
if (!messageLogWidget.isNull())
messageLogWidget->appendPlainText(text);
if (oldMessageHandler)
oldMessageHandler(msgType, logContext, text);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
messageLogWidget = new QPlainTextEdit(QLatin1String(QLibraryInfo::build()) + QLatin1Char('\n'));
messageLogWidget->setReadOnly(true);
oldMessageHandler = qInstallMessageHandler(messageHandler);
QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true"));
QVulkanInstance inst;
inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
if (!inst.create())
qFatal("Failed to create Vulkan instance: %d", inst.errorCode());
VulkanWindow *vulkanWindow = new VulkanWindow;
vulkanWindow->setVulkanInstance(&inst);
MainWindow mainWindow(vulkanWindow, messageLogWidget.data());
QObject::connect(vulkanWindow, &VulkanWindow::vulkanInfoReceived, &mainWindow, &MainWindow::onVulkanInfoReceived);
QObject::connect(vulkanWindow, &VulkanWindow::frameQueued, &mainWindow, &MainWindow::onFrameQueued);
mainWindow.resize(1024, 768);
mainWindow.show();
return app.exec();
}