Files
gpu-renderer/gpu.h
T

70 lines
1.6 KiB
C

#ifndef GPU_H
#define GPU_H
#include "linear_alg.h"
#include "model.h"
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define MAX_FRAMES_IN_FLIGHT 4
typedef struct {
mat4_t model;
mat4_t view;
mat4_t proj;
} mvp_t;
typedef struct {
VkInstance inst;
VkSurfaceKHR surface;
VkPhysicalDevice physical_dev;
VkDevice dev;
VkQueue queue;
VkSwapchainKHR swapchain;
VkExtent2D swapchain_extent;
uint32_t swapchain_img_count;
VkImageView swapchain_img_views[MAX_FRAMES_IN_FLIGHT];
VkImage depth_img;
VkDeviceMemory depth_img_mem;
VkImageView depth_img_view;
VkFramebuffer framebuffers[MAX_FRAMES_IN_FLIGHT];
VkShaderModule vert_shader;
VkShaderModule frag_shader;
VkDescriptorSetLayout desc_set_layout;
VkDescriptorPool desc_pool;
VkDescriptorSet desc_sets[MAX_FRAMES_IN_FLIGHT];
VkBuffer mvp_buffer;
VkDeviceMemory mvp_buffer_mem;
mvp_t *mvps;
VkBuffer bone_matrix_buffer;
VkDeviceMemory bone_matrix_buffer_mem;
mat4_t *bone_matrices;
VkPipelineLayout pipeline_layout;
VkRenderPass render_pass;
VkPipeline pipeline;
VkCommandPool cmd_pool;
VkCommandBuffer cmd_buf;
VkFence in_flight;
VkSemaphore render_fin;
VkSemaphore img_avail;
VkBuffer vertex_buf;
VkDeviceMemory vertex_buf_mem;
VkBuffer index_buf;
VkDeviceMemory index_buf_mem;
size_t index_count;
size_t bone_count;
} gpu_ctx_t;
typedef struct {
const char *application_name;
GLFWwindow *window;
} gpu_config_t;
void gpu_init(gpu_ctx_t *ctx, const gpu_config_t *config, model_t model);
void gpu_cleanup(const gpu_ctx_t *ctx);
void gpu_render(
const gpu_ctx_t *ctx, const mvp_t *mvp, const mat4_t *bone_matrices);
#endif