diff --git a/inc/hgl/qt/QtVulkanWindow.h b/inc/hgl/qt/QtVulkanWindow.h new file mode 100644 index 0000000..1a14a47 --- /dev/null +++ b/inc/hgl/qt/QtVulkanWindow.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace hgl +{ + class QtVulkanWindow:public QWindow + { + public: + + bool event(QEvent* e) override; + + void exposeEvent(QExposeEvent*) override; + void hideEvent(QHideEvent* ev) override; + + void keyPressEvent(QKeyEvent*) override; + void keyReleaseEvent(QKeyEvent*) override; + void mouseMoveEvent(QMouseEvent*) override; + void mousePressEvent(QMouseEvent*) override; + void mouseReleaseEvent(QMouseEvent*) override; + void resizeEvent(QResizeEvent*) override; + void moveEvent(QMoveEvent*) override; + void wheelEvent(QWheelEvent*) override; + };//public QtVulkanWindow +}//namespace hgl diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 988459b..f67487d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui Widgets Svg Xml) +find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui Widgets Svg Xml VulkanSupport) SET(CMQT_INCLUDE_PATH ${CMQT_ROOT_INCLUDE_PATH}/hgl/qt) @@ -20,6 +20,12 @@ SET(CMQT_IMAGE_FILES image/SVGPixmap.cpp) SOURCE_GROUP("Image" FILES ${CMQT_IMAGE_FILES}) -add_cm_library(CMQT "CM" ${CMQT_DIALOG_FILES} ${CMQT_IMAGE_FILES}) +SET(CMQT_Vulkan_FILES ${CMQT_INCLUDE_PATH}/QtVulkanWindow.h + vulkan/QtVulkanWindow.cpp + vulkan/QtVulkanSurface.cpp) -target_link_libraries(CMQT PUBLIC Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Svg Qt5::Xml) \ No newline at end of file +SOURCE_GROUP("Vulkan" FILES ${CMQT_Vulkan_FILES}) + +add_cm_library(CMQT "CM" ${CMQT_DIALOG_FILES} ${CMQT_IMAGE_FILES} ${CMQT_Vulkan_FILES}) + +target_link_libraries(CMQT PUBLIC Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Svg Qt5::Xml Qt5::VulkanSupport) \ No newline at end of file diff --git a/src/vulkan/QtVulkanSurface.cpp b/src/vulkan/QtVulkanSurface.cpp new file mode 100644 index 0000000..e231513 --- /dev/null +++ b/src/vulkan/QtVulkanSurface.cpp @@ -0,0 +1,33 @@ +#include +#include + +namespace hgl +{ + class Window; + + namespace + { + QVulkanInstance *qt_vulkan_instance=nullptr; + } + + VkSurfaceKHR CreateVulkanSurface(VkInstance vk_inst,Window *w) + { + if(vk_inst==VK_NULL_HANDLE)return(VK_NULL_HANDLE); + if(!w)return(VK_NULL_HANDLE); + + QWindow *qwin=(QWindow *)w; + + qt_vulkan_instance=new QVulkanInstance(); + qt_vulkan_instance->setVkInstance(vk_inst); + + if(qt_vulkan_instance->create()) + { + QVulkanInstance::surfaceForWindow(qwin); + } + else + { + delete qt_vulkan_instance; + qt_vulkan_instance=nullptr; + } + } +} \ No newline at end of file diff --git a/src/vulkan/QtVulkanWindow.cpp b/src/vulkan/QtVulkanWindow.cpp new file mode 100644 index 0000000..31d7665 --- /dev/null +++ b/src/vulkan/QtVulkanWindow.cpp @@ -0,0 +1 @@ +#include \ No newline at end of file