summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoredGuy <osome3717@gmail.com>2025-09-30 08:49:27 +0300
committerBoredGuy <osome3717@gmail.com>2025-09-30 08:49:27 +0300
commit5d97021d0ea00ccf2851452da8ab3cc465519c67 (patch)
tree1017939395c23f4d1afa2669677a2f1a7ceabf72
parent3394a279b34c81d411abe010a2f45ca60370a1eb (diff)
Working on initialization
-rw-r--r--include/renderwindow.h2
-rw-r--r--src/renderwindow.c29
2 files changed, 31 insertions, 0 deletions
diff --git a/include/renderwindow.h b/include/renderwindow.h
index 87d89b9..2d3ffbe 100644
--- a/include/renderwindow.h
+++ b/include/renderwindow.h
@@ -13,6 +13,8 @@ typedef struct {
WGPUDevice wgpuDevice;
WGPUSurfaceConfiguration configs;
WGPUQueue queue;
+
+ WGPUTexture screenTexture;
} RenderWindow;
RenderWindow InitRenderWindow(int width, int height, const char* title);
diff --git a/src/renderwindow.c b/src/renderwindow.c
index e9b7a80..769105b 100644
--- a/src/renderwindow.c
+++ b/src/renderwindow.c
@@ -7,6 +7,10 @@
#include <wayland-client.h>
#endif
+#if defined(SDL_PLATFORM_WINDOWS)
+#include <windows.h>
+#endif
+
RenderWindow InitRenderWindow(int width, int height, const char* title) {
RenderWindow renderWindow = {0};
SDL_Init(SDL_INIT_VIDEO);
@@ -16,8 +20,32 @@ RenderWindow InitRenderWindow(int width, int height, const char* title) {
.requiredFeatureCount = 1,
.requiredFeatures = (WGPUInstanceFeatureName[]) { WGPUInstanceFeatureName_TimedWaitAny }
});
+ SDL_assert(renderWindow.wgpuInstance);
SDL_PropertiesID windowProperties = SDL_GetWindowProperties(renderWindow.window);
+
+#if defined(SDL_PLATFORM_WINDOWS)
+ HWND hwnd =
+ (HWND)SDL_GetPointerProperty(windowProperties, SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL);
+ HINSTANCE hinstance =
+ (HINSTANCE)SDL_GetPointerProperty(windowProperties, SDL_PROP_WINDOW_WIN32_INSTANCE_POINTER, NULL);
+
+ if (hwnd && hinstance) {
+ renderWindow.wgpuSurface =
+ wgpuInstanceCreateSurface(renderWindow.wgpuInstance, &(const WGPUSurfaceDescriptor){
+ .nextInChain = (WGPUChainedStruct*)&(const WGPUSurfaceSourceWindowsHWND) {
+ .chain = (WGPUChainedStruct) {
+ .next = NULL,
+ .sType = WGPUSType_SurfaceSourceWindowsHWND
+ }
+ },
+
+ .hwnd = hwnd,
+ .hinstance = hinstance
+ });
+ }
+#endif
+
#if defined(SDL_PLATFORM_LINUX)
if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) {
Display* xdisplay =
@@ -61,6 +89,7 @@ RenderWindow InitRenderWindow(int width, int height, const char* title) {
}
}
#endif
+ SDL_assert(renderWindow.wgpuSurface);
return renderWindow;
}