diff --git a/rendering_api/metal/src/core/framebuffers/metal_framebuffer.h b/rendering_api/metal/src/core/framebuffers/metal_framebuffer.h index 386ff50..3368250 100644 --- a/rendering_api/metal/src/core/framebuffers/metal_framebuffer.h +++ b/rendering_api/metal/src/core/framebuffers/metal_framebuffer.h @@ -1,5 +1,7 @@ #pragma once #include "core/framebuffer/gryphn_framebuffer.h" +#include "utils/gryphn_bool.h" +#include "utils/types/gryphn_image_format.h" #import #import diff --git a/rendering_api/metal/src/core/framebuffers/metal_framebuffer.m b/rendering_api/metal/src/core/framebuffers/metal_framebuffer.m index 8550dff..820e248 100644 --- a/rendering_api/metal/src/core/framebuffers/metal_framebuffer.m +++ b/rendering_api/metal/src/core/framebuffers/metal_framebuffer.m @@ -1,6 +1,7 @@ #include "metal_framebuffer.h" #include "core/debugger/gryphn_debugger.h" #include "core/texture/metal_texture.h" +#include "core/renderpass/gryphn_render_pass_descriptor.h" gnBool isDepthFormat(gnImageFormat format) { return gnFalse; diff --git a/src/core/framebuffer/gryphn_framebuffer.h b/src/core/framebuffer/gryphn_framebuffer.h index f91968b..455fa7b 100644 --- a/src/core/framebuffer/gryphn_framebuffer.h +++ b/src/core/framebuffer/gryphn_framebuffer.h @@ -1,9 +1,10 @@ #pragma once -#include "core/renderpass/gryphn_render_pass_descriptor.h" #include "utils/math/gryphn_vec2.h" +#include "utils/gryphn_error_code.h" +#include "core/gryphn_handles.h" typedef struct gnFramebufferInfo_t { - struct gnRenderPassDescriptor_t* renderPassDescriptor; + gnRenderPassDescriptorHandle renderPassDescriptor; uint32_t attachmentCount; gnTextureHandle* attachments; gnUInt2 size; @@ -11,8 +12,8 @@ typedef struct gnFramebufferInfo_t { typedef struct gnFramebuffer_t { struct gnPlatformFramebuffer_t* framebuffer; - struct gnOutputDevice_t* device; + gnOutputDeviceHandle device; } gnFramebuffer; -gnReturnCode gnCreateFramebuffer(struct gnFramebuffer_t* framebuffer, struct gnOutputDevice_t* device, struct gnFramebufferInfo_t framebufferInfo); +gnReturnCode gnCreateFramebuffer(struct gnFramebuffer_t* framebuffer, gnOutputDeviceHandle device, struct gnFramebufferInfo_t framebufferInfo); void gnDestroyFramebuffer(struct gnFramebuffer_t* framebuffer); diff --git a/src/core/gryphn_handles.h b/src/core/gryphn_handles.h index 4d96632..9ad17ea 100644 --- a/src/core/gryphn_handles.h +++ b/src/core/gryphn_handles.h @@ -9,3 +9,5 @@ GN_HANDLE(gnDebugger); GN_HANDLE(gnWindowSurface); GN_HANDLE(gnPresentationQueue); GN_HANDLE(gnTexture); +GN_HANDLE(gnRenderPassDescriptor); +GN_HANDLE(gnOutputDevice); diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index 2820e02..2794313 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -66,8 +66,8 @@ typedef struct gnDeviceFunctions_t { gnReturnCode (*_gnCreateShaderModule)(struct gnShaderModule_t* module, gnOutputDeviceHandle device, struct gnShaderModuleInfo_t shaderModuleInfo); void (*_gnDestroyShaderModule)(struct gnShaderModule_t* module); - gnReturnCode (*_gnCreateRenderPassDescriptor)(struct gnRenderPassDescriptor_t* renderPass, gnOutputDeviceHandle device, struct gnRenderPassDescriptorInfo_t info); - void (*_gnDestroyRenderPassDescriptor)(struct gnRenderPassDescriptor_t* renderPass); + gnReturnCode (*_gnCreateRenderPassDescriptor)(gnRenderPassDescriptorHandle renderPass, gnOutputDeviceHandle device, struct gnRenderPassDescriptorInfo_t info); + void (*_gnDestroyRenderPassDescriptor)(gnRenderPassDescriptorHandle renderPass); gnReturnCode (*_gnCreateGraphicsPipeline)(struct gnGraphicsPipeline_t* pipeline, gnOutputDeviceHandle device, struct gnGraphicsPipelineInfo_t pipelineInfo); void (*_gnDestroyGraphicsPipeline)(struct gnGraphicsPipeline_t* pipeline); diff --git a/src/core/output_device/gryphn_output_device.h b/src/core/output_device/gryphn_output_device.h index a5d1583..7490397 100644 --- a/src/core/output_device/gryphn_output_device.h +++ b/src/core/output_device/gryphn_output_device.h @@ -27,8 +27,6 @@ struct gnOutputDevice_t { gnPhysicalDevice physicalDevice; }; #endif -typedef struct gnOutputDevice_t* gnOutputDeviceHandle; -typedef gnOutputDeviceHandle gnOutputDevice; gnReturnCode gnCreateOutputDevice(gnOutputDeviceHandle* outputDevice, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo); void gnWaitForDevice(gnOutputDeviceHandle device); diff --git a/src/core/renderpass/gryphn_render_pass.h b/src/core/renderpass/gryphn_render_pass.h index 721dd3b..dc64e44 100644 --- a/src/core/renderpass/gryphn_render_pass.h +++ b/src/core/renderpass/gryphn_render_pass.h @@ -1,10 +1,9 @@ #pragma once -#include "gryphn_render_pass_descriptor.h" #include "core/framebuffer/gryphn_framebuffer.h" #include "utils/types/gryphn_color.h" typedef struct gnRenderPassInfo_t { - struct gnRenderPassDescriptor_t* renderPassDescriptor; + gnRenderPassDescriptorHandle renderPassDescriptor; struct gnFramebuffer_t* framebuffer; gnUInt2 offset; gnUInt2 size; diff --git a/src/core/renderpass/gryphn_render_pass_descriptor.c b/src/core/renderpass/gryphn_render_pass_descriptor.c index 3a73d98..89655f7 100644 --- a/src/core/renderpass/gryphn_render_pass_descriptor.c +++ b/src/core/renderpass/gryphn_render_pass_descriptor.c @@ -1,12 +1,14 @@ #include "gryphn_render_pass_descriptor.h" #include "core/gryphn_platform_functions.h" -gnReturnCode gnCreateRenderPassDescriptor(struct gnRenderPassDescriptor_t* renderPass, struct gnOutputDevice_t* device, struct gnRenderPassDescriptorInfo_t info) { - renderPass->device = device; - renderPass->info = info; - return device->deviceFunctions->_gnCreateRenderPassDescriptor(renderPass, device, info); +gnReturnCode gnCreateRenderPassDescriptor(gnRenderPassDescriptorHandle* renderPass, gnOutputDeviceHandle device, struct gnRenderPassDescriptorInfo_t info) { + *renderPass = malloc(sizeof(struct gnRenderPassDescriptor_t)); + + (*renderPass)->device = device; + (*renderPass)->info = info; + return device->deviceFunctions->_gnCreateRenderPassDescriptor(*renderPass, device, info); } -void gnDestroyRenderPassDescriptor(struct gnRenderPassDescriptor_t* renderPass) { +void gnDestroyRenderPassDescriptor(gnRenderPassDescriptorHandle renderPass) { renderPass->device->deviceFunctions->_gnDestroyRenderPassDescriptor(renderPass); } diff --git a/src/core/renderpass/gryphn_render_pass_descriptor.h b/src/core/renderpass/gryphn_render_pass_descriptor.h index fa4c435..74678a2 100644 --- a/src/core/renderpass/gryphn_render_pass_descriptor.h +++ b/src/core/renderpass/gryphn_render_pass_descriptor.h @@ -2,6 +2,7 @@ #include "utils/types/gryphn_image_format.h" #include "stdint.h" #include "core/output_device/gryphn_output_device.h" +#include "core/gryphn_handles.h" typedef enum gnRenderPassStage_e { GN_COLOR_ATTACHMENT_OUTPUT = 0x00000400 @@ -64,13 +65,13 @@ typedef struct gnRenderPassDescriptorInfo_t { struct gnSubpassDependencyInfo_t* dependencies; } gnRenderPassDescriptorInfo; -struct gnPlatformRenderPassDescriptor_t; - -typedef struct gnRenderPassDescriptor_t { +#ifdef GN_REVEAL_IMPL +struct gnRenderPassDescriptor_t { struct gnPlatformRenderPassDescriptor_t* renderPassDescriptor; struct gnRenderPassDescriptorInfo_t info; struct gnOutputDevice_t* device; -} gnRenderPassDescriptor; +}; +#endif -gnReturnCode gnCreateRenderPassDescriptor(struct gnRenderPassDescriptor_t* renderPass, struct gnOutputDevice_t* device, struct gnRenderPassDescriptorInfo_t info); -void gnDestroyRenderPassDescriptor(struct gnRenderPassDescriptor_t* renderPass); +gnReturnCode gnCreateRenderPassDescriptor(gnRenderPassDescriptorHandle* renderPass, gnOutputDeviceHandle device, struct gnRenderPassDescriptorInfo_t info); +void gnDestroyRenderPassDescriptor(gnRenderPassDescriptorHandle renderPass);