lxgui
gui_sdl_renderer.hpp
1 #ifndef LXGUI_GUI_SDL_RENDERER_HPP
2 #define LXGUI_GUI_SDL_RENDERER_HPP
3 
4 #include "lxgui/gui_matrix4.hpp"
5 #include "lxgui/gui_renderer.hpp"
6 #include "lxgui/impl/gui_sdl_render_target.hpp"
7 #include "lxgui/utils.hpp"
8 
9 #include <memory>
10 
11 struct SDL_Renderer;
12 
13 namespace lxgui::gui::sdl {
14 
15 class material;
16 
18 class renderer final : public gui::renderer {
19 public:
25  explicit renderer(SDL_Renderer* rdr, bool initialise_sdl_image);
26 
31  std::string get_name() const override;
32 
40  matrix4f get_view() const override;
41 
46  std::size_t get_texture_max_size() const override;
47 
54  bool is_texture_atlas_supported() const override;
55 
60  bool is_texture_vertex_color_supported() const override;
61 
69  std::shared_ptr<gui::material> create_material(
70  const vector2ui& dimensions,
71  const color32* pixel_data,
73 
80  std::shared_ptr<gui::material>
81  create_material(std::shared_ptr<gui::render_target> target, const bounds2f& location) override;
82 
88  std::shared_ptr<gui::render_target> create_render_target(
89  const vector2ui& dimensions, material::filter filt = material::filter::none) override;
90 
95  bool is_vertex_cache_supported() const override;
96 
102  std::shared_ptr<gui::vertex_cache> create_vertex_cache(gui::vertex_cache::type type) override;
103 
108  void notify_window_resized(const vector2ui& new_dimensions) override;
109 
114  SDL_Renderer* get_sdl_renderer() const;
115 
116 protected:
124  std::shared_ptr<gui::material>
125  create_material_(const std::string& file_name, material::filter filt) override;
126 
132  std::shared_ptr<gui::atlas> create_atlas_(material::filter filt) override;
133 
144  std::shared_ptr<gui::font> create_font_(
145  const std::string& font_file,
146  std::size_t size,
147  std::size_t outline,
148  const std::vector<code_point_range>& code_points,
149  char32_t default_code_point) override;
150 
155  void begin_(std::shared_ptr<gui::render_target> target) override;
156 
158  void end_() override;
159 
176  void set_view_(const matrix4f& view_matrix) override;
177 
185  void render_quad_(const sdl::material* mat, const std::array<vertex, 4>& vertex_list);
186 
204  const gui::material* mat, const std::vector<std::array<vertex, 4>>& quad_list) override;
205 
224  const gui::material* mat,
225  const gui::vertex_cache& cache,
226  const matrix4f& model_transform) override;
227 
228 private:
229  SDL_Renderer* renderer_ = nullptr;
230  bool pre_multiplied_alpha_supported_ = false;
231  std::size_t texture_max_size_ = 0u;
232 
233  vector2ui window_dimensions_;
234  matrix4f view_matrix_;
235  matrix4f raw_view_matrix_;
236  matrix4f target_view_matrix_;
237 
238  std::shared_ptr<gui::sdl::render_target> current_target_;
239 };
240 
241 } // namespace lxgui::gui::sdl
242 
243 #endif
A class that holds rendering data.
Abstract type for implementation specific management.
A class that holds rendering data This implementation can contain either a plain color or a real SDL_...
SDL implementation of rendering.
bool is_texture_vertex_color_supported() const override
Checks if the renderer supports setting colors for each vertex of a textured quad.
SDL_Renderer * get_sdl_renderer() const
Returns the SDL renderer implementation.
void render_quad_(const sdl::material *mat, const std::array< vertex, 4 > &vertex_list)
Renders a quad from a material and array of vertices.
void begin_(std::shared_ptr< gui::render_target > target) override
Begins rendering on a particular render target.
renderer(SDL_Renderer *rdr, bool initialise_sdl_image)
Constructor.
void render_cache_(const gui::material *mat, const gui::vertex_cache &cache, const matrix4f &model_transform) override
Renders a vertex cache.
std::shared_ptr< gui::material > create_material(std::shared_ptr< gui::render_target > target, const bounds2f &location) override
Creates a new material from a portion of a render target.
std::shared_ptr< gui::material > create_material_(const std::string &file_name, material::filter filt) override
Creates a new material from a texture file.
void notify_window_resized(const vector2ui &new_dimensions) override
Notifies the renderer that the render window has been resized.
void set_view_(const matrix4f &view_matrix) override
Sets the view matrix to use when rendering (viewport).
std::shared_ptr< gui::material > create_material(const vector2ui &dimensions, const color32 *pixel_data, material::filter filt=material::filter::none) override
Creates a new material from arbitrary pixel data.
std::shared_ptr< gui::atlas > create_atlas_(material::filter filt) override
Creates a new atlas with a given texture filter mode.
std::shared_ptr< gui::render_target > create_render_target(const vector2ui &dimensions, material::filter filt=material::filter::none) override
Creates a new render target.
void render_quads_(const gui::material *mat, const std::vector< std::array< vertex, 4 >> &quad_list) override
Renders a set of quads.
matrix4f get_view() const override
Returns the current view matrix to use when rendering (viewport).
void end_() override
Ends rendering.
std::size_t get_texture_max_size() const override
Returns the maximum texture width/height (in pixels).
bool is_vertex_cache_supported() const override
Checks if the renderer supports vertex caches.
bool is_texture_atlas_supported() const override
Checks if the renderer supports texture atlases natively.
std::string get_name() const override
Returns a human-readable name for this renderer.
std::shared_ptr< gui::font > create_font_(const std::string &font_file, std::size_t size, std::size_t outline, const std::vector< code_point_range > &code_points, char32_t default_code_point) override
Creates a new font.
std::shared_ptr< gui::vertex_cache > create_vertex_cache(gui::vertex_cache::type type) override
Creates a new empty vertex cache.
An object representing cached vertex data on the GPU.
type
The type of vertex data contained in a vertex_cache.
Holds a single color (byte RGBA, 32 bits)
Definition: gui_color.hpp:75
A 4x4 matrix, used for coordinate transformations.
Definition: gui_matrix4.hpp:13