get stuff working on macos

This commit is contained in:
Greg Wells
2025-06-24 22:32:55 -04:00
parent cc31fd7d5c
commit f791b01705
12 changed files with 84 additions and 138 deletions

View File

@@ -1,51 +1,20 @@
set(CMAKE_EXPORT_COMPILE_COMMANDS on) set(CMAKE_EXPORT_COMPILE_COMMANDS on)
project(Gryphn) project(Gryphn)
add_compile_definitions(GN_PLATFORM_LINUX GN_WINDOW_X11 GN_REVEAL_IMPL) add_compile_definitions(GN_REVEAL_IMPL)
add_subdirectory(projects/loader) # build gryphn loader add_subdirectory(projects/loader) # build gryphn loader
add_subdirectory(projects/core/) # build gryphn core add_subdirectory(projects/core) # build gryphn core
add_subdirectory(projects/apis/vulkan/) add_subdirectory(projects/platform) # build gryphn platform
add_library(Gryphn INTERFACE) add_library(Gryphn INTERFACE)
target_link_libraries(Gryphn INTERFACE GryphnCore GryphnLoader GryphnVulkanImpl) if (UNIX AND NOT APPLE)
add_compile_definitions(GN_PLATFORM_LINUX GN_WINDOW_X11)
# set(CMAKE_EXPORT_COMPILE_COMMANDS on) add_subdirectory(projects/apis/vulkan/)
# project(Gryphn) target_link_libraries(Gryphn INTERFACE GryphnVulkanImpl)
# add_library(Gryphn STATIC "") endif()
if (APPLE)
# # build gryphn core add_compile_definitions(GN_PLATFORM_MACOS)
# add_subdirectory(src/core/) add_subdirectory(projects/apis/vulkan/)
# target_link_libraries(Gryphn GryphnCore) target_link_libraries(Gryphn INTERFACE GryphnVulkanImpl)
endif()
# # build the selected apis target_link_libraries(Gryphn INTERFACE GryphnCore GryphnLoader GryphnPlatform)
# if(WIN32)
# add_compile_definitions(GN_PLATFORM_WIN32)
# add_subdirectory(src/apis/vulkan/)
# target_link_libraries(Gryphn GryphnVulkanImpl)
# endif()
# if(APPLE)
# add_compile_definitions(GN_PLATFORM_MACOS)
# add_subdirectory(src/apis/metal/)
# add_subdirectory(src/apis/vulkan/)
# target_link_libraries(Gryphn
# "-framework IOKit"
# "-framework CoreFoundation"
# "-framework CoreGraphics"
# "-framework AppKit"
# "-framework Metal"
# "-framework QuartzCore"
# "-framework MetalKit"
# )
# target_link_libraries(Gryphn GryphnVulkanImpl GryphnMetalImpl)
# endif()
# if(UNIX AND NOT APPLE)
# add_compile_definitions(GN_PLATFORM_LINUX)
# add_compile_definitions(GN_WINDOW_X11)
# add_subdirectory(src/apis/vulkan/)
# target_link_libraries(Gryphn GryphnVulkanImpl)
# endif()

View File

@@ -1,3 +1,3 @@
#pragma once #pragma once
#include <platform/gryphn_platform_include.h> #include <platform/gryphn_platform_include.h>
#include <core/window_surface/gryphn_surface_create_functions.h> #include <window_surface/gryphn_surface_create_functions.h>

View File

@@ -21,17 +21,17 @@ gnInstanceFunctions loadVulkanInstanceFunctions(loaderInfo info) {
._gnCreateX11WindowSurface = createX11WindowSurface, ._gnCreateX11WindowSurface = createX11WindowSurface,
#endif #endif
#ifdef GN_WINDOW_WAYLAND #ifdef GN_WINDOW_WAYLAND
._gnCreateWaylandWindowSurface ._gnCreateWaylandWindowSurface,
#endif #endif
#endif #endif
#ifdef GN_PLATFORM_WIN32 #ifdef GN_PLATFORM_WIN32
._gnCreateWin32WindowSurface ._gnCreateWin32WindowSurface,
#endif #endif
#ifdef GN_PLATFORM_MACOS #ifdef GN_PLATFORM_MACOS
._gnCreateMacOSWindowSurface ._gnCreateMacOSWindowSurface = createMacOSWindowSurface,
#endif #endif
._gnDestroyWindowSurface = destroyWindowSurface, ._gnDestroyWindowSurface = destroyWindowSurface,

View File

@@ -42,6 +42,7 @@ gnReturnCode createUniformPool(gnUniformPool pool, gnDeviceHandle device) {
gnUniform* allocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInfo) { gnUniform* allocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInfo) {
gnBool fixedAllocation = !pool->device->outputDevice->enabledOversizedDescriptorPools; gnBool fixedAllocation = !pool->device->outputDevice->enabledOversizedDescriptorPools;
if (fixedAllocation) { if (fixedAllocation) {
VkGryphnUniformPool newPool = { VkGryphnUniformPool newPool = {
.pool = VK_NULL_HANDLE, .pool = VK_NULL_HANDLE,
@@ -61,8 +62,8 @@ gnUniform* allocateUniforms(gnUniformPool pool, gnUniformAllocationInfo allocInf
for (int i = 0; i < allocInfo.setCount; i++) { for (int i = 0; i < allocInfo.setCount; i++) {
for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) { for (int c = 0; c < allocInfo.sets[i].uniformBindingCount; c++) {
if (allocInfo.sets[i].uniformBindings[i].type == GN_UNIFORM_BUFFER_DESCRIPTOR) uniformBufferSize.descriptorCount++; if (allocInfo.sets[i].uniformBindings[c].type == GN_UNIFORM_BUFFER_DESCRIPTOR) uniformBufferSize.descriptorCount++;
if (allocInfo.sets[i].uniformBindings[i].type == GN_IMAGE_DESCRIPTOR) imageSize.descriptorCount++; if (allocInfo.sets[i].uniformBindings[c].type == GN_IMAGE_DESCRIPTOR) imageSize.descriptorCount++;
} }
} }

View File

@@ -14,6 +14,9 @@ VkColorSpaceKHR vkGryphnColorSpaceToVulkanColorSpace(gnColorSpace colorSpace);
gnReturnCode createX11WindowSurface(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnX11WindowSurfaceInfo createInfo); gnReturnCode createX11WindowSurface(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnX11WindowSurfaceInfo createInfo);
#endif #endif
#endif #endif
#ifdef GN_PLATFORM_MACOS
gnReturnCode createMacOSWindowSurface(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnMacOSWindowSurfaceInfo createInfo);
#endif
gnSurfaceDetails getSurfaceDetails(gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device); gnSurfaceDetails getSurfaceDetails(gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device);
void destroyWindowSurface(gnWindowSurface windowSurface); void destroyWindowSurface(gnWindowSurface windowSurface);

View File

@@ -1,6 +1,6 @@
#ifdef GN_PLATFORM_MACOS #ifdef GN_PLATFORM_MACOS
#include "vulkan_surface.h" #include "vulkan_surface.h"
#include "core/window_surface/gryphn_surface_create_functions.h" #include "window_surface/gryphn_surface_create_functions.h"
#include "../instance/vulkan_instance.h" #include "../instance/vulkan_instance.h"
#include <AppKit/AppKit.h> #include <AppKit/AppKit.h>
#include <vulkan/vulkan_metal.h> #include <vulkan/vulkan_metal.h>
@@ -11,7 +11,7 @@
#include "vulkan/vulkan_metal.h" #include "vulkan/vulkan_metal.h"
gnReturnCode gnCreateMacOSWindowSurfaceFn(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo) { gnReturnCode createMacOSWindowSurface(gnWindowSurfaceHandle windowSurface, gnInstanceHandle instance, gnMacOSWindowSurfaceInfo createInfo) {
windowSurface->windowSurface = malloc(sizeof(gnPlatformWindowSurface)); windowSurface->windowSurface = malloc(sizeof(gnPlatformWindowSurface));
VkMetalSurfaceCreateInfoEXT surfaceCreateInfo = {}; VkMetalSurfaceCreateInfoEXT surfaceCreateInfo = {};
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;

View File

@@ -4,6 +4,7 @@ add_compile_definitions(GN_REVEAL_IMPL)
file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS "src/*.c") file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS "src/*.c")
if(APPLE) if(APPLE)
add_compile_definitions(GN_PLATFORM_MACOS)
file(GLOB_RECURSE METAL_FILES CONFIGURE_DEPENDS "src/*.m") file(GLOB_RECURSE METAL_FILES CONFIGURE_DEPENDS "src/*.m")
endif() endif()
add_library(GryphnCore ${SOURCE_FILES} ${METAL_FILES}) add_library(GryphnCore ${SOURCE_FILES} ${METAL_FILES})

View File

@@ -27,7 +27,7 @@
#endif #endif
#ifdef GN_PLATFORM_MACOS #ifdef GN_PLATFORM_MACOS
gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo_t createInfo) { gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, gnMacOSWindowSurfaceInfo createInfo) {
*windowSurface = malloc(sizeof(struct gnWindowSurface_t)); *windowSurface = malloc(sizeof(struct gnWindowSurface_t));
(*windowSurface)->instance = instance; (*windowSurface)->instance = instance;
return instance->instanceFunctions._gnCreateMacOSWindowSurface(*windowSurface, instance, createInfo); return instance->instanceFunctions._gnCreateMacOSWindowSurface(*windowSurface, instance, createInfo);

View File

@@ -1,12 +1,8 @@
#pragma once #pragma once
#ifndef GN_WINDOW_X11
#define GN_WINDOW_X11
#endif
#include <platform/gryphn_platform_include.h> #include <platform/gryphn_platform_include.h>
#include <gryphn_handles.h> #include <gryphn_handles.h>
#include <utils/gryphn_error_code.h> #include <utils/gryphn_error_code.h>
#ifdef GN_PLATFORM_LINUX #ifdef GN_PLATFORM_LINUX
#ifdef GN_WINDOW_X11 #ifdef GN_WINDOW_X11
typedef struct gnX11WindowSurfaceInfo { typedef struct gnX11WindowSurfaceInfo {
@@ -41,5 +37,5 @@
CAMetalLayer* layer; CAMetalLayer* layer;
} gnMacOSWindowSurfaceInfo; } gnMacOSWindowSurfaceInfo;
gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, struct gnMacOSWindowSurfaceInfo createInfo); gnReturnCode gnCreateMacOSWindowSurface(gnWindowSurfaceHandle* windowSurface, gnInstanceHandle instance, gnMacOSWindowSurfaceInfo createInfo);
#endif #endif

View File

@@ -0,0 +1,9 @@
set(CMAKE_EXPORT_COMPILE_COMMANDS on)
project(GryphnPlatform)
if (APPLE)
file(GLOB_RECURSE APPLE_FILES CONFIGURE_DEPENDS "platform_macos/*.m")
endif()
add_library(GryphnPlatform STATIC ${APPLE_FILES})
target_include_directories(GryphnPlatform PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../utils/)
target_include_directories(GryphnPlatform PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../core/)

View File

@@ -15,8 +15,8 @@ typedef void MTKView;
// MTKView* gnCreateMTKView(NSWindow* window); // MTKView* gnCreateMTKView(NSWindow* window);
// void gnWindowSetMTKView(NSWindow* window, MTKView* view); // void gnWindowSetMTKView(NSWindow* window, MTKView* view);
CAMetalLayer* gnCreateCAMetalLayer(NSWindow* window); CAMetalLayer* gnCreateCAMetalLayer(NSWindow* window);
CAMetalLayer* gnGetCAMetalLayer(NSWindow* window); // CAMetalLayer* gnGetCAMetalLayer(NSWindow* window);
void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer); // void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer);
// CAMetalLayer* gnCreateMetalLayer(NSWindow* window); // CAMetalLayer* gnCreateMetalLayer(NSWindow* window);
// void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer); // void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer);

View File

@@ -1,8 +1,4 @@
#ifdef GN_PLATFORM_MACOS #include "src/gryphn_rendering_api.h"
#undef GN_UTILS_CPP
#include "core/gryphn_rendering_api.h"
#include "core/instance/init/gryphn_dynamic_library.h"
#include "dlfcn.h"
#include "gryphn_platform_macos.h" #include "gryphn_platform_macos.h"
#import <QuartzCore/QuartzCore.h> #import <QuartzCore/QuartzCore.h>
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@@ -19,34 +15,6 @@ gnRenderingAPI* gnGetSupportedRenderingAPIs(int* count) {
return renderingAPIs; return renderingAPIs;
} }
struct gnDynamicLibrary_t* gnLoadDynamicLibrary(const gnString path) {
struct gnDynamicLibrary_t* dll = malloc(sizeof(struct gnDynamicLibrary_t));
dll->dllPtr = dlopen(gnToCString(gnCombineStrings(path, ".dylib")), RTLD_LAZY),
dll->isValid = true;
if (dll->dllPtr == NULL) dll->isValid = false;
return dll;
}
void* gnLoadFunctionPtr(struct gnDynamicLibrary_t* dll, const char* name) {
if (dll->isValid == false) return NULL;
return dlsym(dll->dllPtr, name);
}
void gnUnloadDynamicLibrary(struct gnDynamicLibrary_t* dll) {
if (dll->isValid) dlclose(dll->dllPtr);
}
MTKView* gnCreateMTKView(NSWindow* window) {
MTKView* view = [[MTKView alloc] initWithFrame:window.frame];
[view setColorPixelFormat:MTLPixelFormatBGRA8Unorm_sRGB];
[view setPreferredFramesPerSecond:120];
CGSize rect = { window.frame.size.width * window.backingScaleFactor, window.frame.size.height * window.backingScaleFactor };
[view setClearColor:MTLClearColorMake(1.0f, 0.0f, 0.0f, 1.0f)];
[view setDrawableSize:rect];
return view;
}
void gnWindowSetMTKView(NSWindow* window, MTKView* view) {
[window setContentView:view];
}
CAMetalLayer* gnCreateCAMetalLayer(NSWindow* window) { CAMetalLayer* gnCreateCAMetalLayer(NSWindow* window) {
NSView* view = window.contentView; NSView* view = window.contentView;
@@ -58,56 +26,55 @@ CAMetalLayer* gnCreateCAMetalLayer(NSWindow* window) {
return layer; return layer;
} }
CAMetalLayer* gnGetCAMetalLayer(NSWindow* window) { // CAMetalLayer* gnGetCAMetalLayer(NSWindow* window) {
return (CAMetalLayer*)window.contentView.layer; // return (CAMetalLayer*)window.contentView.layer;
} // }
void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer) { // void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer) {
// CGSize newSize = window.contentView.bounds.size; // // CGSize newSize = window.contentView.bounds.size;
// CGFloat scale = window.contentView.window.backingScaleFactor; // // CGFloat scale = window.contentView.window.backingScaleFactor;
// layer.drawableSize = CGSizeMake(newSize.width * scale, newSize.height * scale); // // layer.drawableSize = CGSizeMake(newSize.width * scale, newSize.height * scale);
// CAMetalLayer* layer = [CAMetalLayer layer]; // // CAMetalLayer* layer = [CAMetalLayer layer];
// layer.pixelFormat = MTLPixelFormatBGRA8Unorm; // // layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
// layer.frame = window.contentView.layer.bounds; // // layer.frame = window.contentView.layer.bounds;
// window.contentView.wantsLayer = YES; // // window.contentView.wantsLayer = YES;
// window.contentView.layer = layer; // // window.contentView.layer = layer;
layer.drawableSize = CGSizeMake(window.frame.size.width, window.frame.size.height); // layer.drawableSize = CGSizeMake(window.frame.size.width, window.frame.size.height);
} // }
/* // /*
CAMetalLayer* gnCreateMetalLayer(NSWindow* window) { // CAMetalLayer* gnCreateMetalLayer(NSWindow* window) {
// CAMetalLayer* layer = [CAMetalLayer layer]; // // CAMetalLayer* layer = [CAMetalLayer layer];
// [window.contentView setWantsLayer:YES]; // // [window.contentView setWantsLayer:YES];
// [layer setContentsScale:[window backingScaleFactor]]; // // [layer setContentsScale:[window backingScaleFactor]];
// [layer setFrame:window.contentView.bounds]; // // [layer setFrame:window.contentView.bounds];
// [window.contentView setLayer:layer];
// return layer;
CAMetalLayer* layer = [CAMetalLayer layer];
// if (window.scaleFramebuffer)
// [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]];
[window.contentView layer];
[window.contentView setWantsLayer:YES];
return layer;
}
void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer) {
// [window.contentView setWantsLayer:YES];
// // [window.contentView setLayer:layer]; // // [window.contentView setLayer:layer];
// [layer setFrame:window.contentView.bounds]; // // return layer;
// [layer setContentsScale:[window backingScaleFactor]];
}
void gnMetalLayerSetBounds(CAMetalLayer* layer, NSWindow* window) { // CAMetalLayer* layer = [CAMetalLayer layer];
// CGSize size = window.contentView.bounds.size;
// CGFloat scale = window.backingScaleFactor;
// [layer setFrame:window.contentView.bounds]; // // if (window.scaleFramebuffer)
// [layer setDrawableSize:CGSizeMake(size.width * scale, size.height * scale)]; // // [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]];
// [layer setContentsScale:[window backingScaleFactor]];
} // [window.contentView layer];
*/ // [window.contentView setWantsLayer:YES];
#endif // return layer;
// }
// void gnAttachMetalLayer(NSWindow* window, CAMetalLayer* layer) {
// // [window.contentView setWantsLayer:YES];
// // // [window.contentView setLayer:layer];
// // [layer setFrame:window.contentView.bounds];
// // [layer setContentsScale:[window backingScaleFactor]];
// }
// void gnMetalLayerSetBounds(CAMetalLayer* layer, NSWindow* window) {
// // CGSize size = window.contentView.bounds.size;
// // CGFloat scale = window.backingScaleFactor;
// // [layer setFrame:window.contentView.bounds];
// // [layer setDrawableSize:CGSizeMake(size.width * scale, size.height * scale)];
// // [layer setContentsScale:[window backingScaleFactor]];
// }
// */