gryphn+vulkan command buffers
This commit is contained in:
@@ -15,4 +15,5 @@
|
|||||||
#include <core/textures/gryphn_texture.h>
|
#include <core/textures/gryphn_texture.h>
|
||||||
#include <core/command/command_pool/gryphn_command_pool.h>
|
#include <core/command/command_pool/gryphn_command_pool.h>
|
||||||
#include <core/command/command_buffer/gryphn_command_buffer.h>
|
#include <core/command/command_buffer/gryphn_command_buffer.h>
|
||||||
|
#include <core/command/commands/gryphn_command.h>
|
||||||
#include <core/renderpass/gryphn_render_pass.h>
|
#include <core/renderpass/gryphn_render_pass.h>
|
||||||
|
@@ -0,0 +1,41 @@
|
|||||||
|
#include "vulkan_command_buffer.h"
|
||||||
|
#include "commands/command_pool/vulkan_command_pool.h"
|
||||||
|
#include "output_device/vulkan_output_devices.h"
|
||||||
|
|
||||||
|
gnReturnCode gnCommandPoolAllocateCommandBuffersFn(struct gnCommandBuffer_t* commandBuffers, uint32_t count, struct gnCommandPool_t* pool) {
|
||||||
|
VkCommandBufferAllocateInfo allocInfo = {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
|
||||||
|
.commandPool = pool->commandPool->commandPool,
|
||||||
|
.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
|
||||||
|
.commandBufferCount = count,
|
||||||
|
};
|
||||||
|
|
||||||
|
VkCommandBuffer* buffers = malloc(sizeof(VkCommandBuffer) * count);
|
||||||
|
|
||||||
|
if (vkAllocateCommandBuffers(pool->device->outputDevice->device, &allocInfo, buffers) != VK_SUCCESS)
|
||||||
|
return GN_FAILED_TO_ALLOCATE_COMMAND_BUFFERS;
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
commandBuffers[i].commandBuffer = malloc(sizeof(gnPlatformCommandBuffer));
|
||||||
|
commandBuffers[i].commandBuffer->buffer = buffers[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return GN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
gnReturnCode gnBeginCommandBufferFn(struct gnCommandBuffer_t* commandBuffer) {
|
||||||
|
VkCommandBufferBeginInfo beginInfo = {
|
||||||
|
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
|
||||||
|
};
|
||||||
|
|
||||||
|
if (vkBeginCommandBuffer(commandBuffer->commandBuffer->buffer, &beginInfo) != VK_SUCCESS) {
|
||||||
|
return GN_FAILED_TO_BEGIN_RECORDING;
|
||||||
|
}
|
||||||
|
return GN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
gnReturnCode gnEndCommandBufferFn(struct gnCommandBuffer_t* commandBuffer) {
|
||||||
|
if (vkEndCommandBuffer(commandBuffer->commandBuffer->buffer) != VK_SUCCESS)
|
||||||
|
return GN_FAIELD_TO_END_RECORDING;
|
||||||
|
return GN_SUCCESS;
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "core/command/command_buffer/gryphn_command_buffer.h"
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
|
typedef struct gnPlatformCommandBuffer_t {
|
||||||
|
VkCommandBuffer buffer;
|
||||||
|
} gnPlatformCommandBuffer;
|
59
rendering_api/vulkan/src/commands/commands/vulkan_commands.c
Normal file
59
rendering_api/vulkan/src/commands/commands/vulkan_commands.c
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
#include "core/command/commands/gryphn_command.h"
|
||||||
|
#include <renderpass/vulkan_render_pass_descriptor.h>
|
||||||
|
#include "framebuffers/vulkan_framebuffer.h"
|
||||||
|
#include "commands/command_buffer/vulkan_command_buffer.h"
|
||||||
|
#include "pipelines/graphics_pipeline/vulkan_graphics_pipeline.h"
|
||||||
|
|
||||||
|
void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) {
|
||||||
|
VkClearValue* values = malloc(sizeof(VkClearValue) * passInfo.clearValueCount);
|
||||||
|
for (int i = 0; i < passInfo.clearValueCount; i++) {
|
||||||
|
values[i] = (VkClearValue){{{
|
||||||
|
passInfo.clearValues[i].red,
|
||||||
|
passInfo.clearValues[i].green,
|
||||||
|
passInfo.clearValues[i].blue,
|
||||||
|
passInfo.clearValues[i].alpha
|
||||||
|
}}};
|
||||||
|
}
|
||||||
|
|
||||||
|
VkRenderPassBeginInfo renderPassInfo ={
|
||||||
|
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
||||||
|
.renderPass = passInfo.renderPassDescriptor->renderPassDescriptor->renderPass,
|
||||||
|
.framebuffer = passInfo.framebuffer->framebuffer->framebuffer,
|
||||||
|
.renderArea = {
|
||||||
|
.extent = { passInfo.size.x, passInfo.size.y },
|
||||||
|
.offset = { passInfo.offset.x, passInfo.offset.x }
|
||||||
|
},
|
||||||
|
.clearValueCount = passInfo.clearValueCount,
|
||||||
|
.pClearValues = values
|
||||||
|
};
|
||||||
|
|
||||||
|
vkCmdBeginRenderPass(buffer->commandBuffer->buffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
|
||||||
|
}
|
||||||
|
void gnCommandEndRenderPassFn(struct gnCommandBuffer_t* buffer) {
|
||||||
|
vkCmdEndRenderPass(buffer->commandBuffer->buffer);
|
||||||
|
}
|
||||||
|
void gnCommandBindGraphicsPipelineFn(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline) {
|
||||||
|
vkCmdBindPipeline(buffer->commandBuffer->buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline->graphicsPipeline->graphicsPipeline);
|
||||||
|
}
|
||||||
|
void gnCommandSetViewportFn(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport) {
|
||||||
|
VkViewport vkViewport = {
|
||||||
|
.x = viewport.position.x,
|
||||||
|
.y = viewport.position.y,
|
||||||
|
.width = viewport.size.x,
|
||||||
|
.height = viewport.size.y,
|
||||||
|
.minDepth = viewport.minDepth,
|
||||||
|
.maxDepth = viewport.maxDepth
|
||||||
|
};
|
||||||
|
vkCmdSetViewport(buffer->commandBuffer->buffer, 0, 1, &vkViewport);
|
||||||
|
}
|
||||||
|
void gnCommandSetScissorFn(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) {
|
||||||
|
VkRect2D vkScissor = {
|
||||||
|
.extent = { scissor.size.x, scissor.size.y },
|
||||||
|
.offset = { scissor.position.x, scissor.position.y }
|
||||||
|
};
|
||||||
|
vkCmdSetScissor(buffer->commandBuffer->buffer, 0, 1, &vkScissor);
|
||||||
|
}
|
||||||
|
void gnCommandDrawFn(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) {
|
||||||
|
vkCmdDraw(buffer->commandBuffer->buffer, vertexCount, instanceCount, firstVertex, firstInstance);
|
||||||
|
}
|
18
src/core/command/command_buffer/gryphn_command_buffer.c
Normal file
18
src/core/command/command_buffer/gryphn_command_buffer.c
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#include "gryphn_command_buffer.h"
|
||||||
|
#include "core/gryphn_platform_functions.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
gnReturnCode gnCommandPoolAllocateCommandBuffers(struct gnCommandBuffer_t* buffers, uint32_t count, struct gnCommandPool_t* commandPool) {
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
buffers[i].commandPool = commandPool;
|
||||||
|
}
|
||||||
|
return commandPool->commandFunctions->_gnCommandPoolAllocateCommandBuffers(buffers, count, commandPool);
|
||||||
|
}
|
||||||
|
|
||||||
|
gnReturnCode gnBeginCommandBuffer(struct gnCommandBuffer_t* commandBuffer) {
|
||||||
|
return commandBuffer->commandPool->commandFunctions->_gnBeginCommandBuffer(commandBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
gnReturnCode gnEndCommandBuffer(struct gnCommandBuffer_t* commandBuffer) {
|
||||||
|
return commandBuffer->commandPool->commandFunctions->_gnEndCommandBuffer(commandBuffer);
|
||||||
|
}
|
@@ -1,10 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <core/command/command_pool/gryphn_command_pool.h>
|
#include <core/command/command_pool/gryphn_command_pool.h>
|
||||||
#include "core/renderpass/gryphn_render_pass.h"
|
|
||||||
|
|
||||||
typedef struct gnCommandBuffer_t {
|
typedef struct gnCommandBuffer_t {
|
||||||
struct gnPlatformCommandBuffer_t* commandBuffer;
|
struct gnPlatformCommandBuffer_t* commandBuffer;
|
||||||
|
struct gnCommandPool_t* commandPool;
|
||||||
} gnCommandBuffer;
|
} gnCommandBuffer;
|
||||||
|
|
||||||
|
gnReturnCode gnCommandPoolAllocateCommandBuffers(struct gnCommandBuffer_t* buffers, uint32_t count, struct gnCommandPool_t* commandPool);
|
||||||
|
|
||||||
gnReturnCode gnBeginCommandBuffer(struct gnCommandBuffer_t* commandBuffer);
|
gnReturnCode gnBeginCommandBuffer(struct gnCommandBuffer_t* commandBuffer);
|
||||||
void gnCommandBufferBeginRenderPass(struct gnRenderPassInfo_t passInfo);
|
gnReturnCode gnEndCommandBuffer(struct gnCommandBuffer_t* commandBuffer);
|
||||||
|
@@ -1,7 +1,15 @@
|
|||||||
#include "gryphn_command_pool.h"
|
#include "gryphn_command_pool.h"
|
||||||
#include "core/gryphn_platform_functions.h"
|
#include "core/gryphn_platform_functions.h"
|
||||||
|
#include "core/instance/init/gryphn_init.h"
|
||||||
|
|
||||||
gnReturnCode gnCreateCommandPool(struct gnCommandPool_t* commandPool, struct gnOutputDevice_t* device, struct gnCommandPoolInfo_t info) {
|
gnReturnCode gnCreateCommandPool(struct gnCommandPool_t* commandPool, struct gnOutputDevice_t* device, struct gnCommandPoolInfo_t info) {
|
||||||
|
if (!device->instance->loadCommandFunctions) {
|
||||||
|
device->instance->commandFunctions = malloc(sizeof(struct gnCommandFunctions_t));
|
||||||
|
gnLoadCommandFunctions(device->instance->dynamicLib, device->instance->commandFunctions);
|
||||||
|
device->instance->loadCommandFunctions = gnTrue;
|
||||||
|
}
|
||||||
|
commandPool->commandFunctions = device->instance->commandFunctions;
|
||||||
|
|
||||||
commandPool->device = device;
|
commandPool->device = device;
|
||||||
return device->deviceFunctions->_gnCreateCommandPool(commandPool, device, info);
|
return device->deviceFunctions->_gnCreateCommandPool(commandPool, device, info);
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ typedef struct gnCommandPoolInfo_t {
|
|||||||
|
|
||||||
typedef struct gnCommandPool_t {
|
typedef struct gnCommandPool_t {
|
||||||
struct gnPlatformCommandPool_t* commandPool;
|
struct gnPlatformCommandPool_t* commandPool;
|
||||||
|
struct gnCommandFunctions_t* commandFunctions;
|
||||||
struct gnOutputDevice_t* device;
|
struct gnOutputDevice_t* device;
|
||||||
} gnCommandPool;
|
} gnCommandPool;
|
||||||
|
|
||||||
|
23
src/core/command/commands/gryphn_command.c
Normal file
23
src/core/command/commands/gryphn_command.c
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#include "gryphn_command.h"
|
||||||
|
#include "core/gryphn_platform_functions.h"
|
||||||
|
|
||||||
|
void gnCommandBeginRenderPass(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandBeginRenderPass(buffer, passInfo);
|
||||||
|
}
|
||||||
|
void gnCommandEndRenderPass(struct gnCommandBuffer_t* buffer) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandEndRenderPass(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gnCommandBindGraphicsPipeline(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandBindGraphicsPipeline(buffer, graphicsPipeline);
|
||||||
|
}
|
||||||
|
void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandSetViewport(buffer, viewport);
|
||||||
|
}
|
||||||
|
void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandSetScissor(buffer, scissor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) {
|
||||||
|
buffer->commandPool->commandFunctions->_gnCommandDraw(buffer, vertexCount, firstVertex, instanceCount, firstInstance);
|
||||||
|
}
|
13
src/core/command/commands/gryphn_command.h
Normal file
13
src/core/command/commands/gryphn_command.h
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "core/command/command_buffer/gryphn_command_buffer.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "core/renderpass/gryphn_render_pass.h"
|
||||||
|
void gnCommandBeginRenderPass(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo);
|
||||||
|
void gnCommandEndRenderPass(struct gnCommandBuffer_t* buffer);
|
||||||
|
|
||||||
|
#include "core/pipelines/graphics_pipeline/gryphn_graphics_pipeline.h"
|
||||||
|
void gnCommandBindGraphicsPipeline(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline);
|
||||||
|
void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport);
|
||||||
|
void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor);
|
||||||
|
|
||||||
|
void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance);
|
@@ -53,7 +53,7 @@ typedef struct gnDebugger_t {
|
|||||||
gnReturnCode gnCreateDebugger(gnDebugger* debugger, const struct gnDebuggerInfo_t info);
|
gnReturnCode gnCreateDebugger(gnDebugger* debugger, const struct gnDebuggerInfo_t info);
|
||||||
void gnDestroyDebugger(gnDebugger* debugger);
|
void gnDestroyDebugger(gnDebugger* debugger);
|
||||||
|
|
||||||
void gnDebuggerSetErrorMessage(gnDebugger* debugger, gnMessageData data) {
|
static void gnDebuggerSetErrorMessage(gnDebugger* debugger, gnMessageData data) {
|
||||||
debugger->info.callback(
|
debugger->info.callback(
|
||||||
GN_MESSAGE_ERROR,
|
GN_MESSAGE_ERROR,
|
||||||
GN_DEBUG_MESSAGE_VALIDATION,
|
GN_DEBUG_MESSAGE_VALIDATION,
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
#include "framebuffer/gryphn_framebuffer.h"
|
#include "framebuffer/gryphn_framebuffer.h"
|
||||||
#include "command/command_pool/gryphn_command_pool.h"
|
#include "command/command_pool/gryphn_command_pool.h"
|
||||||
#include "command/command_buffer/gryphn_command_buffer.h"
|
#include "command/command_buffer/gryphn_command_buffer.h"
|
||||||
|
#include "renderpass/gryphn_render_pass.h"
|
||||||
|
|
||||||
typedef struct gnFunctions_t {
|
typedef struct gnFunctions_t {
|
||||||
gnReturnCode (*_gnCreateInstance)(gnInstance* instance, struct gnInstanceInfo_t info);
|
gnReturnCode (*_gnCreateInstance)(gnInstance* instance, struct gnInstanceInfo_t info);
|
||||||
@@ -75,4 +76,15 @@ typedef struct gnDeviceFunctions_t {
|
|||||||
|
|
||||||
typedef struct gnCommandFunctions_t {
|
typedef struct gnCommandFunctions_t {
|
||||||
gnReturnCode (*_gnCommandPoolAllocateCommandBuffers)(struct gnCommandBuffer_t* commandBuffers, uint32_t count, struct gnCommandPool_t* pool);
|
gnReturnCode (*_gnCommandPoolAllocateCommandBuffers)(struct gnCommandBuffer_t* commandBuffers, uint32_t count, struct gnCommandPool_t* pool);
|
||||||
|
gnReturnCode (*_gnBeginCommandBuffer)(struct gnCommandBuffer_t* commandBuffer);
|
||||||
|
gnReturnCode (*_gnEndCommandBuffer)(struct gnCommandBuffer_t* commandBuffer);
|
||||||
|
|
||||||
|
void (*_gnCommandBeginRenderPass)(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo);
|
||||||
|
void (*_gnCommandEndRenderPass)(struct gnCommandBuffer_t* buffer);
|
||||||
|
|
||||||
|
void (*_gnCommandBindGraphicsPipeline)(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline);
|
||||||
|
void (*_gnCommandSetViewport)(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport);
|
||||||
|
void (*_gnCommandSetScissor)(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor);
|
||||||
|
|
||||||
|
void (*_gnCommandDraw)(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance);
|
||||||
} gnCommandFunctions;
|
} gnCommandFunctions;
|
||||||
|
@@ -11,7 +11,7 @@ typedef enum gnRenderingAPI_t {
|
|||||||
GN_RENDERINGAPI_METAL
|
GN_RENDERINGAPI_METAL
|
||||||
} gnRenderingAPI;
|
} gnRenderingAPI;
|
||||||
|
|
||||||
gnString gnRenderingAPIName(gnRenderingAPI api) {
|
static gnString gnRenderingAPIName(gnRenderingAPI api) {
|
||||||
switch (api) {
|
switch (api) {
|
||||||
case GN_RENDERINGAPI_NONE: return gnCreateString("GN_RENDERINGAPI_NONE");
|
case GN_RENDERINGAPI_NONE: return gnCreateString("GN_RENDERINGAPI_NONE");
|
||||||
case GN_RENDERINGAPI_SOFTWARE: return gnCreateString("GN_RENDERINGAPI_SOFTWARE");
|
case GN_RENDERINGAPI_SOFTWARE: return gnCreateString("GN_RENDERINGAPI_SOFTWARE");
|
||||||
|
@@ -82,3 +82,13 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti
|
|||||||
gnLoadDLLFunction(lib, functions->_gnCreateCommandPool, "gnCreateCommandPoolFn");
|
gnLoadDLLFunction(lib, functions->_gnCreateCommandPool, "gnCreateCommandPoolFn");
|
||||||
gnLoadDLLFunction(lib, functions->_gnDestroyCommandPool, "gnDestroyCommandPoolFn");
|
gnLoadDLLFunction(lib, functions->_gnDestroyCommandPool, "gnDestroyCommandPoolFn");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunctions_t* functions) {
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandPoolAllocateCommandBuffers, "gnCommandPoolAllocateCommandBuffersFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnBeginCommandBuffer, "gnBeginCommandBufferFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandBeginRenderPass, "gnCommandBeginRenderPassFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandEndRenderPass, "gnCommandEndRenderPassFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn");
|
||||||
|
gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDraw");
|
||||||
|
}
|
||||||
|
@@ -8,6 +8,7 @@ gnBool gnIsAPISupported(gnRenderingAPI RenderingAPI);
|
|||||||
struct gnDynamicLibrary_t* gnLoadRenderingDLL(gnRenderingAPI RenderingAPI);
|
struct gnDynamicLibrary_t* gnLoadRenderingDLL(gnRenderingAPI RenderingAPI);
|
||||||
void gnLoadFunctions(struct gnDynamicLibrary_t* lib, struct gnFunctions_t* functions);
|
void gnLoadFunctions(struct gnDynamicLibrary_t* lib, struct gnFunctions_t* functions);
|
||||||
void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFunctions_t* functions);
|
void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFunctions_t* functions);
|
||||||
|
void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunctions_t* function);
|
||||||
|
|
||||||
// #ifdef GN_REVEAL_IMPL
|
// #ifdef GN_REVEAL_IMPL
|
||||||
// gnErrorCode gnInit(gnRenderingAPI RenderingAPI);
|
// gnErrorCode gnInit(gnRenderingAPI RenderingAPI);
|
||||||
|
@@ -1,10 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "gryphn_render_pass_descriptor.h"
|
#include "gryphn_render_pass_descriptor.h"
|
||||||
#include "core/framebuffer/gryphn_framebuffer.h"
|
#include "core/framebuffer/gryphn_framebuffer.h"
|
||||||
|
#include "utils/types/gryphn_color.h"
|
||||||
|
|
||||||
typedef struct gnRenderPassInfo_t {
|
typedef struct gnRenderPassInfo_t {
|
||||||
struct gnRenderPassDescriptor_t* renderPassDescriptor;
|
struct gnRenderPassDescriptor_t* renderPassDescriptor;
|
||||||
struct gnFramebuffer_t* framebuffer;
|
struct gnFramebuffer_t* framebuffer;
|
||||||
gnUInt2 offset;
|
gnUInt2 offset;
|
||||||
gnUInt2 size;
|
gnUInt2 size;
|
||||||
|
uint32_t clearValueCount;
|
||||||
|
gnClearValue* clearValues;
|
||||||
} gnRenderPassInfo;
|
} gnRenderPassInfo;
|
||||||
|
@@ -27,13 +27,15 @@ typedef enum gnReturnCode_t {
|
|||||||
GN_UNKNOWN_SUBPASS,
|
GN_UNKNOWN_SUBPASS,
|
||||||
GN_FAILED_TO_CREATE_FRAMEBUFFER,
|
GN_FAILED_TO_CREATE_FRAMEBUFFER,
|
||||||
GN_DIVERGENT_RENDERPASS,
|
GN_DIVERGENT_RENDERPASS,
|
||||||
GN_FAILED_TO_CREATE_COMMAND_POOL
|
GN_FAILED_TO_CREATE_COMMAND_POOL,
|
||||||
|
GN_FAILED_TO_BEGIN_RECORDING,
|
||||||
|
GN_FAIELD_TO_END_RECORDING,
|
||||||
|
GN_FAILED_TO_ALLOCATE_COMMAND_BUFFERS
|
||||||
} gnReturnCode;
|
} gnReturnCode;
|
||||||
|
|
||||||
typedef gnReturnCode gnErrorCode;
|
typedef gnReturnCode gnErrorCode;
|
||||||
const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
|
static const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
|
||||||
switch (returnCode) {
|
switch (returnCode) {
|
||||||
default: return "GN_FORGOT";
|
|
||||||
case GN_SUCCESS: return "GN_SUCCESS";
|
case GN_SUCCESS: return "GN_SUCCESS";
|
||||||
case GN_UNKNOWN_RENDERINGAPI: return "GN_UNKNOWN_RENDERINGAPI";
|
case GN_UNKNOWN_RENDERINGAPI: return "GN_UNKNOWN_RENDERINGAPI";
|
||||||
case GN_UNSUPPORTED_RENDERING_API: return "GN_UNSUPPORTED_RENDERING_API";
|
case GN_UNSUPPORTED_RENDERING_API: return "GN_UNSUPPORTED_RENDERING_API";
|
||||||
@@ -41,6 +43,7 @@ const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
|
|||||||
case GN_FAILED_CREATE_INSTANCE: return "GN_FAILED_CREATE_INSTANCE";
|
case GN_FAILED_CREATE_INSTANCE: return "GN_FAILED_CREATE_INSTANCE";
|
||||||
case GN_FAILED_TO_CREATE_DEBUGGER: return "GN_FAILED_TO_CREATE_DEBUGGER";
|
case GN_FAILED_TO_CREATE_DEBUGGER: return "GN_FAILED_TO_CREATE_DEBUGGER";
|
||||||
case GN_FAILED_TO_CREATE_DEVICE: return "GN_FAILED_TO_CREATE_DEVICE";
|
case GN_FAILED_TO_CREATE_DEVICE: return "GN_FAILED_TO_CREATE_DEVICE";
|
||||||
|
case GN_FAILED_TO_ATTACH_WINDOW: return "GN_FAILED_TO_ATTACH_WINDOW";
|
||||||
case GN_INVALID_INSTANCE: return "GN_INVALID_INSTANCE";
|
case GN_INVALID_INSTANCE: return "GN_INVALID_INSTANCE";
|
||||||
case GN_DEBUGGER_EXISTS: return "GN_DEBUGGER_EXISTS";
|
case GN_DEBUGGER_EXISTS: return "GN_DEBUGGER_EXISTS";
|
||||||
case GN_NO_SUPPORTED_FORMATS: return "GN_NO_SUPPORTED_FORMATS";
|
case GN_NO_SUPPORTED_FORMATS: return "GN_NO_SUPPORTED_FORMATS";
|
||||||
@@ -60,5 +63,8 @@ const char* gnErrorCodeToCString(enum gnReturnCode_t returnCode) {
|
|||||||
case GN_FAILED_TO_CREATE_FRAMEBUFFER: return "GN_FAILED_TO_CREATE_FRAMEBUFFER";
|
case GN_FAILED_TO_CREATE_FRAMEBUFFER: return "GN_FAILED_TO_CREATE_FRAMEBUFFER";
|
||||||
case GN_DIVERGENT_RENDERPASS: return "GN_DIVERGENT_RENDERPASS";
|
case GN_DIVERGENT_RENDERPASS: return "GN_DIVERGENT_RENDERPASS";
|
||||||
case GN_FAILED_TO_CREATE_COMMAND_POOL: return "GN_FAILED_TO_CREATE_COMMAND_POOL";
|
case GN_FAILED_TO_CREATE_COMMAND_POOL: return "GN_FAILED_TO_CREATE_COMMAND_POOL";
|
||||||
|
case GN_FAILED_TO_BEGIN_RECORDING: return "GN_FAILED_TO_BEGIN_RECORDING";
|
||||||
|
case GN_FAIELD_TO_END_RECORDING: return "GN_FAIELD_TO_END_RECORDING";
|
||||||
|
case GN_FAILED_TO_ALLOCATE_COMMAND_BUFFERS: return "GN_FAILED_TO_ALLOCATE_COMMAND_BUFFERS";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ typedef char gnChar;
|
|||||||
|
|
||||||
typedef struct gnString {
|
typedef struct gnString {
|
||||||
gnChar* value;
|
gnChar* value;
|
||||||
#ifdef __cplusplus
|
#ifdef GN_UTILS_CPP
|
||||||
gnString(const gnChar* input) {
|
gnString(const gnChar* input) {
|
||||||
this->value = new gnChar[strlen(input) + 1]; // so like my dumbass forgot to put this earlier and some shit was broken but now it fixed
|
this->value = new gnChar[strlen(input) + 1]; // so like my dumbass forgot to put this earlier and some shit was broken but now it fixed
|
||||||
// I was wondering why one specific string crashed my program, it was my fault
|
// I was wondering why one specific string crashed my program, it was my fault
|
||||||
@@ -97,7 +97,7 @@ static gnString gnCreateStringFromChar(gnChar input) {
|
|||||||
string.value[1] = '\0';
|
string.value[1] = '\0';
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
gnString gnCreateEmptyString(void) {
|
static gnString gnCreateEmptyString() {
|
||||||
gnString string;
|
gnString string;
|
||||||
string.value = (char*)malloc(sizeof(char));
|
string.value = (char*)malloc(sizeof(char));
|
||||||
string.value[0] = '\0';
|
string.value[0] = '\0';
|
||||||
@@ -110,31 +110,31 @@ gnString gnCreateEmptyString(void) {
|
|||||||
gnChar: gnCreateStringFromChar \
|
gnChar: gnCreateStringFromChar \
|
||||||
)(input)
|
)(input)
|
||||||
|
|
||||||
const char* gnToCString(const gnString string) { return string.value; }
|
static const char* gnToCString(const gnString string) { return string.value; }
|
||||||
int gnStringLength(const gnString string) { return strlen(string.value); }
|
static int gnStringLength(const gnString string) { return strlen(string.value); }
|
||||||
int gnStringFindChar(const gnString string, const gnChar letter) {
|
static int gnStringFindChar(const gnString string, const gnChar letter) {
|
||||||
for (unsigned long i = 0; i < strlen(string.value); i++)
|
for (int i = 0; i < strlen(string.value); i++)
|
||||||
if (string.value[i] == letter)
|
if (string.value[i] == letter)
|
||||||
return (int)i;
|
return i;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
int gnStringFindString(const gnString string, const gnString value) {
|
static int gnStringFindString(const gnString string, const gnString value) {
|
||||||
char first_char = value.value[0];
|
char first_char = value.value[0];
|
||||||
for (unsigned long i = 0; i < strlen(string.value); i++)
|
for (int i = 0; i < strlen(string.value); i++)
|
||||||
if (string.value[i] == first_char) {
|
if (string.value[i] == first_char) {
|
||||||
gnBool same = gnTrue;
|
gnBool same = gnTrue;
|
||||||
for (unsigned long c = 1; c < strlen(value.value); c++)
|
for (int c = 1; c < strlen(value.value); c++)
|
||||||
if (string.value[i + c] != value.value[c]) {
|
if (string.value[i + c] != value.value[c]) {
|
||||||
same = gnFalse;
|
same = gnFalse;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (same)
|
if (same)
|
||||||
return (int)i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
gnString gnSubstring(const gnString string, int index1, int index2) {
|
static gnString gnSubstring(const gnString string, int index1, int index2) {
|
||||||
if (index2 == -1) index2 = gnStringLength(string);
|
if (index2 == -1) index2 = gnStringLength(string);
|
||||||
char* out_value = (char*)malloc(sizeof(char) * ((index2 - index1) + 1));
|
char* out_value = (char*)malloc(sizeof(char) * ((index2 - index1) + 1));
|
||||||
for (int i = 0; i < (index2 - index1); i++)
|
for (int i = 0; i < (index2 - index1); i++)
|
||||||
@@ -143,7 +143,7 @@ gnString gnSubstring(const gnString string, int index1, int index2) {
|
|||||||
return gnCreateString(out_value); // zero error checking on this function should really add that in later but like I dont have a logging library that I want to use
|
return gnCreateString(out_value); // zero error checking on this function should really add that in later but like I dont have a logging library that I want to use
|
||||||
// my code never breaks either so I dont need error checks, il just not make errors cuz im not tim
|
// my code never breaks either so I dont need error checks, il just not make errors cuz im not tim
|
||||||
}
|
}
|
||||||
int gnLetterCount(const gnString string, const gnChar letter) {
|
static int gnLetterCount(const gnString string, const gnChar letter) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int i = 0; i < gnStringLength(string); i++) if (string.value[i] == letter) count++;
|
for (int i = 0; i < gnStringLength(string); i++) if (string.value[i] == letter) count++;
|
||||||
return count;
|
return count;
|
||||||
@@ -154,16 +154,16 @@ int gnLetterCount(const gnString string, const gnChar letter) {
|
|||||||
const gnString: gnStringFindValue \
|
const gnString: gnStringFindValue \
|
||||||
)(string, value)
|
)(string, value)
|
||||||
|
|
||||||
void gnAddCharToString(gnString* string, gnChar val) {
|
static void gnAddCharToString(gnString* string, gnChar val) {
|
||||||
string->value = add_char_to_string(string->value, val);
|
string->value = add_char_to_string(string->value, val);
|
||||||
}
|
}
|
||||||
void gnAddCharPtrToString(gnString* string, gnChar* val) {
|
static void gnAddCharPtrToString(gnString* string, gnChar* val) {
|
||||||
string->value = add_string_to_string(string->value, val);
|
string->value = add_string_to_string(string->value, val);
|
||||||
}
|
}
|
||||||
void gnAddConstCharPtrToString(gnString* string, const gnChar* val) {
|
static void gnAddConstCharPtrToString(gnString* string, const gnChar* val) {
|
||||||
string->value = add_string_to_string(string->value, (gnChar*)val);
|
string->value = add_string_to_string(string->value, (gnChar*)val);
|
||||||
}
|
}
|
||||||
void gnAddContGnStringToString(gnString* string, gnString val) {
|
static void gnAddContGnStringToString(gnString* string, gnString val) {
|
||||||
string->value = add_string_to_string(string->value, val.value);
|
string->value = add_string_to_string(string->value, val.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,16 +175,16 @@ void gnAddContGnStringToString(gnString* string, gnString val) {
|
|||||||
gnString: gnAddContGnStringToString \
|
gnString: gnAddContGnStringToString \
|
||||||
)(string, value)
|
)(string, value)
|
||||||
|
|
||||||
gnString gnCombineStringsChar(const gnString string, gnChar val) {
|
static gnString gnCombineStringsChar(const gnString string, gnChar val) {
|
||||||
return gnCreateString(add_char_to_string(string.value, val));
|
return gnCreateString(add_char_to_string(string.value, val));
|
||||||
}
|
}
|
||||||
gnString gnCombineStringsCharPtr(const gnString string, gnChar* val) {
|
static gnString gnCombineStringsCharPtr(const gnString string, gnChar* val) {
|
||||||
return gnCreateString(add_string_to_string(string.value, val));
|
return gnCreateString(add_string_to_string(string.value, val));
|
||||||
}
|
}
|
||||||
gnString gnCombineStringsConstCharPtr(const gnString string, const gnChar* val) {
|
static gnString gnCombineStringsConstCharPtr(const gnString string, const gnChar* val) {
|
||||||
return gnCreateString(add_string_to_string(string.value, (gnChar*)val));
|
return gnCreateString(add_string_to_string(string.value, (gnChar*)val));
|
||||||
}
|
}
|
||||||
gnString gnCombineStringsString(const gnString string, const gnString val) {
|
static gnString gnCombineStringsString(const gnString string, const gnString val) {
|
||||||
return gnCreateString(add_string_to_string(string.value, val.value));
|
return gnCreateString(add_string_to_string(string.value, val.value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,9 +196,9 @@ gnString gnCombineStringsString(const gnString string, const gnString val) {
|
|||||||
gnString: gnCombineStringsString \
|
gnString: gnCombineStringsString \
|
||||||
)(string, value)
|
)(string, value)
|
||||||
|
|
||||||
gnBool gnStringEqualsCharPtr(const gnString string, gnChar* val) { return (strcmp(string.value, val) == 0); }
|
static gnBool gnStringEqualsCharPtr(const gnString string, gnChar* val) { return (strcmp(string.value, val) == 0); }
|
||||||
gnBool gnStringEqualsConstCharPtr(const gnString string,const gnChar* val) { return (strcmp(string.value, (gnChar*)val) == 0); }
|
static gnBool gnStringEqualsConstCharPtr(const gnString string,const gnChar* val) { return (strcmp(string.value, (gnChar*)val) == 0); }
|
||||||
gnBool gnStringEqualsString(const gnString string, const gnString val) { return (strcmp(string.value, val.value) == 0); }
|
static gnBool gnStringEqualsString(const gnString string, const gnString val) { return (strcmp(string.value, val.value) == 0); }
|
||||||
|
|
||||||
#define gnStringEquals(string, value) _Generic((value), \
|
#define gnStringEquals(string, value) _Generic((value), \
|
||||||
gnChar*: gnStringEqualsCharPtr, \
|
gnChar*: gnStringEqualsCharPtr, \
|
||||||
@@ -206,25 +206,25 @@ gnBool gnStringEqualsString(const gnString string, const gnString val) { return
|
|||||||
gnString: gnStringEqualsString \
|
gnString: gnStringEqualsString \
|
||||||
)(string, value)
|
)(string, value)
|
||||||
|
|
||||||
gnChar gnGetCharAt(const gnString string, int index) { return string.value[index]; }
|
static gnChar gnGetCharAt(const gnString string, int index) { return string.value[0]; }
|
||||||
void gnSetCharAt(gnString* string, int index, gnChar letter) { string->value[index] = letter; }
|
static void gnSetCharAt(gnString* string, int index, gnChar letter) { string->value[0] = letter; }
|
||||||
|
|
||||||
void gnSetStringToChar(gnString* string, gnChar input) {
|
static void gnSetStringToChar(gnString* string, gnChar input) {
|
||||||
string->value = (gnChar*)malloc(sizeof(gnChar) * 2);
|
string->value = (gnChar*)malloc(sizeof(gnChar) * 2);
|
||||||
string->value[0] = input;
|
string->value[0] = input;
|
||||||
string->value[1] = '\0';
|
string->value[1] = '\0';
|
||||||
}
|
}
|
||||||
void gnSetStringToCharPtr(gnString* string, gnChar* input) {
|
static void gnSetStringToCharPtr(gnString* string, gnChar* input) {
|
||||||
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input) + 1));
|
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input) + 1));
|
||||||
strcpy(string->value, input);
|
strcpy(string->value, input);
|
||||||
string->value[strlen(input)] = '\0';
|
string->value[strlen(input)] = '\0';
|
||||||
}
|
}
|
||||||
void gnSetStringToConstCharPtr(gnString* string, const gnChar* input) {
|
static void gnSetStringToConstCharPtr(gnString* string, const gnChar* input) {
|
||||||
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input) + 1));
|
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input) + 1));
|
||||||
strcpy(string->value, input);
|
strcpy(string->value, input);
|
||||||
string->value[strlen(input)] = '\0';
|
string->value[strlen(input)] = '\0';
|
||||||
}
|
}
|
||||||
void gnSetStringToString(gnString* string, const gnString input) {
|
static void gnSetStringToString(gnString* string, const gnString input) {
|
||||||
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input.value) + 1));
|
string->value = (gnChar*)malloc(sizeof(gnChar) * (strlen(input.value) + 1));
|
||||||
strcpy(string->value, input.value);
|
strcpy(string->value, input.value);
|
||||||
string->value[strlen(input.value)] = '\0';
|
string->value[strlen(input.value)] = '\0';
|
||||||
|
@@ -1,3 +1,15 @@
|
|||||||
|
typedef struct gnClearValue {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
float r, g, b, a;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct {
|
||||||
|
float red, green, blue, alpha;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} gnClearValue;
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
typedef struct gnColor {
|
typedef struct gnColor {
|
||||||
union {
|
union {
|
||||||
|
Reference in New Issue
Block a user