Получение HWND и HInstance окна SFML? - PullRequest
0 голосов
/ 24 октября 2018

Я не смог ничего найти по этому поводу.Для данного окна, созданного с помощью SFML (при условии, что конечно они были в Windows):

sf::Window window(sf::VideoMode(800, 600), "My window");

Можно ли получить фактический HWND и HInstance созданного окна?Какой-то добытчик?или, может быть, аккуратный взлом?

Что-то вроде:

window.getHWND()
window.getHInstance()

Было бы довольно идеально, но это не существует.Любые предложения приветствуются.

Обновление

Это не дубликат этого вопроса , потому что я специально спрашиваю, как получить HWND и HInstanceокна SFML.Не то, как интегрировать Vulkan с SFML.Таким образом, проблемы SFML-окна, в котором уже есть своп-цепочка, не имеют отношения к этому вопросу, а не к другому.Я просто включил контекст на случай, если кому-то будет интересно. Извините за путаницу .

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Это практически дубликат Использование Vulkan с SFML? , но задано как проблема XY.

Кажется, что OpenGL является жесткой зависимостью от SFML.Я предполагаю, что SFML немедленно вызывает SetPixelFormat и создает поверх него цепочку обмена OpenGL (то есть "контекст").

Если это так, то это делает его непригодным для использования в Vulkan.Если это работает, это будет только из-за неопределенного поведения или из-за несовместимой реализации Vulkan.

Это обсуждается в двух местах в спецификации Vulkan.

Во-первых, выпуск 2) в VK_KHR_win32_surface Приложение проходит через это полностью.В итоге говорится:

Использование объекта окна несколькими графическими API приводит к неопределенному поведению.

Во-вторых, в поведении vkCreateSwapchainKHR написано:

Если собственное окно, на которое ссылается surface, уже связано с поверхностью невулканского графического API, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR должно быть возвращено .

0 голосов
/ 24 октября 2018

То, что вы ищете, это sf::Window::getSystemHandle(), который вернет sf::WindowHandle, который зависит от платформы, а для Windows это в основном HWND.

Чтобы получить HINSTANCE, либоиспользуйте собственную WinMain() точку входа или звоните GetModuleHandle(NULL);, если вы не пишете библиотеку.

...