vulkan游戏引擎renderer_frontend实现

[复制链接]
发表于 2025-7-9 00:13:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

    }

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:43 , Processed in 0.079180 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表