Add static Vulkan loader.
Initial Vulkan support for Windows. Initial Vulkan support for macOS.
This commit is contained in:
@ -35,8 +35,15 @@
|
||||
|
||||
#include "core/io/marshalls.h"
|
||||
#include "core/version_generated.gen.h"
|
||||
|
||||
#if defined(OPENGL_ENABLED)
|
||||
#include "drivers/gles2/rasterizer_gles2.h"
|
||||
#include "drivers/gles3/rasterizer_gles3.h"
|
||||
#endif
|
||||
#if defined(VULKAN_ENABLED)
|
||||
#include "servers/visual/rasterizer/rasterizer_rd.h"
|
||||
#endif
|
||||
|
||||
#include "drivers/windows/dir_access_windows.h"
|
||||
#include "drivers/windows/file_access_windows.h"
|
||||
#include "drivers/windows/mutex_windows.h"
|
||||
@ -893,6 +900,9 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
preserve_window_size = false;
|
||||
set_window_size(Size2(video_mode.width, video_mode.height));
|
||||
}
|
||||
#if defined(VULKAN_ENABLED)
|
||||
context_vulkan->window_resize(0, video_mode.width, video_mode.height);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (wParam == SIZE_MAXIMIZED) {
|
||||
@ -1489,7 +1499,18 @@ Error OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
|
||||
gl_context->set_use_vsync(video_mode.use_vsync);
|
||||
set_vsync_via_compositor(video_mode.vsync_via_compositor);
|
||||
#endif
|
||||
#if defined(VULKAN_ENABLED)
|
||||
video_driver_index = VIDEO_DRIVER_VULKAN;
|
||||
|
||||
context_vulkan = memnew(VulkanContextWindows);
|
||||
context_vulkan->initialize();
|
||||
context_vulkan->window_create(hWnd, hInstance, get_video_mode().width, get_video_mode().height);
|
||||
|
||||
//temporary
|
||||
rendering_device = memnew(RenderingDeviceVulkan);
|
||||
rendering_device->initialize(context_vulkan);
|
||||
RasterizerRD::make_current();
|
||||
#endif
|
||||
visual_server = memnew(VisualServerRaster);
|
||||
if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) {
|
||||
visual_server = memnew(VisualServerWrapMT(visual_server, get_render_thread_mode() == RENDER_SEPARATE_THREAD));
|
||||
@ -1665,6 +1686,13 @@ void OS_Windows::finalize() {
|
||||
memdelete(gl_context);
|
||||
#endif
|
||||
|
||||
#if defined(VULKAN_ENABLED)
|
||||
rendering_device->finalize();
|
||||
memdelete(rendering_device);
|
||||
|
||||
memdelete(context_vulkan);
|
||||
#endif
|
||||
|
||||
if (user_proc) {
|
||||
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)user_proc);
|
||||
};
|
||||
@ -1965,6 +1993,10 @@ void OS_Windows::set_window_size(const Size2 p_size) {
|
||||
video_mode.width = w;
|
||||
video_mode.height = h;
|
||||
|
||||
#if defined(VULKAN_ENABLED)
|
||||
context_vulkan->window_resize(0, video_mode.width, video_mode.height);
|
||||
#endif
|
||||
|
||||
if (video_mode.fullscreen) {
|
||||
return;
|
||||
}
|
||||
@ -3121,18 +3153,24 @@ OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const {
|
||||
}
|
||||
|
||||
void OS_Windows::release_rendering_thread() {
|
||||
|
||||
#if defined(OPENGL_ENABLED)
|
||||
gl_context->release_current();
|
||||
#endif
|
||||
}
|
||||
|
||||
void OS_Windows::make_rendering_thread() {
|
||||
|
||||
#if defined(OPENGL_ENABLED)
|
||||
gl_context->make_current();
|
||||
#endif
|
||||
}
|
||||
|
||||
void OS_Windows::swap_buffers() {
|
||||
|
||||
#if defined(OPENGL_ENABLED)
|
||||
gl_context->swap_buffers();
|
||||
#endif
|
||||
#if defined(VULKAN_ENABLED)
|
||||
context_vulkan->swap_buffers();
|
||||
#endif
|
||||
}
|
||||
|
||||
void OS_Windows::force_process_input() {
|
||||
@ -3299,9 +3337,10 @@ String OS_Windows::get_joy_guid(int p_device) const {
|
||||
}
|
||||
|
||||
void OS_Windows::_set_use_vsync(bool p_enable) {
|
||||
|
||||
#if defined(OPENGL_ENABLED)
|
||||
if (gl_context)
|
||||
gl_context->set_use_vsync(p_enable);
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
bool OS_Windows::is_vsync_enabled() const {
|
||||
|
||||
Reference in New Issue
Block a user