jGL
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
jGL::SpriteRenderer Class Referenceabstract

Renders sprites in batches, with optional render priority. More...

#include <spriteRenderer.h>

Inheritance diagram for jGL::SpriteRenderer:
Inheritance graph
[legend]
Collaboration diagram for jGL::SpriteRenderer:
Collaboration graph
[legend]

Public Member Functions

 SpriteRenderer (size_t sizeHint=8)
 Construct a new SpriteRenderer.
 
SpritegetSprite (SpriteId id)
 
virtual void draw (std::shared_ptr< Shader > shader, std::multimap< RenderPriority, SpriteId > ids)
 Draw with overriding render priority and shader.
 
virtual void draw (std::multimap< RenderPriority, SpriteId > ids)
 Draw with overriding render priority.
 
virtual void draw (std::shared_ptr< Shader > shader)
 Draw with overriding shader.
 
virtual void draw ()
 Draw with default shader and priority.
 
virtual void setProjection (glm::mat4 p)
 
- Public Member Functions inherited from PriorityStore< Sprite >
 PriorityStore (uint64_t sizeHint=8)
 Construct a new Priority Store with a reserved size.
 
virtual void clear ()
 
virtual void add (Sprite s, ElementId id, Priority priority=0)
 Insert an element.
 
virtual void remove (ElementId id)
 
void updatePriority (ElementId id, Priority newPriority)
 
std::vector< std::pair< Info, Sprite > > vectorise (std::multimap< Priority, ElementId > &oids)
 Return a vector from overriding priorities.
 
Sprite & operator[] (ElementId id)
 
std::vector< std::pair< Info, Sprite > >::const_iterator begin () const
 
std::vector< std::pair< Info, Sprite > >::const_iterator end () const
 
uint64_t size () const
 
bool hasId (const ElementId id) const
 

Static Public Attributes

static const uint8_t MAX_BATCH_BOUND_TEXTURES = MAX_SPRITE_BATCH_BOUND_TEXTURES
 Largest number of concurrent textures bound for one batch.
 

Protected Member Functions

virtual void draw (std::shared_ptr< Shader > shader, std::vector< std::pair< Info, Sprite > > &sprites)=0
 

Protected Attributes

std::shared_ptr< Shadershader
 
glm::mat4 projection = glm::mat4(0.0f)
 
- Protected Attributes inherited from PriorityStore< Sprite >
std::unordered_map< ElementId, std::pair< Sprite, Priority > > idToElement
 
std::vector< std::pair< Info, Sprite > > cache
 

Detailed Description

Renders sprites in batches, with optional render priority.

Remarks
Currently there are 4 texture slots loaded at once.
Keeping to 4 textures is most efficient (1 draw call), atlas textures are useful for this.
RenderPriority of Sprites may lead to inefficient batching across textures. Try to keep similar RenderPriority within the same texture/ group of 4 textures.

Constructor & Destructor Documentation

◆ SpriteRenderer()

jGL::SpriteRenderer::SpriteRenderer ( size_t  sizeHint = 8)
inline

Construct a new SpriteRenderer.

Parameters
sizeHintReserve some memory for this many Sprites.

Member Function Documentation

◆ draw() [1/5]

virtual void jGL::SpriteRenderer::draw ( )
inlinevirtual

Draw with default shader and priority.

◆ draw() [2/5]

virtual void jGL::SpriteRenderer::draw ( std::multimap< RenderPriority, SpriteId ids)
inlinevirtual

Draw with overriding render priority.

Parameters
idsRender priorities for the Sprites.
Remarks
Overriding priorities with many sprites performs poorly on cpu. Consider SpritRenderer::updatePriority to cache priority.

◆ draw() [3/5]

virtual void jGL::SpriteRenderer::draw ( std::shared_ptr< Shader shader)
inlinevirtual

Draw with overriding shader.

Parameters
shaderA Shader to draw all the Sprites with.

◆ draw() [4/5]

virtual void jGL::SpriteRenderer::draw ( std::shared_ptr< Shader shader,
std::multimap< RenderPriority, SpriteId ids 
)
inlinevirtual

Draw with overriding render priority and shader.

Parameters
shaderAn OpenGL Shader to draw all the Sprites with.
idsRender priorities for the Sprites.
Remarks
Overriding priorities with many sprites performs poorly on cpu. Consider SpriteRenderer::updatePriority to cache priority.

◆ draw() [5/5]

virtual void jGL::SpriteRenderer::draw ( std::shared_ptr< Shader shader,
std::vector< std::pair< Info, Sprite > > &  sprites 
)
protectedpure virtual

◆ getSprite()

Sprite & jGL::SpriteRenderer::getSprite ( SpriteId  id)
inline

◆ setProjection()

virtual void jGL::SpriteRenderer::setProjection ( glm::mat4  p)
inlinevirtual

Member Data Documentation

◆ MAX_BATCH_BOUND_TEXTURES

const uint8_t jGL::SpriteRenderer::MAX_BATCH_BOUND_TEXTURES = MAX_SPRITE_BATCH_BOUND_TEXTURES
static

Largest number of concurrent textures bound for one batch.

◆ projection

glm::mat4 jGL::SpriteRenderer::projection = glm::mat4(0.0f)
protected

◆ shader

std::shared_ptr<Shader> jGL::SpriteRenderer::shader
protected

The documentation for this class was generated from the following file: