3d游戏引擎的Graphics代码的全部展示和实现

1.Graphics/GraphicsPlatformInterface.h

#pragma once
#include "CommonHeaders.h"
#include "Renderer.h"
#include "Platform\Window.h"

namespace primal::graphics 
{
    struct platform_interface 
    {
        bool(*initialize)(void);
        void(*shutdown)(void);
        


        struct {
            surface(*create)(platform::window);
            void(*remove)(surface_id);
            void(*resize)(surface_id, u32, u32);
            u32(*width)(surface_id);
            u32(*height)(surface_id);
            void(*render)(surface_id);
        }surface;
    
    
    };

}
2.Renderer.h

#pragma once

#include "CommonHeaders.h"
#include "..\Platform\Window.h"


namespace primal::graphics 
{

    DEFINE_TYPED_ID(surface_id);


    class surface {
    
    
    public:

        constexpr explicit surface(surface_id id) : _id{ id } {}
        constexpr surface() = default;
        constexpr surface_id get_id() const { return _id; }
        constexpr bool is_valid() const { return id::is_valid(_id); }


        
        void resize(u32 width, u32 height) const;
        u32 width() const;
        u32 height() const;
        void render() const;

    private:

        surface_id _id{ id::invalid_id };
    
    
    
    };

    struct render_surface {

        platform::window window{};
        surface surface{};


    };

    enum class graphics_platform :u32
    {
        direct3d12 = 0,
    
    
    };
    bool initialize(graphics_platform platform);

    void shutdown();

    //void render();

    surface create_surface(platform::window window);
    void remove_surface(surface_id id);
    


}

3.Renderer.cpp

#include "Renderer.h"
#include "GraphicsPlatformInterface.h"
#include "Direct3D12/D3D12Interface.h"

namespace primal::graphics 
{
    namespace 
    {
        platform_interface gfx{};

        
        bool set_platform_interface(graphics_platform platform) 
        {
            switch (platform) 
            {
            case graphics_platform::direct3d12:
                d3d12::get_platform_interface(gfx);
                    break;
            default:
                return false;
            
            
            
            }

            return true;
            
        
        
        }

    
    
    }


    bool initialize(graphics_platform platform) 
    {
        return set_platform_interface(platform) && gfx.initialize();
    }

    
    void shutdown() 
    {
    
        gfx.shutdown();
    
    }
    


    surface 
        create_surface(platform::window window) 
    {
        return gfx.surface.create(window);
    
    
    }

    void
        remove_surface(surface_id id) 
    {
    
        assert(id::is_valid(id));
        gfx.surface.remove(id);
    
    
    }

    void surface::resize(u32 width, u32 height) const 
    {

        assert(is_valid());
        gfx.surface.resize(_id, width, height);
            
    }
    u32 surface::width() const 
    {
        assert(is_valid());
        return gfx.surface.width(_id);
    
    }
    u32 surface::height() const 
    {
        assert(is_valid());
        return gfx.surface.height(_id);
    
    }
    void surface::render() const 
    {
        
    
    
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magnum Lehar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值