[英]Getting HWND and HInstance of SFML window?
我一直無法找到任何關於此的信息。 給定一個用 SFML 創建的窗口(假設當然是在 Windows 上):
sf::Window window(sf::VideoMode(800, 600), "My window");
是否可以獲取創建窗口的實際 HWND 和 HInstance? 一些吸氣劑? 或者也許是一個巧妙的黑客?
就像是:
window.getHWND()
window.getHInstance()
將是非常理想的,但它不存在。 任何建議表示贊賞。
更新
這不是這個問題的重復,因為我特別詢問如何檢索 SFML 窗口的 HWND 和 HInstance。 不是如何將 Vulkan 與 SFML 集成。 因此,已經擁有交換鏈的 SFML 窗口的問題與這個問題無關,與另一個問題無關。 我只是包括上下文以防有人想知道。 很抱歉造成混亂。
你要找的是sf::Window::getSystemHandle()
,它將返回一個sf::WindowHandle
,它是平台相關的,在 Windows 上它基本上是HWND
。
要獲得HINSTANCE
,請使用您自己的WinMain()
入口點或調用GetModuleHandle(NULL);
只要你不寫圖書館。
這實際上是將 Vulkan 與 SFML 一起使用的副本? ,但被問為 XY 問題。
OpenGL 似乎是 SFML 的硬依賴。 我假設SFML 立即調用SetPixelFormat
,並在其上創建 OpenGL 交換鏈(即“上下文”)。
如果是這樣,那么它就無法在 Vulkan 中使用。 如果它有效,那只是因為未定義的行為,或者因為不合規的 Vulkan 實現。
Vulkan 規范中有兩個地方討論了它。
首先, VK_KHR_win32_surface
附錄中的 Issue 2) VK_KHR_win32_surface
進行了徹底的討論。 總之它說:
多個圖形 API 使用窗口對象會導致未定義的行為。
其次在vkCreateSwapchainKHR
行為中它說:
如果
surface
引用的本機窗口已與非 Vulkan 圖形 API 表面關聯,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
必須返回VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.