1.renderer_frontend.h
#pragma once
#include "renderer_types.inl"
struct static_mesh_data;
struct platform_state;
b8 renderer_initialize(const char* application_name,struct platform_state* plat_state);
void renderer_shutdown();
void renderer_on_resized(u16 width,u16 height);
b8 renderer_draw_frame(render_packet* packet);
KAPI void renderer_set_view(mat4 view);
void (*create_texture)(
const char* name,
b8 auto_release,
i32 width,
i32 height,
i32 channel_count,
const u8* pixels,
b8 has_transparency,
struct texture* out_texture
);
void (*destroy_texture)(struct texture* texture);
2.renderer_frontend.c
#include "renderer_frontend.h"
#include "renderer_backend.h"
#include "core/logger.h"
#include "core/kmemory.h"
#include "math/kmath.h"
typedef struct renderer_system_state
{
renderer_backend backend;
mat4 projection;
mat4 view;
f32 near_clip;
f32 far_clip;
}renderer_system_state;
static renderer_backend* backend = 0;
b8 renderer_initialize(const char* application_name, struct platform_state* plat_state)
{
backend = kallocate(sizeof(renderer_backend),MEMORY_TAG_RENDERER);
//MAKE THIS CONFIGURATION
renderer_backend_create(RENDERER_BACKEND_TYPE_VULKAN,plat_state,backend);
backend->frame_number = 0;
if(!backend->initialize(backend,application_name,plat_state))
{
KFATAL("Renderer backend failed to initialize.Shutting down.");
return false;
}
f32 near_clip = 0.1f;
f32 far_clip = 1000.0f;
return true;
}
void renderer_shutdown()
{
backend->shutdown(backend);
kfree(backend,sizeof(renderer_backend),MEMORY_TAG_RENDERER);
}
b8 renderer_begin_frame(f32 delta_time){
return backend->begin_frame(backend,delta_time);
}
b8 renderer_end_frame(f32 delta_time)
{
b8 result = backend->end_frame(backend,delta_time);
backend->frame_number++;
return result;
}
void renderer_on_resized(u16 width,u16 height)
{
if(backend)
{
backend->resized(backend,width,height);
}else
{
KWARN("renderer backend does not exit to accept resize: %i %i",width,height);
}
}
b8 renderer_draw_frame(render_packet* packet)
{
if(renderer_begin_frame(packet->delta_time))
{
mat4 projection = mat4_perspective(deg_to_rad(45.0f),1280/720.0f,0.1f,1000.0f);
static f32 z = 0.0f;
z += 0.01f;
mat4 view = mat4_translation((vec3){0,0,z});
view = mat4_inverse(view);
backend->update_global_state(projection,view,vec3_zero(),vec4_one(),0);
static f32 angle = 0.01f;
angle += 0.001f;
mat4 model = mat4_translation((vec3){0,0,0});
quat rotation = quat_from_axis_angle(vec3_forward(),0.1f,false);
quat_to_rotation_matrix(rotation,vec3_zero());
backend->update_object(model);
b8 result = renderer_end_frame(packet->delta_time);
if(!result)
{
KERROR("renderer_end_frame failed.Application shutting down...");
return false;
}
}
return true;
}
void renderer_set_view(mat4 view)
{
view = view;
}
void render_create_texture(
const char* name,
b8 auto_release,
i32 width,
i32 height,
i32 channel_count,
const u8* pixels,
b8 has_transparency,
struct texture* out_texture
)
{
backend->create_texture(name,auto_release,width,height,channel_count,pixels,has_transparency,out_texture);
}
void renderer_destroy_texture(struct texture* texture)
{
backend->destroy_texture(texture);
}