diff --git a/projects/apis/vulkan/CMakeLists.txt b/projects/apis/vulkan/CMakeLists.txt index b16847d..5340e02 100644 --- a/projects/apis/vulkan/CMakeLists.txt +++ b/projects/apis/vulkan/CMakeLists.txt @@ -3,12 +3,13 @@ project(GryphnVulkanImpl) add_compile_definitions(GN_REVEAL_IMPL) file(GLOB_RECURSE SOURCE_FILES CONFIGURE_DEPENDS "src/*.c" "src/*.h") +file(GLOB_RECURSE LOADER_FILES CONFIGURE_DEPENDS "loader/*.c" "loader/*.h") if (APPLE) file(GLOB_RECURSE METAL_FILES CONFIGURE_DEPENDS "src/*.m") endif() find_package(Vulkan REQUIRED) -add_library(GryphnVulkanImpl STATIC ${SOURCE_FILES} ${METAL_FILES}) +add_library(GryphnVulkanImpl STATIC ${SOURCE_FILES} ${METAL_FILES} ${LOADER_FILES}) target_link_libraries(GryphnVulkanImpl ${Vulkan_LIBRARY}) target_include_directories(GryphnVulkanImpl PUBLIC diff --git a/projects/apis/vulkan/loader/vulkan_instance_loader.c b/projects/apis/vulkan/loader/vulkan_instance_loader.c new file mode 100644 index 0000000..be01998 --- /dev/null +++ b/projects/apis/vulkan/loader/vulkan_instance_loader.c @@ -0,0 +1,8 @@ +#include "vulkan_loader.h" +#include "instance/vulkan_instance.h" + +gnInstanceFunctions loadVulkanFunctions(gnRenderingAPI api) { + return (gnInstanceFunctions){ + ._gnCreateInstance = createInstance + }; +} diff --git a/projects/apis/vulkan/loader/vulkan_loader.h b/projects/apis/vulkan/loader/vulkan_loader.h new file mode 100644 index 0000000..7246c4c --- /dev/null +++ b/projects/apis/vulkan/loader/vulkan_loader.h @@ -0,0 +1,5 @@ +#pragma once +#include "loader/src/gryphn_instance_functions.h" +#include "core/src/gryphn_rendering_api.h" + +gnInstanceFunctions loadVulkanFunctions(gnRenderingAPI api); diff --git a/projects/apis/vulkan/src/instance/vulkan_instance.c b/projects/apis/vulkan/src/instance/vulkan_instance.c index b23b005..ea7cf5c 100644 --- a/projects/apis/vulkan/src/instance/vulkan_instance.c +++ b/projects/apis/vulkan/src/instance/vulkan_instance.c @@ -41,9 +41,8 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( return VK_TRUE; } -gnReturnCode gnCreateInstanceFn(gnInstanceHandle instance, gnInstanceInfo instanceInfo) { +gnReturnCode createInstance(gnInstanceHandle instance, gnInstanceInfo instanceInfo) { instance->instance = malloc(sizeof(gnPlatformInstance)); - instance->instance->instanceMessageCount = 0; #ifdef GN_PLATFORM_LINUX gnBool isX11 = gnTrue; diff --git a/projects/apis/vulkan/src/instance/vulkan_instance.h b/projects/apis/vulkan/src/instance/vulkan_instance.h index af38743..c577e4c 100644 --- a/projects/apis/vulkan/src/instance/vulkan_instance.h +++ b/projects/apis/vulkan/src/instance/vulkan_instance.h @@ -1,18 +1,10 @@ #pragma once #include -#include "debugger/gryphn_debugger.h" #include "instance/gryphn_instance.h" -struct gnInstanceMessage { - gnMessageSeverity severity; - gnMessageType type; - gnMessageData data; -}; - typedef struct gnPlatformInstance_t { VkInstance vk_instance; VkApplicationInfo appInfo; - - uint16_t instanceMessageCount; - struct gnInstanceMessage* instanceMessages; } gnPlatformInstance; + +gnReturnCode createInstance(gnInstanceHandle instance, gnInstanceInfo instanceInfo); diff --git a/projects/core/src/instance/gryphn_instance.c b/projects/core/src/instance/gryphn_instance.c index 076fa1c..39716c7 100644 --- a/projects/core/src/instance/gryphn_instance.c +++ b/projects/core/src/instance/gryphn_instance.c @@ -7,14 +7,7 @@ gnReturnCode gnCreateInstance(gnInstanceHandle* instance, gnInstanceInfo info) { *instance = malloc(sizeof(struct gnInstance_t)); (*instance)->instanceFunctions = loadInstanceFunctions(info.renderingAPI); - - // instance->dynamicLib = gnLoadRenderingDLL(info.renderingAPI); - // if (instance->dynamicLib == NULL) return GN_UNABLE_TO_LOAD_DYNAMIC_LIBARRY; - // instance->functions = gnLoadFunctions(instance); - - // if (info.debugger) - // instance->debugger = info.debugger; - + (*instance)->debugger = info.debugger; return (*instance)->instanceFunctions._gnCreateInstance((*instance), info); } diff --git a/projects/loader/src/gryphn_loader.c b/projects/loader/src/gryphn_loader.c index 566b492..a00c1d3 100644 --- a/projects/loader/src/gryphn_loader.c +++ b/projects/loader/src/gryphn_loader.c @@ -1,7 +1,9 @@ #include "gryphn_loader.h" -#include "stdio.h" +#include gnInstanceFunctions loadInstanceFunctions(gnRenderingAPI api) { - printf("Loading instance functions"); - return (gnInstanceFunctions){ NULL }; + switch (api) { + case GN_RENDERINGAPI_NONE: return (gnInstanceFunctions){ NULL }; + case GN_RENDERINGAPI_VULKAN: return loadVulkanFunctions(api); + } }