Scarab
A thin, game-agnostic 2D engine host built on the sunlight tile-map engine
Loading...
Searching...
No Matches
rendererprovider.h
Go to the documentation of this file.
1/*
2 * Copyright (c) since 2021 by PopolonY2k and Leidson Campos A. Ferreira
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 *
8 * Permission is granted to anyone to use this software for any purpose,
9 * including commercial applications, and to alter it and redistribute it
10 * freely, subject to the following restrictions:
11 *
12 * 1. The origin of this software must not be misrepresented; you must not
13 * claim that you wrote the original software. If you use this software
14 * in a product, an acknowledgment in the product documentation would be
15 * appreciated but is not required.
16 * 2. Altered source versions must be plainly marked as such, and must not be
17 * misrepresented as being the original software.
18 * 3. This notice may not be removed or altered from any source distribution.
19 */
20
21#ifndef __RENDERERPROVIDER_H__
22#define __RENDERERPROVIDER_H__
23
24#include <functional>
25#include <memory>
26#include <string>
28#include "renderer/rendererconfig.h"
29#include "renderer/tilemaprenderer.h"
30
31namespace Scarab {
32 namespace Host {
33
40 bool bEnabled = false; // --headless: force the null backend
41 bool bFast = false; // --fast: unlimited frame pacing
42 unsigned nMaxFrames = 0; // --max-frames N (0 = none given)
43 };
44
56 class RendererProvider : public Scarab :: Engine :: IRendererProvider {
57
58 public:
59
60 typedef std :: function<void( SunLight :: Renderer :: TileMapRenderer& )> CreatedHook;
61
62 private:
63
64 SunLight :: Renderer :: RendererConfig m_DefaultConfig;
65 SunLight :: Renderer :: RendererConfig m_EffectiveConfig;
66 stHeadlessSettings m_Headless;
67 std :: unique_ptr<SunLight :: Renderer :: TileMapRenderer> m_pRenderer;
68 Origin m_Origin;
69 std :: string m_strTrigger;
70 CreatedHook m_CreatedHook;
71
72 SunLight :: Renderer :: TileMapRenderer* GetOrCreateDefault( const char *szTrigger );
73
74 public:
75
76 RendererProvider( const SunLight :: Renderer :: RendererConfig &defaults,
77 const stHeadlessSettings &headless );
78 virtual ~RendererProvider( void );
79
80 void SetCreatedHook( CreatedHook hook );
81 bool Create( const SunLight :: Renderer :: RendererConfig &config,
82 Origin origin,
83 const std :: string &strTrigger,
84 std :: string *pError );
85 void EnsureCreated( const char *szTrigger );
86
87 SunLight :: Renderer :: TileMapRenderer* GetRenderer( void );
88 const stHeadlessSettings& GetHeadlessSettings( void ) const;
89
90 // Scarab::Engine::IRendererProvider
91 SunLight :: TileMap :: ITileMap* GetTileMap( const char *szTrigger );
92 SunLight :: DrawSurface :: IDrawSurface* GetDrawSurface( const char *szTrigger );
93 SunLight :: DrawSurface :: IDrawSurface* PeekDrawSurface( void );
94 bool CreateRenderer( const SunLight :: Renderer :: RendererConfig &config, std :: string *pError );
95 Origin GetOrigin( void );
96 bool IsHeadless( void );
97 SunLight :: Renderer :: RendererConfig GetDefaultConfig( void );
98 SunLight :: Renderer :: RendererConfig GetEffectiveConfig( void );
99 void NoteWindowTitle( const std :: string &strTitle );
100 };
101 }
102}
103
104#endif /* __RENDERERPROVIDER_H__ */
Owns the process's one renderer and creates it on demand.
Definition rendererprovider.h:56
bool Create(const SunLight ::Renderer ::RendererConfig &config, Origin origin, const std ::string &strTrigger, std ::string *pError)
Create the process's renderer and open its window.
Definition rendererprovider.cpp:76
SunLight::Renderer::RendererConfig GetDefaultConfig(void)
Definition rendererprovider.cpp:216
const stHeadlessSettings & GetHeadlessSettings(void) const
What the command line asked of –headless.
Definition rendererprovider.cpp:162
SunLight::DrawSurface::IDrawSurface * PeekDrawSurface(void)
Definition rendererprovider.cpp:177
Origin GetOrigin(void)
Definition rendererprovider.cpp:206
virtual ~RendererProvider(void)
Destructor. Destroys the renderer, if one was ever created (its window is normally already closed by ...
Definition rendererprovider.cpp:48
bool CreateRenderer(const SunLight ::Renderer ::RendererConfig &config, std ::string *pError)
Explicitly create the renderer (renderer_create). The error for "a renderer already exists" says whic...
Definition rendererprovider.cpp:188
void SetCreatedHook(CreatedHook hook)
Set the function called with every renderer right after it is created and before its window opens - w...
Definition rendererprovider.cpp:57
SunLight::Renderer::RendererConfig GetEffectiveConfig(void)
Definition rendererprovider.cpp:221
SunLight::Renderer::TileMapRenderer * GetRenderer(void)
The renderer, or nullptr if none exists yet (never creates one).
Definition rendererprovider.cpp:156
SunLight::TileMap::ITileMap * GetTileMap(const char *szTrigger)
Definition rendererprovider.cpp:167
std ::function< void(SunLight ::Renderer ::TileMapRenderer &)> CreatedHook
Definition rendererprovider.h:60
void EnsureCreated(const char *szTrigger)
Create the default renderer if none exists yet - called when the entry script has finished,...
Definition rendererprovider.cpp:131
bool IsHeadless(void)
Definition rendererprovider.cpp:211
void NoteWindowTitle(const std ::string &strTitle)
Keep the effective configuration's title current: app_set_name changes the live window title,...
Definition rendererprovider.cpp:230
SunLight::DrawSurface::IDrawSurface * GetDrawSurface(const char *szTrigger)
Definition rendererprovider.cpp:172
Definition irendererprovider.h:32
What the command line asked of –headless; the provider applies it to every renderer it creates,...
Definition rendererprovider.h:39
bool bFast
Definition rendererprovider.h:41
unsigned nMaxFrames
Definition rendererprovider.h:42
bool bEnabled
Definition rendererprovider.h:40