vulkan游戏引擎renderer_frontend实现

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);

}

相关推荐
mxwin4 小时前
Unity Shader 半透明物体为什么不能写入深度缓冲?
unity·游戏引擎·shader
晚枫歌F6 小时前
三层时间轮的实现
网络·unity·游戏引擎
努力长头发的程序猿10 小时前
Unity使用ScriptableObject序列化资源
unity·游戏引擎
mxwin10 小时前
Unity Shader 手写基于 PBR 的 URP Lit Shader 核心光照计算
unity·游戏引擎·shader
魔士于安11 小时前
Unity windows 同步 异步 打开文件文件夹工具
游戏·unity·游戏引擎·贴图·模型
笑虾11 小时前
cocos2d-x lua 加载 Cocos Studio 导出的 csb
游戏引擎·lua·cocos2d
魔士于安11 小时前
unity lowpoly 风格 城市 建筑 道路 交通标志
游戏·unity·游戏引擎·贴图·模型
mxwin11 小时前
Unity GPU Shader 性能优化指南
unity·游戏引擎·shader
董董女友1 天前
unity mcp 配置指南
unity·游戏引擎
垂葛酒肝汤1 天前
Unity的可视化网格和文字标签
unity·游戏引擎