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

}

相关推荐
nainaire16 分钟前
自学虚幻引擎记录1
游戏引擎·虚幻
想你依然心痛3 小时前
HarmonyOS 5.0游戏开发实战:构建高性能2D休闲游戏引擎与 monetization 系统
华为·游戏引擎·harmonyos
Zarek枫煜2 天前
C3 编程语言 - 现代 C 的进化之选
c语言·开发语言·青少年编程·rust·游戏引擎
榮華2 天前
DOTA全图透视辅助下载DOTA全图科技辅助下载DOTA外挂下载魔兽争霸WAR3全图下载
数据库·科技·游戏·游戏引擎·游戏程序·ai编程·腾讯云ai代码助手
RPGMZ2 天前
RPGMakerMZ 游戏引擎 野外采集点制作
javascript·游戏·游戏引擎·rpgmz·野外采集点
星河耀银海2 天前
Unity基础:摄像机Camera的参数设置与视角控制
unity·游戏引擎·lucene
星河耀银海2 天前
Unity基础:Transform组件的位移、旋转与缩放详解
unity·游戏引擎·lucene
weixin_409383123 天前
godot 击败敌人后增加经验的脚本
游戏引擎·godot
mxwin3 天前
Unity URP 下 MatCap 技术详解 无视光照环境的卡通与质感渲染方案
unity·游戏引擎
weixin_409383123 天前
godot 获取敌人位置自动发射子弹 旋转枪口
游戏引擎·godot