Go to the documentation of this file.
9 #ifndef EAGINE_APPLICATION_CONTEXT_HPP
10 #define EAGINE_APPLICATION_CONTEXT_HPP
12 #include "../../oalplus/al_api_fwd.hpp"
13 #include "../../oglplus/gl_api_fwd.hpp"
14 #include "../application_config.hpp"
15 #include "../assert.hpp"
16 #include "../flat_map.hpp"
17 #include "../main_ctx_object.hpp"
18 #include "../memory/buffer.hpp"
38 std::shared_ptr<video_provider> provider) noexcept
40 , _provider{std::move(provider)} {}
89 if(EAGINE_LIKELY(_provider)) {
90 return extract(_provider).surface_size();
97 if(EAGINE_LIKELY(_provider)) {
98 return extract(_provider).surface_aspect();
109 std::shared_ptr<video_provider> _provider{};
110 std::shared_ptr<oglp::gl_api> _gl_api{};
111 std::shared_ptr<video_context_state> _state{};
126 std::shared_ptr<audio_provider> provider) noexcept
128 , _provider{std::move(provider)} {
129 EAGINE_MAYBE_UNUSED(_parent);
141 return bool(_al_api);
157 std::shared_ptr<audio_provider> _provider{};
158 std::shared_ptr<oalp::al_api> _al_api{};
168 ,
private input_sink {
224 return span_size(_video_contexts.size());
230 return _video_contexts[
std_size(index)].get();
237 return span_size(_audio_contexts.size());
243 return _audio_contexts[
std_size(index)].get();
271 return map_input(input_id, {}, signal_id, setup);
300 auto stop_running_input() noexcept ->
input_slot {
317 launch_options _options;
318 std::shared_ptr<context_state> _state;
319 std::unique_ptr<application> _app;
320 bool _keep_running{
true};
322 std::vector<std::shared_ptr<hmi_provider>> _hmi_providers;
323 std::vector<std::shared_ptr<input_provider>> _input_providers;
324 std::vector<std::unique_ptr<video_context>> _video_contexts;
325 std::vector<std::unique_ptr<audio_context>> _audio_contexts;
327 auto _setup_providers() -> bool;
332 flat_map<message_id, input_handler> _connected_inputs;
337 flat_map<message_id, std::tuple<message_id, input_setup>>>
341 flat_map<message_id, std::tuple<input_setup, input_handler>> _mapped_inputs;
343 void _handle_stop_running(
const input& engaged) {
349 template <
typename T>
350 void _forward_input(
const input_info&,
const input_value<T>&) noexcept;
352 void consume(
const input_info&,
const input_value<bool>&) noexcept
final;
353 void consume(
const input_info&,
const input_value<int>&) noexcept
final;
354 void consume(
const input_info&,
const input_value<float>&) noexcept
final;
355 void consume(
const input_info&,
const input_value<double>&) noexcept
final;
358 auto establish(main_ctx&) -> std::unique_ptr<launchpad>;
361 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
362 #include <eagine/application/context.inl>
Application harness / wrapper code is placed in this namespace.
Definition: eagine.hpp:72
void clean_up() noexcept
Cleans up and releases this rendering context and APIs.
Helper class used to initialize main context objects.
Definition: main_ctx_object.hpp:45
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Declaration of class template storing a reference to a callable object.
Definition: callable_ref.hpp:24
Read-only view of application context state values.
Definition: state_view.hpp:34
auto options() const noexcept -> const launch_options &
Returns a reference to the launch options.
Definition: context.hpp:180
#define EAGINE_ID(NAME)
Macro for constructing instances of eagine::identifier.
Definition: identifier.hpp:353
auto has_al_api() const noexcept
Indicates if the AL API in this audio context is initialized.
Definition: context.hpp:140
static constexpr auto span_size(T v) noexcept
Converts argument to span size type.
Definition: types.hpp:59
auto parent() const noexcept -> execution_context &
Returns a reference to the parent application execution context.
Definition: context.hpp:43
Base class for main context objects.
Definition: main_ctx_object.hpp:71
auto audio_ctx(span_size_t index=0) const noexcept -> audio_context *
Returns the audio context at the specified index.
Definition: context.hpp:241
#define EAGINE_MSG_ID(API, NAME)
Macro for instantiating objects of static_message_id.
Definition: message_id.hpp:148
static constexpr auto extract(api_result_value< Result, api_result_validity::never > &) noexcept -> Result &
Overload of extract for api_result_value.
Definition: c_api_wrap.hpp:270
auto init_gl_api() noexcept -> bool
Tries to intialize the GL rendering API in this video context.
auto state() const noexcept -> const context_state_view &
Returns a reference to the context state view.
auto setup_inputs() -> execution_context &
Sets-up (connects handlers and binds to signals) default inputs.
Definition: context.hpp:288
void stop_running() noexcept
Stops the main application loop.
auto frame_number() const noexcept
Returns the current video frame number.
Definition: context.hpp:48
main_ctx_object(identifier obj_id, main_ctx_parent parent) noexcept
Initialization from object id and parent.
Definition: main_ctx_object.hpp:77
auto setup_inputs(identifier mapping_id) -> execution_context &
Sets-up (connects handlers and binds to signals) default inputs.
Definition: context.hpp:283
auto prepare(std::unique_ptr< launchpad > pad) -> execution_context &
Prepares the application launch pad object.
Class holding audio playback and recording-related application support objects.
Definition: context.hpp:122
auto video_ctx(span_size_t index=0) const noexcept -> video_context *
Returns the video context at the specified index.
Definition: context.hpp:228
void commit()
Apply the rendering commands done since the last commit (swap buffers).
void begin()
Start working in this video rendering context (make it current).
static constexpr auto std_size(T v) noexcept
Converts argument to std size type.
Definition: types.hpp:52
auto audio_ctx_count() const noexcept
Returns the count of created audio contexts.
Definition: context.hpp:236
auto surface_size() noexcept -> std::tuple< int, int >
Returns the rendering surface's dimensions (in pixels).
Definition: context.hpp:88
void end()
Stop working with this video rendering context.
void random_uniform_01(span< float > dest)
Generates random uniformly-distributed floats in <0, 1> into dest.
auto buffer() const noexcept -> memory::buffer &
Returns a references to a multi-purpose memory buffer.
auto init_al_api() noexcept -> bool
Tries to intialize the AL sound API in this video context.
#define EAGINE_THIS_MEM_FUNC_C(FUNC)
Macro for creating object of member_function_constant in member functions.
Definition: mem_func_const.hpp:206
auto connect_input(const input_slot &input) -> auto &
Connect the specified input slot.
Definition: context.hpp:254
void update() noexcept
Updates this execution context (once per a single main loop iteration).
auto connect_input(message_id input_id, input_handler handler) -> execution_context &
Connect the specified logical input to a callable handler reference.
auto enough_run_time() const noexcept -> bool
Indicates if the application ran long enough.
auto result() const noexcept -> int
Returns the application execution result.
Definition: context.hpp:175
Class holding video rendering-related application support objects.
Definition: context.hpp:34
auto map_input(message_id input_id, identifier mapping_id, message_id signal_id, input_setup setup) -> execution_context &
Map a specified logical input to a physical input signal.
auto run() noexcept -> execution_context &
Starts the main application loop (will block until stopped).
Definition: context.hpp:208
auto surface_aspect() noexcept -> float
Returns the rendering surface's aspect ratio.
Definition: context.hpp:96
Combined wrapper for the GL API operations and constants.
Definition: basic_gl_api.hpp:27
auto al_api() const noexcept -> auto &
Returns a reference to the AL API in this context.
Definition: context.hpp:147
auto map_input(message_id input_id, message_id signal_id, input_setup setup) -> execution_context &
Map a specified logical input to a physical input signal.
Definition: context.hpp:269
auto video_ctx_count() const noexcept
Returns the count of created video contexts.
Definition: context.hpp:223
Class storing two identifier values representing class/method pair.
Definition: message_id.hpp:25
Class managing options for an application with video / audio rendering.
Definition: options.hpp:431
void clean_up() noexcept
Cleans up and releases this audio context and APIs.
auto has_gl_api() const noexcept
Indicates if the GL rendering API in this video context is initialized.
Definition: context.hpp:75
auto map_inputs() -> execution_context &
Binds generic application inputs to default physical input signals.
Definition: context.hpp:278
Class holding shared video/audio rendering application support objects.
Definition: context.hpp:166
auto connect_inputs() -> execution_context &
Connect generic, reusable application logical input slots.
void clean_up() noexcept
Cleans up this execution context and managed objects.
auto enough_frames(span_size_t frame_no) const noexcept -> bool
Indicates if the application rendered enough frames.
auto gl_api() const noexcept -> oglp::gl_api &
Returns a reference to the GL rendering API in this context.
Definition: context.hpp:82
auto is_running() noexcept -> bool
Indicates if the application is running its main loop.
void random_normal(span< float > dest)
Generates random normally-distributed floats into dest.
void random_uniform(span< byte > dest)
Generates random uniformly-distributed bytes into dest.
basic_identifier< 10, 6, default_identifier_char_set, identifier_t > identifier
Default identifier type used throughout the project.
Definition: identifier.hpp:346
auto switch_input_mapping() -> auto &
Switches to the default input mapping.
Definition: context.hpp:296