获取 SFML window 的 HWND 和 HInstance?
Getting HWND and HInstance of SFML window?
我找不到任何相关信息。给定一个用 SFML 创建的 window(假设当然是 Windows):
sf::Window window(sf::VideoMode(800, 600), "My window");
是否可以得到创建的实际HWND和HInstancewindow?一些getter?或者也许是一个巧妙的技巧?
类似于:
window.getHWND()
window.getHInstance()
会很理想,但它不存在。任何建议表示赞赏。
更新
这不是 的副本,因为我特别询问如何检索 SFML window 的 HWND 和 HInstance。不是如何将 Vulkan 与 SFML 集成。因此,已经具有交换链的 SFML window 的问题与这个问题无关,与另一个问题无关。我只是包括了上下文以防有人想知道。 抱歉造成混淆。
您要查找的是 sf::Window::getSystemHandle()
,它将 return 变成 sf::WindowHandle
,它取决于平台并且在 Windows 上它基本上是 HWND
.
要获取您的 HINSTANCE
,请使用您自己的 WinMain()
入口点或调用 GetModuleHandle(NULL);
,只要您不是在编写库。
这实际上是 的副本,但作为 XY 问题提出。
OpenGL 似乎是 SFML 的硬依赖。我 假设 SFML 立即调用 SetPixelFormat
,并在其上创建 OpenGL 交换链(即 "context")。
如果是这样,那么它就无法在 Vulkan 中使用。如果它有效,那只是因为未定义的行为,或者因为不兼容的 Vulkan 实现。
Vulkan 规范中有两个地方对此进行了讨论。
首先,VK_KHR_win32_surface
附录中的第 2) 期彻底讨论了它。总之,它说:
Uses of a window object by multiple graphics APIs results in undefined behavior.
其次在 vkCreateSwapchainKHR
行为中它说:
If the native window referred to by surface
is already associated with a non-Vulkan graphics API surface, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
must be returned.
我找不到任何相关信息。给定一个用 SFML 创建的 window(假设当然是 Windows):
sf::Window window(sf::VideoMode(800, 600), "My window");
是否可以得到创建的实际HWND和HInstancewindow?一些getter?或者也许是一个巧妙的技巧?
类似于:
window.getHWND()
window.getHInstance()
会很理想,但它不存在。任何建议表示赞赏。
更新
这不是
您要查找的是 sf::Window::getSystemHandle()
,它将 return 变成 sf::WindowHandle
,它取决于平台并且在 Windows 上它基本上是 HWND
.
要获取您的 HINSTANCE
,请使用您自己的 WinMain()
入口点或调用 GetModuleHandle(NULL);
,只要您不是在编写库。
这实际上是
OpenGL 似乎是 SFML 的硬依赖。我 假设 SFML 立即调用 SetPixelFormat
,并在其上创建 OpenGL 交换链(即 "context")。
如果是这样,那么它就无法在 Vulkan 中使用。如果它有效,那只是因为未定义的行为,或者因为不兼容的 Vulkan 实现。
Vulkan 规范中有两个地方对此进行了讨论。
首先,VK_KHR_win32_surface
附录中的第 2) 期彻底讨论了它。总之,它说:
Uses of a window object by multiple graphics APIs results in undefined behavior.
其次在 vkCreateSwapchainKHR
行为中它说:
If the native window referred to by
surface
is already associated with a non-Vulkan graphics API surface,VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
must be returned.