Kohi Game Engine
vulkan_backend.h
Go to the documentation of this file.
1 
14 #pragma once
15 
19 
20 struct shader;
21 struct shader_uniform;
22 struct frame_data;
23 
24 b8 vulkan_renderer_backend_initialize(renderer_plugin* backend, const renderer_backend_config* config, u8* out_window_render_target_count);
28 b8 vulkan_renderer_begin(renderer_plugin* plugin, struct frame_data* p_frame_data);
29 b8 vulkan_renderer_end(renderer_plugin* plugin, struct frame_data* p_frame_data);
30 b8 vulkan_renderer_present(renderer_plugin* backend, struct frame_data* p_frame_data);
35 
39 
43 void vulkan_renderer_texture_resize(renderer_plugin* backend, texture* t, u32 new_width, u32 new_height);
44 void vulkan_renderer_texture_write_data(renderer_plugin* backend, texture* t, u32 offset, u32 size, const u8* pixels);
45 void vulkan_renderer_texture_read_data(renderer_plugin* backend, texture* t, u32 offset, u32 size, void** out_memory);
46 void vulkan_renderer_texture_read_pixel(renderer_plugin* backend, texture* t, u32 x, u32 y, u8** out_rgba);
48 b8 vulkan_renderer_geometry_upload(renderer_plugin* backend, geometry* g, u32 vertex_offset, u32 vertex_size, u32 index_offset, u32 index_range);
49 void vulkan_renderer_geometry_vertex_update(renderer_plugin* plugin, geometry* g, u32 offset, u32 vertex_count, void* vertices);
52 
53 b8 vulkan_renderer_shader_create(renderer_plugin* backend, struct shader* shader, const shader_config* config, renderpass* pass, u8 stage_count, const char** stage_filenames, shader_stage* stages);
55 
62 b8 vulkan_renderer_shader_instance_resources_acquire(renderer_plugin* backend, struct shader* s, u32 texture_map_count, texture_map** maps, u32* out_instance_id);
64 b8 vulkan_renderer_uniform_set(renderer_plugin* backend, struct shader* frontend_shader, struct shader_uniform* uniform, const void* value);
65 
69 
70 b8 vulkan_renderpass_create(renderer_plugin* backend, const renderpass_config* config, renderpass* out_renderpass);
72 
73 b8 vulkan_renderer_render_target_create(renderer_plugin* backend, u8 attachment_count, render_target_attachment* attachments, renderpass* pass, u32 width, u32 height, render_target* out_target);
74 void vulkan_renderer_render_target_destroy(renderer_plugin* backend, render_target* target, b8 free_internal_memory);
75 
80 
82 
85 
91 void* vulkan_buffer_map_memory(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u64 size);
92 void vulkan_buffer_unmap_memory(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u64 size);
93 b8 vulkan_buffer_flush(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u64 size);
94 b8 vulkan_buffer_read(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u64 size, void** out_memory);
95 b8 vulkan_buffer_load_range(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u64 size, const void* data);
96 b8 vulkan_buffer_copy_range(renderer_plugin* backend, renderbuffer* source, u64 source_offset, renderbuffer* dest, u64 dest_offset, u64 size);
97 b8 vulkan_buffer_draw(renderer_plugin* backend, renderbuffer* buffer, u64 offset, u32 element_count, b8 bind_only);
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:25
_Bool b8
8-bit boolean type
Definition: defines.h:58
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:22
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:28
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:19
u32 renderer_config_flags
Definition: renderer_types.h:200
renderer_winding
The winding order of vertices, used to determine what is the front-face of a triangle.
Definition: renderer_types.h:211
This file contains the types for common resources the engine uses.
shader_stage
Shader stages available in the system.
Definition: resource_types.h:368
Engine-level current frame-specific data.
Definition: frame_data.h:16
Definition: renderer_types.h:15
Represents actual geometry in the world. Typically (but not always, depending on use) paired with a m...
Definition: resource_types.h:311
Definition: renderer_types.h:70
Represents a render target, which is used for rendering to a texture or set of textures.
Definition: renderer_types.h:80
Definition: renderer_types.h:172
The generic configuration for a renderer backend.
Definition: renderer_types.h:203
A generic "interface" for the renderer plugin. The renderer backend is what is responsible for making...
Definition: renderer_types.h:225
Definition: renderer_types.h:104
Represents a generic renderpass.
Definition: renderer_types.h:127
Configuration for a shader. Typically created and destroyed by the shader resource loader,...
Definition: resource_types.h:454
Represents a single entry in the internal uniform array.
Definition: shader_system.h:47
Represents a shader on the frontend.
Definition: shader_system.h:91
A structure which maps a texture, use and other properties.
Definition: resource_types.h:208
Represents a texture.
Definition: resource_types.h:165
A 4-element vector.
Definition: math_types.h:89
void vulkan_buffer_unmap_memory(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u64 size)
b8 vulkan_renderer_is_multithreaded(renderer_plugin *backend)
void vulkan_renderer_texture_map_resources_release(renderer_plugin *backend, texture_map *map)
b8 vulkan_renderer_shader_instance_resources_acquire(renderer_plugin *backend, struct shader *s, u32 texture_map_count, texture_map **maps, u32 *out_instance_id)
b8 vulkan_renderer_present(renderer_plugin *backend, struct frame_data *p_frame_data)
b8 vulkan_renderer_geometry_upload(renderer_plugin *backend, geometry *g, u32 vertex_offset, u32 vertex_size, u32 index_offset, u32 index_range)
void vulkan_renderer_texture_resize(renderer_plugin *backend, texture *t, u32 new_width, u32 new_height)
void vulkan_renderer_texture_read_pixel(renderer_plugin *backend, texture *t, u32 x, u32 y, u8 **out_rgba)
b8 vulkan_buffer_bind(renderer_plugin *backend, renderbuffer *buffer, u64 offset)
b8 vulkan_renderer_shader_bind_globals(renderer_plugin *backend, struct shader *s)
b8 vulkan_renderer_shader_bind_instance(renderer_plugin *backend, struct shader *s, u32 instance_id)
b8 vulkan_buffer_create_internal(renderer_plugin *backend, renderbuffer *buffer)
b8 vulkan_renderer_geometry_create(renderer_plugin *backend, geometry *g)
b8 vulkan_buffer_copy_range(renderer_plugin *backend, renderbuffer *source, u64 source_offset, renderbuffer *dest, u64 dest_offset, u64 size)
void vulkan_renderer_geometry_vertex_update(renderer_plugin *plugin, geometry *g, u32 offset, u32 vertex_count, void *vertices)
b8 vulkan_renderer_render_target_create(renderer_plugin *backend, u8 attachment_count, render_target_attachment *attachments, renderpass *pass, u32 width, u32 height, render_target *out_target)
u8 vulkan_renderer_window_attachment_index_get(renderer_plugin *backend)
void vulkan_buffer_destroy_internal(renderer_plugin *backend, renderbuffer *buffer)
b8 vulkan_renderer_shader_apply_instance(renderer_plugin *backend, struct shader *s, b8 needs_update)
u8 vulkan_renderer_window_attachment_count_get(renderer_plugin *backend)
b8 vulkan_renderer_texture_map_resources_acquire(renderer_plugin *backend, texture_map *map)
b8 vulkan_buffer_load_range(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u64 size, const void *data)
void vulkan_renderpass_destroy(renderer_plugin *backend, renderpass *pass)
void vulkan_renderer_render_target_destroy(renderer_plugin *backend, render_target *target, b8 free_internal_memory)
void vulkan_renderer_texture_destroy(renderer_plugin *backend, texture *texture)
texture * vulkan_renderer_window_attachment_get(renderer_plugin *backend, u8 index)
void vulkan_renderer_viewport_set(renderer_plugin *backend, vec4 rect)
void vulkan_renderer_texture_create_writeable(renderer_plugin *backend, texture *t)
b8 vulkan_renderer_shader_initialize(renderer_plugin *backend, struct shader *shader)
void vulkan_renderer_shader_destroy(renderer_plugin *backend, struct shader *shader)
void vulkan_renderer_scissor_set(renderer_plugin *backend, vec4 rect)
b8 vulkan_renderer_renderpass_begin(renderer_plugin *backend, renderpass *pass, render_target *target)
b8 vulkan_renderer_renderpass_end(renderer_plugin *backend, renderpass *pass)
void vulkan_renderer_flag_enabled_set(renderer_plugin *backend, renderer_config_flags flag, b8 enabled)
b8 vulkan_buffer_resize(renderer_plugin *backend, renderbuffer *buffer, u64 new_size)
void vulkan_renderer_backend_shutdown(renderer_plugin *backend)
void vulkan_renderer_texture_read_data(renderer_plugin *backend, texture *t, u32 offset, u32 size, void **out_memory)
void vulkan_renderer_geometry_draw(renderer_plugin *backend, geometry_render_data *data)
b8 vulkan_renderer_backend_initialize(renderer_plugin *backend, const renderer_backend_config *config, u8 *out_window_render_target_count)
void * vulkan_buffer_map_memory(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u64 size)
b8 vulkan_renderer_shader_apply_globals(renderer_plugin *backend, struct shader *s, b8 needs_update)
b8 vulkan_buffer_flush(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u64 size)
b8 vulkan_buffer_unbind(renderer_plugin *backend, renderbuffer *buffer)
b8 vulkan_renderer_frame_prepare(renderer_plugin *backend, struct frame_data *p_frame_data)
b8 vulkan_buffer_draw(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u32 element_count, b8 bind_only)
b8 vulkan_renderer_shader_instance_resources_release(renderer_plugin *backend, struct shader *s, u32 instance_id)
void vulkan_renderer_geometry_destroy(renderer_plugin *backend, geometry *g)
b8 vulkan_renderpass_create(renderer_plugin *backend, const renderpass_config *config, renderpass *out_renderpass)
b8 vulkan_renderer_end(renderer_plugin *plugin, struct frame_data *p_frame_data)
void vulkan_renderer_scissor_reset(renderer_plugin *backend)
void vulkan_renderer_backend_on_resized(renderer_plugin *backend, u16 width, u16 height)
b8 vulkan_renderer_uniform_set(renderer_plugin *backend, struct shader *frontend_shader, struct shader_uniform *uniform, const void *value)
b8 vulkan_renderer_shader_use(renderer_plugin *backend, struct shader *shader)
void vulkan_renderer_viewport_reset(renderer_plugin *backend)
texture * vulkan_renderer_depth_attachment_get(renderer_plugin *backend, u8 index)
b8 vulkan_renderer_flag_enabled_get(renderer_plugin *backend, renderer_config_flags flag)
b8 vulkan_renderer_texture_map_resources_refresh(renderer_plugin *plugin, texture_map *map)
void vulkan_renderer_winding_set(struct renderer_plugin *plugin, renderer_winding winding)
b8 vulkan_renderer_begin(renderer_plugin *plugin, struct frame_data *p_frame_data)
void vulkan_renderer_texture_write_data(renderer_plugin *backend, texture *t, u32 offset, u32 size, const u8 *pixels)
void vulkan_renderer_texture_create(renderer_plugin *backend, const u8 *pixels, texture *texture)
b8 vulkan_renderer_shader_create(renderer_plugin *backend, struct shader *shader, const shader_config *config, renderpass *pass, u8 stage_count, const char **stage_filenames, shader_stage *stages)
b8 vulkan_buffer_read(renderer_plugin *backend, renderbuffer *buffer, u64 offset, u64 size, void **out_memory)
Hosts creation and destruction methods for the renderer backend.