PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
application_shell_internal.h
1#pragma once
2
3#include "pixelbullet/core/event.h"
4
5#include "pixelbullet/application/application_internal.h"
6#include "pixelbullet/application/launch_gpu_defaults_internal.h"
7#include "pixelbullet/graphics/gpu_session.h"
8
9#include <filesystem>
10#include <functional>
11#include <memory>
12#include <optional>
13#include <string>
14
15namespace pixelbullet
16{
17class Layer;
18struct GraphicsConfig;
19struct WindowConfig;
20} // namespace pixelbullet
21
22namespace pixelbullet::application_internal
23{
25{
26 bool runfiles_available = false;
27 std::filesystem::path packaged_runtime_root;
28};
29
31{
32 std::function<RuntimeInitializationSummary(const ApplicationSpecification&, const std::string&)> create_filesystem;
33 std::function<void()> create_graphics_resource_cache;
34 std::function<void(const WindowConfig&)> create_window;
35 std::function<void(const std::function<void(pixelbullet::core::Event&)>&)> set_window_event_callback;
36 std::function<void(const GraphicsConfig&)> create_graphics;
37 std::function<void(const GraphicsDeviceSelectionSession&)> set_graphics_device_selection_session;
38 std::function<void(const std::function<void(uint32_t)>&)> set_framebuffer_resize_callback;
39 std::function<void(const std::string&)> set_window_icon;
40 std::function<void()> create_audio;
41 std::function<void()> create_layer_stack;
42 std::function<void()> clear_window_callbacks;
43 std::function<void()> clear_renderer;
44 std::function<void(UiFrameLayer*&)> reset_layer_stack;
45 std::function<void()> reset_graphics_resource_cache;
46};
47
48enum class LayerInsertion
49{
50 Layer,
51 Overlay
52};
53
54enum class LaunchRunOutcome
55{
56 Completed,
57 SmokeSucceeded,
58 SmokeTimedOut
59};
60
62{
63 std::function<std::optional<int>(const ApplicationBootstrap&)> execute_cli;
64 std::function<LaunchRunOutcome(const ApplicationBootstrap&)> run_application;
65};
66
68{
69 int exit_code = 1;
70 bool cli_handled = false;
71};
72
74InitializeApplicationRuntime(ApplicationState& state, const ApplicationBootstrap& bootstrap,
75 const GraphicsDeviceSelectionSession& device_selection_session,
76 const std::function<void(pixelbullet::core::Event&)>& event_callback,
77 const std::function<void(uint32_t)>& framebuffer_resize_callback, const RuntimeShellBindings& bindings);
78void ShutdownApplicationRuntime(ApplicationState& state, const RuntimeShellBindings& bindings) noexcept;
79[[nodiscard]] Layer* AttachLayer(ApplicationState& state, std::unique_ptr<Layer> layer, LayerInsertion insertion);
80[[nodiscard]] int MapLaunchRunOutcomeToExitCode(LaunchRunOutcome outcome) noexcept;
81[[nodiscard]] LaunchExecutionResult ExecuteLaunchShell(const ApplicationBootstrap& bootstrap, const LaunchShellBindings& bindings);
82} // namespace pixelbullet::application_internal
Definition application_internal.h:20
Definition layer.h:26
Definition layer.h:17
Definition event.h:108
Definition specification.h:61
Contains configuration options for both the game and the engine.
Definition specification.h:82
Definition graphics_config.h:19
Definition window_config.h:11
Definition application_shell_internal.h:68
Definition application_shell_internal.h:62
Definition application_shell_internal.h:25
Definition application_shell_internal.h:31