Euphoria
spriterender.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <memory>
4 
5 #include "base/vec2.h"
6 #include "base/rgb.h"
7 #include "base/angle.h"
8 #include "base/rect.h"
9 
10 #include "render/shaderuniform.h"
11 #include "render/shader.h"
12 #include "render/texture.h"
13 
14 namespace eu::render
15 {
16  struct ScalableSprite;
17  struct Buffer2d;
18 
19 
20  struct DrawData
21  {
25 
26  DrawData();
27 
28  DrawData& set_rotation(const Angle& r);
29  DrawData& set_scale(const Scale2f& s);
30  DrawData& set_tint(const Rgba& t);
31  };
32 
33 
35  {
38 
39  SpriteRenderer(const SpriteRenderer& other) = delete;
40  void operator=(const SpriteRenderer&) = delete;
41  SpriteRenderer(SpriteRenderer&& other) = delete;
42  void operator=(SpriteRenderer&&) = delete;
43 
44  void
45  draw_rect
46  (
47  const Texture2& texture,
48  const Rectf& sprite_area,
49  const Rectf& texture_region,
50  const Angle& rotation_angle,
51  const Scale2f& rotation_anchor,
52  const Rgba& tint_color
53  );
54 
55  // position is center
56  void
58  (
59  const Texture2& texture,
60  const Rectf& position,
61  const DrawData& data = DrawData{}
62  );
63 
64  // bottom left
65  void
67  (
68  const ScalableSprite& ninepatch,
69  const Rectf& rect,
70  const Rgba& tint
71  );
72 
73  private:
74  ShaderProgram* sprite_shader;
75  ShaderUniform color_uniform;
76  ShaderUniform model_uniform;
77  ShaderUniform region_uniform;
78  std::unique_ptr<Buffer2d> single_quad_buffer;
79 
80  void
81  init_render_data();
82  };
83 
84 }
Rgba tint_color(const Rgba &c, const Rgb &tint)
Definition: image_draw.cc:481
Definition: rect.h:27
Definition: rgb.h:143
DrawData & set_scale(const Scale2f &s)
Definition: spriterender.cc:35
DrawData & set_rotation(const Angle &r)
Definition: spriterender.cc:27
DrawData & set_tint(const Rgba &t)
Definition: spriterender.cc:43
void operator=(SpriteRenderer &&)=delete
SpriteRenderer(render::ShaderProgram *shader)
Definition: spriterender.cc:53
void draw_ninepatch(const ScalableSprite &ninepatch, const Rectf &rect, const Rgba &tint)
void operator=(const SpriteRenderer &)=delete
void draw_sprite(const Texture2 &texture, const Rectf &position, const DrawData &data=DrawData{})
void draw_rect(const Texture2 &texture, const Rectf &sprite_area, const Rectf &texture_region, const Angle &rotation_angle, const Scale2f &rotation_anchor, const Rgba &tint_color)
Definition: spriterender.cc:71
SpriteRenderer(const SpriteRenderer &other)=delete
SpriteRenderer(SpriteRenderer &&other)=delete