3d游戏引擎EngineTest的系统实现3

1.TestRenderer.h

#pragma once

#include "Test.h"

class engine_test : public test

{

public:

bool initialize() override;

void run() override;

void shutdown() override;

};

2.TestRenderer.cpp

#include "..\Platform\PlatformTypes.h"

#include "..\Platform\Platform.h"

#include "../Graphics/Renderer.h"

#include "TestRenderer.h"

#include "ShaderCompilation.h"

#if TEST_RENDERER

template <bool test,typename T = void>

struct enable_if {};

template <typename T>

struct enable_if<true, T> { using type = T; };

template <bool test, typename T = void>

using enable_if_t = typename enable_if<test, T>::type;

template<typename T>

using iterator_cat_t = typename std::iterator_traits<T>::iterator_category;

template<typename T>

using void_t = void;

template <typename T,typename=void>

constexpr bool is_iterator_v = false;

template<typename T>

constexpr bool is_iterator_v<T, void_t<iterator_cat_t<T>>> = true;

template<typename T, enable_if_t<is_iterator_v<T>, int> = 0>

void function(T t)

{

}

void function(int T)

{

}

using namespace primal;

graphics::render_surface _surfaces4;

time_it timer{};

void destroy_render_surface(graphics::render_surface& surface);

LRESULT win_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)

{

function(1234);

function(&hwnd);

switch (msg)

{

case WM_DESTROY:

{

bool all_closed{ true };

for (u32 i{ 0 }; i < _countof(_surfaces); ++i) {

for (u32 i{ 0 }; i < _countof(_surfaces); ++i)

{

if (!_surfacesi.window.is_closed())

{

destroy_render_surface(_surfacesi);

}

else

{

all_closed = false;

}

}

}

if (all_closed)

{

PostQuitMessage(0);

return 0;

}

}

break;

case WM_SYSCHAR:

if (wparam == VK_RETURN && (HIWORD(lparam) & KF_ALTDOWN))

{

platform::window win{ platform::window_id{(id::id_type)GetWindowLongPtr(hwnd,GWLP_USERDATA)} };

win.set_fullscreen(!win.is_fullscreen());

return 0;

}

break;

case WM_KEYDOWN:

if (wparam == VK_ESCAPE)

{

PostMessage(hwnd, WM_CLOSE, 0, 0);

return 0;

}

}

return DefWindowProc(hwnd, msg, wparam, lparam);

}

void

create_render_surface(graphics::render_surface& surface, platform::window_init_info info)

{

surface.window = platform::create_window(&info);

surface.surface = graphics::create_surface(surface.window);

}

void

destroy_render_surface(graphics::render_surface& surface)

{

graphics::render_surface temp{ surface };

surface = {};

//graphics::remove_surface(surface.surface.get_id());

//platform::remove_window(surface.window.get_id());

if (temp.surface.is_valid())graphics::remove_surface(temp.surface.get_id());

if (temp.window.is_valid())platform::remove_window(temp.window.get_id());

}

bool

engine_test::initialize()

{

while (!compile_shaders())

{

if (MessageBox(nullptr, L"Failed to compile engine shaders.", L"Shader Compilation Error", MB_RETRYCANCEL) != IDRETRY)

return false;

}

if (!graphics::initialize(graphics::graphics_platform::direct3d12)) return false;

//if (!result) return result;

platform::window_init_info info\[\]

{

{&win_proc,nullptr,L"RenderWindow 1",100 - 2000,100 - 700,400,800 },

{&win_proc,nullptr,L"RenderWindow 2",150 - 2000,150 - 700,800,400 },

{&win_proc,nullptr,L"RenderWindow 3",200 - 2000,200 - 700,400,400 },

{&win_proc,nullptr,L"RenderWindow 4",250 - 2000,250 - 700,800,600 },

};

static_assert(_countof(info) == _countof(_surfaces));

for (u32 i{ 0 }; i < _countof(_surfaces); ++i)

create_render_surface(_surfacesi, infoi);

return true;

}

void engine_test::run()

{

timer.begin();

std::this_thread::sleep_for(std::chrono::milliseconds(10));

//graphics::render();

for (u32 i{ 0 }; i < _countof(_surfaces); ++i)

{

if (_surfacesi.surface.is_valid())

{

_surfacesi.surface.render();

}

}

timer.end();

}

void engine_test::shutdown()

{

for (u32 i{ 0 }; i < _countof(_surfaces); ++i)

destroy_render_surface(_surfacesi);

graphics::shutdown();

}

#endif

相关推荐
panxianren4 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
“AI国潮设计-小江”6 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人6 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
sunshine22 girl6 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs6 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang7 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl7 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat7 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
菜鸟~noob2338 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫9 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python