diff --git a/example/Vulkan/VulkanAppFramework.h b/example/Vulkan/VulkanAppFramework.h index e3934018..9e947603 100644 --- a/example/Vulkan/VulkanAppFramework.h +++ b/example/Vulkan/VulkanAppFramework.h @@ -82,9 +82,18 @@ public: device->QueuePresent(); } + virtual void Draw()=0; + bool Run() { - win->MessageProc(); - return !win->IsClose(); + if(!win->Update())return(false); + + if(win->IsVisible()) + { + AcquireNextFrame(); + Draw(); + } + + return(true); } };//class VulkanApplicationFramework diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index f7548389..8e7671ca 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -157,9 +157,8 @@ public: return(true); } - void Draw() + void Draw() override { - AcquireNextFrame(); Submit(cmd_buf[device->GetCurrentFrameIndices()]); } };//class TestApp:public VulkanApplicationFramework @@ -176,8 +175,7 @@ int main(int,char **) if(!app.Init()) return(-1); - while(app.Run()) - app.Draw(); + while(app.Run()); return 0; } diff --git a/inc/hgl/platform/Window.h b/inc/hgl/platform/Window.h index b07caa59..9201efbe 100644 --- a/inc/hgl/platform/Window.h +++ b/inc/hgl/platform/Window.h @@ -19,6 +19,11 @@ namespace hgl bool key_push[kbRangeSize]; + protected: + + virtual bool MessageProc()=0; + virtual bool WaitMessage()=0; + public: uint GetWidth()const{return width;} @@ -64,6 +69,7 @@ namespace hgl virtual void Close()=0; bool IsClose()const{return is_close;} + bool IsVisible()const{return (!is_close)&&width&&height;} virtual void SetCaption(const OSString &)=0; @@ -75,7 +81,7 @@ namespace hgl virtual void SetSystemCursor(bool){} - virtual bool MessageProc()=0; + virtual bool Update(); };//class Window Window *CreateRenderWindow(const OSString &win_name); diff --git a/src/Platform/Win/WinWindow.cpp b/src/Platform/Win/WinWindow.cpp index 2475938c..9e98121f 100644 --- a/src/Platform/Win/WinWindow.cpp +++ b/src/Platform/Win/WinWindow.cpp @@ -192,6 +192,11 @@ namespace hgl } } + bool WinWindow::WaitMessage() + { + return ::WaitMessage(); + } + Window *CreateRenderWindow(const WideString& win_name) { return(new WinWindow(win_name)); diff --git a/src/Platform/Win/WinWindow.h b/src/Platform/Win/WinWindow.h index a44656ab..05a0560d 100644 --- a/src/Platform/Win/WinWindow.h +++ b/src/Platform/Win/WinWindow.h @@ -46,5 +46,6 @@ namespace hgl void SetSystemCursor(bool visible) override; bool MessageProc() override; + bool WaitMessage() override; };//class WinWindow :public Window }//namespace win diff --git a/src/Platform/Window.cpp b/src/Platform/Window.cpp index 99a08503..ce3cf4b1 100644 --- a/src/Platform/Window.cpp +++ b/src/Platform/Window.cpp @@ -17,4 +17,16 @@ namespace hgl OnKeyUp(kb); key_push[kb]=false; } + + bool Window::Update() + { + while(MessageProc()) + { + } + + if(!active||width==0||height==0) + this->WaitMessage(); + + return(!is_close); + } }//namespace hgl