3#include "spdlog/common.h"
18 [](
const std::string& msg,
const char* file_path, uint16_t line)
23 [](
const std::string& msg,
const char* file_path, uint16_t line)
28 [](
const std::string& msg,
const char* file_path, uint16_t line)
33 [](
const std::string& msg,
const char* file_path, uint16_t line)
43 parser.
set_optional<std::string>(
"r",
"renderer",
"auto",
"Select preferred renderer.");
44 parser.
set_optional<
bool>(
"n",
"novsync",
false,
"Disable vsync.");
49 APPLOG_TRACE(
"{}::{}", hpp::type_name_str(*
this), __func__);
56 if(!init_backend(parser))
65 ->
const std::unique_ptr<render_window>&
67 auto mode = os::display::get_desktop_mode(index);
68 auto bounds = os::display::get_usable_bounds(index);
70 if(flags & os::window::resizable)
72 uint32_t window_header = 38 / mode.display_scale;
73 bounds.y += window_header;
74 bounds.h -= window_header;
77 os::window window(title, bounds.x, bounds.y, bounds.w * mode.display_scale, bounds.h * mode.display_scale, flags);
78 set_main_window(std::move(window));
79 return render_window_;
84 render_window_ = std::make_unique<render_window>(std::move(window));
89 APPLOG_TRACE(
"{}::{}", hpp::type_name_str(*
this), __func__);
97 std::make_unique<os::window>(
"INIT", os::window::centered, os::window::centered, 64, 64, os::window::hidden);
98 const auto sz = init_window_->get_size();
101 init_data.type = get_renderer_type(parser);
102 init_data.resolution.width = sz.w;
103 init_data.resolution.height = sz.h;
104 init_data.resolution.reset = get_reset_flags(parser);
105 init_data.platformData.ndt = init_window_->get_native_display();
106 init_data.platformData.nwh = init_window_->get_native_handle();
107 reset_flags_ = init_data.resolution.reset;
110 APPLOG_ERROR(
"Could not initialize rendering backend!");
118 const bgfx::Caps* caps = bgfx::getCaps();
119 if (0 != (caps->supported & BGFX_CAPS_GRAPHICS_DEBUGGER) )
133 if(e.type == os::events::window)
135 if(e.window.type == os::window_event_id::close)
137 auto window_id = e.window.window_id;
147 if(e.window.type == os::window_event_id::resized)
149 auto window_id = e.window.window_id;
165 auto preferred_renderer_type = gfx::renderer_type::Count;
167 std::string preferred_renderer;
168 if(parser.try_get(
"renderer", preferred_renderer))
170 if(preferred_renderer ==
"opengl")
172 preferred_renderer_type = gfx::renderer_type::OpenGL;
174 else if(preferred_renderer ==
"vulkan")
176 preferred_renderer_type = gfx::renderer_type::Vulkan;
178 else if(preferred_renderer ==
"directx11")
180 preferred_renderer_type = gfx::renderer_type::Direct3D11;
182 else if(preferred_renderer ==
"directx12")
184 preferred_renderer_type = gfx::renderer_type::Direct3D12;
188 return preferred_renderer_type;
193 bool novsync =
false;
194 parser.try_get(
"novsync", novsync);
195 return get_reset_flags(!novsync);
200 uint32_t flags = BGFX_RESET_MAXANISOTROPY | BGFX_RESET_HIDPI;
204 flags |= BGFX_RESET_VSYNC;
208 flags |= BGFX_RESET_NONE;
270 auto& pass = window->begin_present_pass();
void set_optional(const std::string &name, const std::string &alternative, T defaultValue, const std::string &description="", bool dominant=false)
std::chrono::duration< float > delta_t
#define APPLOG_ERROR(...)
#define APPLOG_INFO_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_WARNING_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_ERROR_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_TRACE_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_TRACE(...)
renderer_type get_renderer_type()
bool init(init_type init_data)
void set_info_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
const char * get_renderer_name(renderer_type _type)
void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
void set_warning_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
void set_trace_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
bgfx::RendererType::Enum renderer_type
void set_error_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
uint32_t frame(bool _capture)
static auto get_max_pass_id() -> gfx::view_id
void bind(const frame_buffer *fb=nullptr) const
hpp::event< void(rtti::context &, os::event &e)> on_os_event
os events
Struct representing a render window.
auto get_reset_flags(const cmd_line::parser &parser) const -> uint32_t
std::string request_screenshot_
void frame_begin(rtti::context &ctx, delta_t dt)
auto get_renderer_type(const cmd_line::parser &parser) const -> gfx::renderer_type
auto init_backend(const cmd_line::parser &parser) -> bool
std::unique_ptr< render_window > render_window_
std::unique_ptr< os::window > init_window_
engine windows
void on_os_event(rtti::context &ctx, os::event &e)
auto deinit(rtti::context &ctx) -> bool
void frame_end(rtti::context &ctx, delta_t dt)
auto get_vsync() const -> bool
std::shared_ptr< int > sentinel_
void request_screenshot(const std::string &file)
renderer(rtti::context &ctx, cmd_line::parser &parser)
auto init(rtti::context &ctx, const cmd_line::parser &parser) -> bool
void set_vsync(bool vsync)
void set_main_window(os::window &&window)
auto create_window_for_display(int index, const std::string &title, uint32_t flags) -> const std::unique_ptr< render_window > &
auto get_main_window() const -> render_window *
void ddInit(bx::AllocatorI *_allocator)