我一直找不到任何有关此的信息。给定一个使用SFML创建的窗口(假设课程在Windows上):
sf::Window window(sf::VideoMode(800, 600), "My window");
是否可以获得所创建窗口的实际HWND和HInstance?一些吸气剂?还是整洁的骇客?
类似的东西:
window.getHWND()
window.getHInstance()
会非常理想,但确实存在。任何建议表示赞赏。
更新
这不是this question的副本,因为我特别询问如何检索SFML窗口的HWND和HInstance。不是如何将Vulkan与SFML集成。因此,已经具有交换链的SFML窗口问题与该问题无关,而与其他问题无关。我只是将上下文包括在内,以防有人怀疑。 很抱歉造成混淆。
答案 0 :(得分:2)
您要查找的是sf::Window::getSystemHandle()
,它将返回一个sf::WindowHandle
,它取决于平台,在Windows上基本上是HWND
。
要获取HINSTANCE
,请使用自己的WinMain()
入口点或致电GetModuleHandle(NULL);
,只要您不编写库即可。
答案 1 :(得分:0)
这实际上是Using Vulkan with SFML?的副本,但被询问为XY问题。
OpenGL似乎是SFML的硬依赖性。我假设,SFML立即调用SetPixelFormat
,并在其之上创建OpenGL交换链(即“上下文”)。
如果是这样,那么它就不能在Vulkan中使用。如果可行,那仅仅是因为未定义的行为,或者是因为不符合规定的Vulkan实施。
在Vulkan规范中有两个地方对此进行了讨论。
首先,VK_KHR_win32_surface
附录中的第2期)对其进行了详细介绍。总之,它说:
多个图形API使用窗口对象会导致未定义的行为。
其次是vkCreateSwapchainKHR
行为:
如果
surface
所引用的本机窗口已经与非Vulkan图形API表面相关联,则必须返回VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
。