surface details function
This commit is contained in:
@@ -20,4 +20,4 @@ target_include_directories(GryphnOpenGLImpl PUBLIC
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../include/
|
${CMAKE_CURRENT_SOURCE_DIR}/../../../include/
|
||||||
)
|
)
|
||||||
add_compile_definitions(GN_REVEAL_IMPL)
|
add_compile_definitions(GN_REVEAL_IMPL)
|
||||||
target_link_libraries(GryphnOpenGLImpl GL)
|
target_link_libraries(GryphnOpenGLImpl GL "X11")
|
||||||
|
@@ -16,8 +16,7 @@ gnInstanceFunctions loadOpenGLInstanceFunctions() {
|
|||||||
._gnCreateX11WindowSurface = createGLXContext,
|
._gnCreateX11WindowSurface = createGLXContext,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// ._gnCreateMacOSWindowSurface = createMetalSurface,
|
|
||||||
// ._gnDestroyWindowSurface = destroyMetalWindowSurface,
|
// ._gnDestroyWindowSurface = destroyMetalWindowSurface,
|
||||||
// ._gnGetSurfaceDetails = getMetalSurfaceDetails
|
._gnGetSurfaceDetails = genOpenGLSurfaceDetails
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,17 @@ gnReturnCode createGLXContext(gnWindowSurfaceHandle windowSurface, gnInstanceHan
|
|||||||
windowSurface->windowSurface->context = glXCreateContext(createInfo.display, vi, NULL, GL_TRUE);
|
windowSurface->windowSurface->context = glXCreateContext(createInfo.display, vi, NULL, GL_TRUE);
|
||||||
if (glXMakeCurrent(createInfo.display, createInfo.window, windowSurface->windowSurface->context) == GL_FALSE)
|
if (glXMakeCurrent(createInfo.display, createInfo.window, windowSurface->windowSurface->context) == GL_FALSE)
|
||||||
return GN_FAILED_TO_ATTACH_WINDOW;
|
return GN_FAILED_TO_ATTACH_WINDOW;
|
||||||
|
windowSurface->windowSurface->window = createInfo.window;
|
||||||
|
windowSurface->windowSurface->display = createInfo.display;
|
||||||
return GN_SUCCESS;
|
return GN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gnUInt2 getWindowSize(gnPlatformWindowSurface* surface) {
|
||||||
|
XWindowAttributes attr;
|
||||||
|
XGetWindowAttributes(surface->display, surface->window, &attr);
|
||||||
|
return (gnUInt2){ attr.width, attr.height };
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GN_WINFDOW_WAYLAND
|
#ifdef GN_WINFDOW_WAYLAND
|
||||||
@@ -26,3 +35,26 @@ gnReturnCode gnCreateWaylandWindowSurface(gnWindowSurfaceHandle windowSurface, g
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gnSurfaceDetails genOpenGLSurfaceDetails(
|
||||||
|
gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device
|
||||||
|
) {
|
||||||
|
gnSurfaceDetails surfaceDetails;
|
||||||
|
surfaceDetails.formatCount = 1;
|
||||||
|
surfaceDetails.formats = (gnSurfaceFormat[]){
|
||||||
|
(gnSurfaceFormat){
|
||||||
|
.format = GN_FORMAT_RGBA8_SRGB,
|
||||||
|
.colorSpace = GN_COLOR_SPACE_SRGB_NONLINEAR
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
surfaceDetails.minImageCount = 2;
|
||||||
|
surfaceDetails.maxImageCount = 3;
|
||||||
|
|
||||||
|
gnUInt2 windowSize = getWindowSize(windowSurface->windowSurface);
|
||||||
|
surfaceDetails.minImageSize = windowSize;
|
||||||
|
surfaceDetails.maxImageSize = windowSize;
|
||||||
|
surfaceDetails.currentSize = windowSize;
|
||||||
|
|
||||||
|
return surfaceDetails;
|
||||||
|
}
|
||||||
|
@@ -6,8 +6,13 @@
|
|||||||
#ifdef GN_WINDOW_X11
|
#ifdef GN_WINDOW_X11
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
typedef struct gnPlatformWindowSurface_t {
|
typedef struct gnPlatformWindowSurface_t {
|
||||||
|
Window window;
|
||||||
|
Display* display;
|
||||||
GLXContext context;
|
GLXContext context;
|
||||||
} gnPlatformWindowSurface;
|
} gnPlatformWindowSurface;
|
||||||
gnReturnCode createGLXContext(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnX11WindowSurfaceInfo createInfo);
|
gnReturnCode createGLXContext(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnX11WindowSurfaceInfo createInfo);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gnUInt2 getWindowSize(gnPlatformWindowSurface* surface);
|
||||||
|
gnSurfaceDetails genOpenGLSurfaceDetails(gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device);
|
||||||
|
Reference in New Issue
Block a user