vulkan游戏引擎核心vulkan_types.inl实现

1.vulkan_types.inl

#pragma once

#include "defines.h"

#include "core/asserts.h"

#include "renderer/renderer_types.inl"

#include <vulkan/vulkan.h>

#define VK_CHECK(expr) \

{ \

KASSERT(expr == VK_SUCCESS); \

}

typedef struct vulkan_buffer{

u64 total_size;

VkBuffer handle;

VkBufferUsageFlagBits usage;

b8 is_locked;

VkDeviceMemory memory;

i32 memory_index;

u32 memory_property_flags;

}vulkan_buffer;

typedef struct vulkan_swapchain_support_info{

VkSurfaceCapabilitiesKHR capabilities;

u32 format_count;

VkSurfaceFormatKHR* formats;

u32 present_mode_count;

VkPresentModeKHR* present_modes;

}vulkan_swapchain_support_info;

typedef struct vulkan_device{

VkPhysicalDevice physical_device;

VkDevice logical_device;

vulkan_swapchain_support_info swapchain_support;

i32 graphics_queue_index;

i32 present_queue_index;

i32 transfer_queue_index;

VkQueue graphics_queue;

VkQueue present_queue;

VkQueue transfer_queue;

VkCommandPool graphics_command_pool;

VkPhysicalDeviceProperties properties;

VkPhysicalDeviceFeatures features;

VkPhysicalDeviceMemoryProperties memory;

VkFormat depth_format;

}vulkan_device;

typedef struct vulkan_image{

VkImage handle;

VkDeviceMemory memory;

VkImageView view;

u32 width;

u32 height;

}vulkan_image;

typedef enum vulkan_render_pass_state{

READY,

RECORDING,

IN_RENDER_PASS,

RECORDING_ENDED,

SUBMITTED,

NOT_ALLOCATED

}vulkan_render_pass_state;

typedef struct vulkan_renderpass{

VkRenderPass handle;

f32 x,y,w,h;

f32 r,g,b,a;

f32 depth;

u32 stencil;

vulkan_render_pass_state state;

}vulkan_renderpass;

typedef struct vulkan_framebuffer{

VkFramebuffer handle;

u32 attachment_count;

VkImageView* attachments;

vulkan_renderpass* renderpass;

}vulkan_framebuffer;

typedef struct vulkan_swapchain{

VkSurfaceFormatKHR image_format;

u8 max_frames_in_flight;

VkSwapchainKHR handle;

u32 image_count;

VkImage* images;

VkImageView* views;

vulkan_image depth_attachment;

//framebuffers used for on-screen rendering

vulkan_framebuffer* framebuffers;

}vulkan_swapchain;

typedef enum vulkan_command_buffer_state{

COMMAND_BUFFER_STATE_READY,

COMMAND_BUFFER_STATE_RECORDING,

COMMAND_BUFFER_STATE_IN_RENDER_PASS,

COMMAND_BUFFER_STATE_RECORDING_ENDED,

COMMAND_BUFFER_STATE_SUBMITTED,

COMMAND_BUFFER_STATE_NOT_ALLOCATED

}vulkan_command_buffer_state;

typedef struct vulkan_command_buffer{

VkCommandBuffer handle;

vulkan_command_buffer_state state;

}vulkan_command_buffer;

typedef struct vulkan_shader_stage{

VkShaderModuleCreateInfo create_info;

VkShaderModule handle;

VkPipelineShaderStageCreateInfo shader_stage_create_info;

}vulkan_shader_stage;

typedef struct vulkan_pipeline{

VkPipeline handle;

VkPipelineLayout pipeline_layout;

}vulkan_pipeline;

#define OBJECT_SHADER_STAGE_COUNT 2

typedef struct vulkan_object_shader{

vulkan_shader_stage stagesOBJECT_SHADER_STAGE_COUNT;

VkDescriptorPool global_descriptor_pool;

VkDescriptorSetLayout global_descriptor_set_layout;

VkDescriptorSet global_descriptor_sets3;

//b8 descriptor_updated3;

global_uniform_object global_ubo;

vulkan_buffer global_uniform_buffer;

vulkan_pipeline pipeline;

}vulkan_object_shader;

typedef struct vulkan_fence{

VkFence handle;

b8 is_signaled;

}vulkan_fence;

typedef struct vulkan_context{

u32 framebuffer_width;

u32 framebuffer_height;

u64 framebuffer_size_generation;

u64 framebuffer_size_last_generation;

VkInstance instance;

VkAllocationCallbacks* allocator;

VkSurfaceKHR surface;

#if defined(_DEBUG)

VkDebugUtilsMessengerEXT debug_messenger;

//PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT;

/** @brief The function pointer to set free-form debug object tag data. */

#endif

vulkan_device device;

b8 validation_enabled;

vulkan_swapchain swapchain;

vulkan_renderpass main_renderpass;

vulkan_buffer object_vertex_buffer;

vulkan_buffer object_index_buffer;

//darray

vulkan_command_buffer* graphics_command_buffers;

//darray

VkSemaphore* image_available_semaphores;

//darray

VkSemaphore* queue_complete_semaphores;

u32 in_flight_fence_count;

vulkan_fence* in_flight_fences;

//Holds pointers to fences which exist and are owned elsewhere

vulkan_fence** images_in_flight;

u32 image_index;

u32 current_frame;

b8 recreating_swapchain;

vulkan_object_shader object_shader;

u64 geometry_vertex_offset;

u64 geometry_index_offset;

i32 (*find_memory_index)(u32 type_filter,u32 property_flags);

}vulkan_context;

typedef struct vulkan_texture_data{

vulkan_image image;

VkSampler sampler;

}vulkan_texture_data;

相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny7 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹7 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
爱写代码的森7 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
阳光是sunny7 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn8 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker8 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜8 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康8 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
一点一木9 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github