- 新增 d3d12_surface 类,管理交换链和渲染目标 - 实现三重缓冲后台缓冲区管理 - 添加视口和裁剪矩形配置 - 修复 GraphicsPlatformInterface.h 循环包含问题 - 添加完整的中文 Doxygen 注释 - 更新 D3D12 学习 Wiki,添加交换链章节
102 lines
1.8 KiB
C++
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
|