jGL
Loading...
Searching...
No Matches
spriteRenderer.h
Go to the documentation of this file.
1#ifndef SPRITERENDERER_H
2#define SPRITERENDERER_H
3
4#include <jGL/sprite.h>
5#include <jGL/shader.h>
6#include <jGL/priorityStore.h>
7
8#include <unordered_map>
9#include <string>
10#include <iterator>
11#include <vector>
12#include <algorithm>
13
14namespace jGL
15{
20 typedef std::string SpriteId;
21
30 class SpriteRenderer : public PriorityStore<Sprite>
31 {
32
33 public:
34
39 static const uint8_t MAX_BATCH_BOUND_TEXTURES = MAX_SPRITE_BATCH_BOUND_TEXTURES;
40
46 SpriteRenderer(size_t sizeHint = 8)
47 : PriorityStore(sizeHint)
48 {}
49
50 Sprite & getSprite(SpriteId id){ return this->operator[](id); }
51
60 virtual void draw
61 (
62 std::shared_ptr<Shader> shader,
63 std::multimap<RenderPriority, SpriteId> ids
64 )
65 {
66 std::vector<std::pair<Info, Sprite>> sprites = vectorise(ids);
67 draw(shader, sprites);
68 }
69
77 virtual void draw(std::multimap<RenderPriority, SpriteId> ids)
78 {
79 std::vector<std::pair<Info, Sprite>> sprites = vectorise(ids);
80 draw(shader, sprites);
81 }
82
88 virtual void draw(std::shared_ptr<Shader> shader)
89 {
91 }
92
97 virtual void draw() { draw(shader, cache); }
98
99 virtual void setProjection(glm::mat4 p) {projection = p;}
100
101 protected:
102
103 virtual void draw
104 (
105 std::shared_ptr<Shader> shader,
106 std::vector<std::pair<Info, Sprite>> & sprites
107 ) = 0;
108
109 std::shared_ptr<Shader> shader;
110
111 glm::mat4 projection = glm::mat4(0.0f);
112
113 };
114}
115
116#endif /* SPRITERENDERER_H */
Store elements in a priority ordering, with identities.
Definition priorityStore.h:32
std::vector< std::pair< Info, Sprite > > vectorise(std::multimap< Priority, ElementId > &oids)
Return a vector from overriding priorities.
Definition priorityStore.h:142
Sprite & operator[](ElementId id)
Definition priorityStore.h:155
std::vector< std::pair< Info, Sprite > > cache
Definition priorityStore.h:169
Renders sprites in batches, with optional render priority.
Definition spriteRenderer.h:31
static const uint8_t MAX_BATCH_BOUND_TEXTURES
Largest number of concurrent textures bound for one batch.
Definition spriteRenderer.h:39
SpriteRenderer(size_t sizeHint=8)
Construct a new SpriteRenderer.
Definition spriteRenderer.h:46
virtual void draw(std::multimap< RenderPriority, SpriteId > ids)
Draw with overriding render priority.
Definition spriteRenderer.h:77
glm::mat4 projection
Definition spriteRenderer.h:111
virtual void draw()
Draw with default shader and priority.
Definition spriteRenderer.h:97
std::shared_ptr< Shader > shader
Definition spriteRenderer.h:109
virtual void setProjection(glm::mat4 p)
Definition spriteRenderer.h:99
virtual void draw(std::shared_ptr< Shader > shader)
Draw with overriding shader.
Definition spriteRenderer.h:88
virtual void draw(std::shared_ptr< Shader > shader, std::vector< std::pair< Info, Sprite > > &sprites)=0
virtual void draw(std::shared_ptr< Shader > shader, std::multimap< RenderPriority, SpriteId > ids)
Draw with overriding render priority and shader.
Definition spriteRenderer.h:61
Sprite & getSprite(SpriteId id)
Definition spriteRenderer.h:50
Definition sprite.h:23
A drawable graphic.
Definition id.h:10
std::string SpriteId
User name for a Shape.
Definition spriteRenderer.h:20