Files
DX12/Engine/Graphics/Renderer.cpp
SpecialX 95d8893182 feat(d3d12): 实现交换链与渲染表面管理
- 新增 d3d12_surface 类,管理交换链和渲染目标
- 实现三重缓冲后台缓冲区管理
- 添加视口和裁剪矩形配置
- 修复 GraphicsPlatformInterface.h 循环包含问题
- 添加完整的中文 Doxygen 注释
- 更新 D3D12 学习 Wiki,添加交换链章节
2026-03-31 11:12:11 +08:00

102 lines
1.8 KiB
C++

#include "Renderer.h"
#include "GraphicsPlatformInterface.h"
#include "Direct3D12/D3D12Interface.h"
namespace XEngine::graphics {
namespace {
platform_interface gfx{};
/**
* @brief 设置图形渲染平台的接口
* @details 根据指定的平台类型,调用对应的初始化与关闭函数指针
* @param platform 图形渲染平台类型
* @return true 如果初始化成功,否则返回 false
*/
bool
set_platform_interface(graphics_platform platform)
{
switch (platform)
{
case graphics_platform::direct3d12:
d3d12::get_platform_interface(gfx);
break;
case graphics_platform::vulkan:
//vulkan::get_platform_interface(gfx);
break;
case graphics_platform::opengl:
//opengl::get_platform_interface(gfx);
break;
default:
return false;
}
return true;
}
}// anonymous namespace
/**
* @brief 初始化图形渲染平台
* @details 调用设置平台接口函数,初始化指定的图形渲染平台
* @param platform 图形渲染平台类型
* @return true 如果初始化成功,否则返回 false
*/
bool
initialize(graphics_platform platform)
{
return set_platform_interface(platform) && gfx.initialize();
}
void
shutdown()
{
gfx.shutdown();
}
void
render()
{
gfx.render();
}
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
{
assert(is_valid());
gfx.surface.render(_id);
}
}// namespace XEngine::graphics