OGLplus  (0.59.0) a C++ wrapper for rendering APIs

interface.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_APPLICATION_INTERFACE_HPP
10 #define EAGINE_APPLICATION_INTERFACE_HPP
11 
12 #include "../interface.hpp"
13 #include "../memory/block.hpp"
14 #include "../string_span.hpp"
15 #include "../tribool.hpp"
16 #include "fwd.hpp"
17 #include "input.hpp"
18 #include "options.hpp"
19 #include <memory>
20 
21 namespace eagine::application {
22 //------------------------------------------------------------------------------
23 struct input_sink : interface<input_sink> {
24 
25  virtual void
26  consume(const input_info&, const input_value<bool>&) noexcept = 0;
27  virtual void
28  consume(const input_info&, const input_value<int>&) noexcept = 0;
29  virtual void
30  consume(const input_info&, const input_value<float>&) noexcept = 0;
31  virtual void
32  consume(const input_info&, const input_value<double>&) noexcept = 0;
33 };
34 //------------------------------------------------------------------------------
35 struct input_provider : interface<input_provider> {
36 
37  virtual auto instance_id() const noexcept -> identifier = 0;
38 
39  virtual void
40  input_enumerate(callable_ref<void(message_id, input_value_kinds)>) = 0;
41 
42  virtual void input_connect(input_sink&) = 0;
43  virtual void input_disconnect() = 0;
44 
45  virtual void mapping_begin(identifier setup_id) = 0;
46  virtual void mapping_enable(message_id signal_id) = 0;
47  virtual void mapping_commit(identifier setup_id) = 0;
48 };
49 //------------------------------------------------------------------------------
50 struct video_provider : interface<video_provider> {
51 
52  virtual auto video_kind() const noexcept -> video_context_kind = 0;
53  virtual auto instance_id() const noexcept -> identifier = 0;
54 
55  virtual auto is_offscreen() noexcept -> tribool = 0;
56  virtual auto has_framebuffer() noexcept -> tribool = 0;
57  virtual auto surface_size() noexcept -> std::tuple<int, int> = 0;
58  virtual auto surface_aspect() noexcept -> float = 0;
59 
60  virtual void video_begin(execution_context&) = 0;
61  virtual void video_end(execution_context&) = 0;
62  virtual void video_commit(execution_context&) = 0;
63 };
64 //------------------------------------------------------------------------------
65 struct audio_provider : interface<audio_provider> {
66 
67  virtual auto audio_kind() const noexcept -> audio_context_kind = 0;
68  virtual auto instance_id() const noexcept -> identifier = 0;
69 };
70 //------------------------------------------------------------------------------
71 struct hmi_provider : interface<hmi_provider> {
72 
73  virtual auto is_implemented() const noexcept -> bool = 0;
74  virtual auto implementation_name() const noexcept -> string_view = 0;
75 
76  virtual auto is_initialized() -> bool = 0;
77  virtual auto should_initialize(execution_context&) -> bool = 0;
78  virtual auto initialize(execution_context&) -> bool = 0;
79  virtual void update(execution_context&) = 0;
80  virtual void clean_up(execution_context&) = 0;
81 
82  virtual void
83  input_enumerate(callable_ref<void(std::shared_ptr<input_provider>)>) = 0;
84  virtual void
85  video_enumerate(callable_ref<void(std::shared_ptr<video_provider>)>) = 0;
86  virtual void
87  audio_enumerate(callable_ref<void(std::shared_ptr<audio_provider>)>) = 0;
88 };
89 //------------------------------------------------------------------------------
90 struct framedump : interface<framedump> {
91 
92  virtual auto initialize(execution_context&, const video_options&)
93  -> bool = 0;
94 
95  virtual auto get_buffer(span_size_t size) -> memory::block = 0;
96 
97  virtual auto dump_frame(
98  long frame_number,
99  int width,
100  int height,
101  int elements,
102  span_size_t element_size,
105  memory::block data) -> bool = 0;
106 };
107 //------------------------------------------------------------------------------
108 struct application : interface<application> {
109 
110  virtual auto is_done() noexcept -> bool = 0;
111  virtual void on_video_resize() noexcept = 0;
112  virtual void update() noexcept = 0;
113  virtual void clean_up() noexcept = 0;
114 };
115 //------------------------------------------------------------------------------
116 struct launchpad : interface<launchpad> {
117 
118  virtual auto setup(main_ctx&, launch_options&) -> bool {
119  return true;
120  }
121 
122  virtual auto launch(execution_context&, const launch_options&)
123  -> std::unique_ptr<application> = 0;
124 };
125 //------------------------------------------------------------------------------
126 } // namespace eagine::application
127 
128 #endif
Application harness / wrapper code is placed in this namespace.
Definition: eagine.hpp:72
framedump_pixel_format
Pixel data format of frame dump image data.
Definition: types.hpp:102
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
basic_string_span< const char > string_view
Alias for const string views.
Definition: string_span.hpp:116
basic_callable_ref< Sig, is_noexcept_function_v< Sig > > callable_ref
Alias for callable object references.
Definition: callable_ref.hpp:191
basic_block< false > block
Alias for non-const byte memory span.
Definition: block.hpp:27
audio_context_kind
Audio / sound playback and recodring context kind.
Definition: types.hpp:37
framedump_data_type
Pixel data type used to store frame dump image data.
Definition: types.hpp:72
constexpr interface(const interface &)=delete
Not copyable.
bitfield< input_value_kind > input_value_kinds
Application input value kind bitfield.
Definition: input.hpp:34
@ instance_id
The endpoint instance id has changed.
video_context_kind
Video / graphics rendering context kind.
Definition: types.hpp:20
basic_identifier< 10, 6, default_identifier_char_set, identifier_t > identifier
Default identifier type used throughout the project.
Definition: identifier.hpp:346

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).