From f741825ab70d14137e06e9499818534c1c53006a Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 29 Oct 2024 02:25:45 +0800 Subject: [PATCH] Added WindowMode.h --- inc/hgl/graph/RenderFramework.h | 11 +++++++-- inc/hgl/graph/WindowMode.h | 39 ++++++++++++++++++++++++++++++ src/SceneGraph/CMakeLists.txt | 2 ++ src/SceneGraph/RenderFramework.cpp | 13 ++++++++++ src/SceneGraph/Vulkan/VKDevice.cpp | 4 --- 5 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 inc/hgl/graph/WindowMode.h diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index caf352f2..2f2cc79e 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -56,6 +56,11 @@ class TextureManager; class SwapchainModule; +struct RenderFrameworkInitConfig +{ + +};//struct RenderFrameworkInitConfig + /** * 渲染框架 */ @@ -98,8 +103,10 @@ public: NO_COPY_NO_MOVE(RenderFramework) - RenderFramework(){} - virtual ~RenderFramework()=default; + RenderFramework(); + virtual ~RenderFramework(); + + virtual bool Init(); virtual void StartTime(); diff --git a/inc/hgl/graph/WindowMode.h b/inc/hgl/graph/WindowMode.h new file mode 100644 index 00000000..0533f053 --- /dev/null +++ b/inc/hgl/graph/WindowMode.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include + +VK_NAMESPACE_BEGIN + +enum class WindowMode +{ + /** + * 全屏模式是一种独占模式,它会占用整个屏幕,不允许其它程序显示在其上。 + * 这种模式下,程序的画面会直接输出到屏幕,不经过桌面合成器,拥有最高效能。 + * 但这种模式下,如果频率切换到其它程序,可能会导致屏幕闪烁或是设备丢失,严重会程序崩溃。 + */ + FullScreen, ///<全屏模式 + + /** + * 窗口模式 + * 调试时期最常用的模式。画面会输出到一个FBO,再经桌面管理器合成整个桌面画面再输出到屏幕。 + */ + Windowed, ///<窗口模式 + + /** + * 无边框窗口模式 + * 只不过是去掉了标题框和边框的窗口模式而己,这些东西一般经过窗口管理器或桌面管理器绘制。 + */ + Borderless, ///<无边框窗口模式 + + /** + * 为什么需要有全屏无边框模式? + * 这个模式虽然看起来是全屏的,但其实它只是一个占满屏幕的窗口而己,所以它的画面依然需要经过桌面合成器,才会输出到屏幕。 + * 这种模式对于需要频率切换到其它程序而言(比如修改器,或是需要挂机到后台的网游),拥有良好的兼容性。 + */ + FullScreenBorderless, ///<全屏无边框模式 + + ENUM_CLASS_RANGE(FullScreen,FullScreenBorderless) +};//enum class WindowMode + +VK_NAMESPACE_END diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 59850c13..e51b2cc4 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -338,6 +338,8 @@ IF(UNIX) ENDIF(UNIX) +SET(VULKAN_SURFACE_SOURCE ${VULKAN_SURFACE_SOURCE} ${SG_INCLUDE_PATH}/WindowMode.h) + SOURCE_GROUP("Vulkan\\Surface" FILES ${VULKAN_SURFACE_SOURCE}) SET(VULKAN_RENDER_SOURCE ${VK_RR_SOURCE} diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 970c4833..844faa41 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -4,6 +4,19 @@ VK_NAMESPACE_BEGIN +RenderFramework::RenderFramework() +{ + + + graph_module_manager=InitGraphModuleManager(device); + + swapchain_module=graph_module_manager->GetModule(device); +} + +RenderFramework::~RenderFramework() +{ +} + void RenderFramework::StartTime() { last_time=cur_time=GetDoubleTime(); diff --git a/src/SceneGraph/Vulkan/VKDevice.cpp b/src/SceneGraph/Vulkan/VKDevice.cpp index 0985bae7..6de9abc4 100644 --- a/src/SceneGraph/Vulkan/VKDevice.cpp +++ b/src/SceneGraph/Vulkan/VKDevice.cpp @@ -24,10 +24,6 @@ GPUDevice::GPUDevice(GPUDeviceAttribute *da) texture_queue=nullptr; texture_cmd_buf=nullptr; - graph_module_manager=InitGraphModuleManager(this); - - swapchain_module=graph_module_manager->GetModule(true); - InitRenderPassManage(); sc_rt=nullptr;