Skip to content

Commit

Permalink
Compile for windows.
Browse files Browse the repository at this point in the history
  • Loading branch information
fire committed Oct 15, 2024
1 parent 9d4ff9d commit bd89f97
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 11 deletions.
2 changes: 1 addition & 1 deletion drivers/vulkan/rendering_native_surface_vulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ class RenderingNativeSurfaceVulkan : public RenderingNativeSurface {
#endif

public:
#ifdef VULKAN_ENABLED
static Ref<RenderingNativeSurfaceVulkan> create_api(GDExtensionConstPtr<const void> vulkan_surface);

#ifdef VULKAN_ENABLED
static Ref<RenderingNativeSurfaceVulkan> create(VkSurfaceKHR vulkan_surface);

VkSurfaceKHR get_vulkan_surface() const {
Expand Down
2 changes: 1 addition & 1 deletion platform/linuxbsd/wayland/display_server_wayland.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ bool DisplayServerWayland::_show_window() {
struct wl_surface *wl_surface = wayland_thread.window_get_wl_surface(wd.id);
wd.wl_egl_window = wl_egl_window_create(wl_surface, wd.rect.size.width, wd.rect.size.height);

Error err = egl_manager->window_create(MAIN_WINDOW_ID, wayland_thread.get_wl_display(), wd.wl_egl_window, wd.rect.size.width, wd.rect.size.height);
err = egl_manager->window_create(MAIN_WINDOW_ID, wayland_thread.get_wl_display(), wd.wl_egl_window, wd.rect.size.width, wd.rect.size.height);
ERR_FAIL_COND_V_MSG(err == ERR_CANT_CREATE, false, "Can't show a GLES3 window.");

window_set_vsync_mode(wd.vsync_mode, MAIN_WINDOW_ID);
Expand Down
10 changes: 6 additions & 4 deletions platform/windows/display_server_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
#include "drivers/gles3/rasterizer_gles3.h"
#endif

#include "platform/windows/rendering_native_surface_windows.h"

#include <avrt.h>
#include <dwmapi.h>
#include <propkey.h>
Expand Down Expand Up @@ -5654,8 +5656,8 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
GetClientRect(wd.hWnd, &real_client_rect);

#ifdef RD_ENABLED
Ref<RenderingNativeSurfaceWindows> windows_surface = nullptr;
#ifdef VULKAN_ENABLED || D3D12_ENABLED
Ref<RenderingNativeSurfaceWindows> windows_surface;
#if defined(VULKAN_ENABLED) || defined(D3D12_ENABLED)
if (rendering_driver == "vulkan" || rendering_driver == "d3d12") {
windows_surface = RenderingNativeSurfaceWindows::create(wd.hWnd, hInstance);
}
Expand All @@ -5679,7 +5681,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
if (rendering_context->window_create(id, windows_surface) != OK) {
ERR_PRINT(vformat("Failed to create %s window.", rendering_driver));
memdelete(rendering_context);
memdelete(windows_surface);
windows_surface.unref();
rendering_context = nullptr;
windows.erase(id);
return INVALID_WINDOW_ID;
Expand All @@ -5688,7 +5690,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
rendering_context->window_set_size(id, real_client_rect.right - real_client_rect.left, real_client_rect.bottom - real_client_rect.top);
rendering_context->window_set_vsync_mode(id, p_vsync_mode);
wd.context_created = true;
memdelete(windows_surface);
windows_surface.unref();
}
#endif

Expand Down
10 changes: 9 additions & 1 deletion platform/windows/rendering_context_driver_vulkan_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@

#include "drivers/vulkan/godot_vulkan.h"

#include "platform/windows/rendering_native_surface_windows.h"

#include "drivers/vulkan/rendering_native_surface_vulkan.h"

#include "drivers/vulkan/rendering_context_driver_vulkan.h"

#include "drivers/vulkan/rendering_native_surface_vulkan.h"

const char *RenderingContextDriverVulkanWindows::_get_platform_surface_extension() const {
return VK_KHR_WIN32_SURFACE_EXTENSION_NAME;
}
Expand Down Expand Up @@ -64,7 +72,7 @@ RenderingContextDriver::SurfaceID RenderingContextDriverVulkanWindows::surface_c
VkResult err = vkCreateWin32SurfaceKHR(instance_get(), &create_info, get_allocation_callbacks(VK_OBJECT_TYPE_SURFACE_KHR), &vk_surface);
ERR_FAIL_COND_V(err != VK_SUCCESS, SurfaceID());

Ref<RenderingNativeSurfaceVulkan> vulkan_surface = RenderingContextDriverVulkan::create(vk_surface);
Ref<RenderingNativeSurfaceVulkan> vulkan_surface = RenderingNativeSurfaceVulkan::create(vk_surface);
RenderingContextDriver::SurfaceID result = RenderingContextDriverVulkan::surface_create(vulkan_surface);
return result;
}
Expand Down
15 changes: 11 additions & 4 deletions platform/windows/rendering_native_surface_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,29 @@

#include "rendering_native_surface_windows.h"

#if defined(VULKAN_ENABLED)
#include "platform/windows/rendering_context_driver_vulkan_windows.h"
#endif
#if defined(D3D12_ENABLED)
#include "drivers/d3d12/rendering_context_driver_d3d12.h"
#endif

void RenderingNativeSurfaceWindows::_bind_methods() {
ClassDB::bind_static_method("RenderingNativeSurfaceWindows", D_METHOD("create", "hwnd", "instance"), &RenderingNativeSurfaceWindows::create_api);
}

Ref<RenderingNativeSurfaceWindows> RenderingNativeSurfaceWindows::create(GDExtensionConstPtr<const void> p_window, GDExtensionConstPtr<const void> p_instance) {
Ref<RenderingNativeSurfaceWindows> RenderingNativeSurfaceWindows::create_api(GDExtensionConstPtr<const void> p_window, GDExtensionConstPtr<const void> p_instance) {
return RenderingNativeSurfaceWindows::create((HWND)p_window.operator const void *(), (HINSTANCE)p_instance.operator const void *());
}

Ref<RenderingNativeSurfaceWindows> RenderingNativeSurfaceWindows::create(HWND p_window, HINSTANCE p_instance) {
Ref<RenderingNativeSurfaceWindows> result = memnew(RenderingNativeSurfaceWindows);
result->window(p_window);
result->instance(p_instance);
result->set_window_handle(p_window);
result->set_instance(p_instance);
return result;
}

RenderingContextDriver *RenderingNativeSurfaceWayland::create_rendering_context(const String &p_driver_name) {
RenderingContextDriver *RenderingNativeSurfaceWindows::create_rendering_context(const String &p_driver_name) {
#if defined(VULKAN_ENABLED)
if (p_driver_name == "vulkan") {
return memnew(RenderingContextDriverVulkanWindows);
Expand Down
7 changes: 7 additions & 0 deletions platform/windows/rendering_native_surface_windows.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,13 @@ class RenderingNativeSurfaceWindows : public RenderingNativeSurface {
return instance;
};

void set_window_handle(HWND p_window) {
window = p_window;
};

void set_instance(HINSTANCE p_instance) {
instance = p_instance;
};
RenderingContextDriver *create_rendering_context(const String &p_driver_name) override;

RenderingNativeSurfaceWindows();
Expand Down

0 comments on commit bd89f97

Please sign in to comment.