43 #ifndef __CU_SPRITE_BATCH_H__
44 #define __CU_SPRITE_BATCH_H__
47 #include "../math/CUMathBase.h"
48 #include "../math/CUMat4.h"
52 #define DEFAULT_CAPACITY 8192
82 std::shared_ptr<SpriteShader> _shader;
84 unsigned int _capacity;
99 unsigned int _vertMax;
101 unsigned int _vertSize;
104 unsigned int _indxMax;
106 unsigned int _indxSize;
109 std::shared_ptr<Texture> _texture;
118 GLenum _blendEquation;
125 unsigned int _vertTotal;
127 unsigned int _callTotal;
135 static std::shared_ptr<Texture> _blank;
139 #pragma mark Constructors
188 bool init(std::shared_ptr<SpriteShader> shader) {
189 return init(DEFAULT_CAPACITY,shader);
209 bool init(
unsigned int capacity);
228 bool init(
unsigned int capacity, std::shared_ptr<SpriteShader> shader);
231 #pragma mark Static Constructors
245 static std::shared_ptr<SpriteBatch>
alloc() {
246 std::shared_ptr<SpriteBatch> result = std::make_shared<SpriteBatch>();
247 return (result->init() ? result :
nullptr);
267 static std::shared_ptr<SpriteBatch>
alloc(
unsigned int capacity) {
268 std::shared_ptr<SpriteBatch> result = std::make_shared<SpriteBatch>();
269 return (result->init(capacity) ? result :
nullptr);
273 #pragma mark Attributes
316 void setShader(
const std::shared_ptr<SpriteShader>& shader);
325 const std::shared_ptr<SpriteShader>&
getShader()
const {
return _shader; }
362 void setTexture(
const std::shared_ptr<Texture>& texture);
373 const std::shared_ptr<Texture>&
getTexture()
const {
return _texture; }
477 #pragma mark Rendering
520 #pragma mark Solid Shapes
555 void fill(
const Rect& rect,
const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset);
680 void fill(
const Poly2& poly,
const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset);
764 void fill(
const std::vector<Vertex2>& vertices,
const std::vector<unsigned short>& indices,
765 const Mat4& transform,
bool tint =
true) {
766 fill(vertices.data(),(
unsigned int)vertices.size(),0,indices.data(),(
unsigned int)indices.size(),0,transform,tint);
789 void fill(
const std::vector<Vertex2>& vertices,
const std::vector<unsigned short>& indices,
790 const Affine2& transform,
bool tint =
true) {
791 fill(vertices.data(),(
unsigned int)vertices.size(),0,indices.data(),(
unsigned int)indices.size(),0,transform,tint);
818 void fill(
const Vertex2* vertices,
unsigned int vsize,
unsigned int voffset,
819 const unsigned short* indices,
unsigned int isize,
unsigned int ioffset,
820 const Mat4& transform,
bool tint =
true);
846 void fill(
const Vertex2* vertices,
unsigned int vsize,
unsigned int voffset,
847 const unsigned short* indices,
unsigned int isize,
unsigned int ioffset,
848 const Affine2& transform,
bool tint =
true);
851 #pragma mark Outlines
1099 void outline(
const std::vector<Vertex2>& vertices,
const std::vector<unsigned short>& indices,
1100 const Mat4& transform,
bool tint =
true) {
1101 outline(vertices.data(),(
unsigned int)vertices.size(),0,indices.data(),(
unsigned int)indices.size(),0,transform,tint);
1124 void outline(
const std::vector<Vertex2>& vertices,
const std::vector<unsigned short>& indices,
1125 const Affine2& transform,
bool tint =
true) {
1126 outline(vertices.data(),(
unsigned int)vertices.size(),0,indices.data(),(
unsigned int)indices.size(),0,transform,tint);
1153 void outline(
const Vertex2* vertices,
unsigned int vsize,
unsigned int voffset,
1154 const unsigned short* indices,
unsigned int isize,
unsigned int ioffset,
1155 const Mat4& transform,
bool tint =
true);
1181 void outline(
const Vertex2* vertices,
unsigned int vsize,
unsigned int voffset,
1182 const unsigned short* indices,
unsigned int isize,
unsigned int ioffset,
1183 const Affine2& transform,
bool tint =
true);
1186 #pragma mark Convenience Methods
1198 void draw(
const std::shared_ptr<Texture>& texture,
const Vec2& position);
1212 void draw(
const std::shared_ptr<Texture>& texture,
Color4 color,
const Vec2& position);
1224 void draw(
const std::shared_ptr<Texture>& texture,
const Rect& bounds) {
1240 void draw(
const std::shared_ptr<Texture>& texture,
Color4 color,
const Rect& bounds) {
1265 void draw(
const std::shared_ptr<Texture>& texture,
1266 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset);
1289 void draw(
const std::shared_ptr<Texture>& texture,
Color4 color,
1290 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset);
1313 void draw(
const std::shared_ptr<Texture>& texture,
const Rect& bounds,
1314 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset) {
1316 fill(bounds, origin, scale, angle, offset);
1342 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset) {
1344 fill(bounds, origin, scale, angle, offset);
1363 void draw(
const std::shared_ptr<Texture>& texture,
const Vec2& origin,
const Mat4& transform);
1382 void draw(
const std::shared_ptr<Texture>& texture,
Color4 color,
const Vec2& origin,
const Mat4& transform);
1401 void draw(
const std::shared_ptr<Texture>& texture,
const Rect& bounds,
1402 const Vec2& origin,
const Mat4& transform) {
1404 fill(bounds, origin, transform);
1426 const Vec2& origin,
const Mat4& transform) {
1428 fill(bounds, origin, transform);
1447 void draw(
const std::shared_ptr<Texture>& texture,
const Vec2& origin,
const Affine2& transform);
1466 void draw(
const std::shared_ptr<Texture>& texture,
Color4 color,
1486 void draw(
const std::shared_ptr<Texture>& texture,
const Rect& bounds,
1489 fill(bounds, origin, transform);
1513 fill(bounds, origin, transform);
1544 void draw(
const std::shared_ptr<Texture>& texture,
const Poly2& poly,
const Vec2& offset) {
1620 void draw(
const std::shared_ptr<Texture>& texture,
const Poly2& poly,
1621 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset) {
1623 fill(poly, origin, scale, angle, offset);
1665 const Vec2& origin,
const Vec2& scale,
float angle,
const Vec2& offset) {
1667 fill(poly, origin, scale, angle, offset);
1703 void draw(
const std::shared_ptr<Texture>& texture,
const Poly2& poly,
1704 const Vec2& origin,
const Mat4& transform) {
1706 fill(poly, origin, transform);
1744 const Vec2& origin,
const Mat4& transform) {
1746 fill(poly, origin, transform);
1782 void draw(
const std::shared_ptr<Texture>& texture,
const Poly2& poly,
1785 fill(poly, origin, transform);
1825 fill(poly, origin, transform);
1829 #pragma mark Internal Helpers
1839 void setCommand(GLenum command);
1849 GLenum getCommand()
const {
return _command; }
1861 bool validateBuffer(GLuint buffer,
const char* message);
1874 unsigned int prepare(
const Rect& rect,
bool solid);
1887 unsigned int prepare(
const Poly2& poly,
bool solid);
1906 unsigned int prepare(
const Vertex2* vertices,
unsigned int vsize,
unsigned int voffset,
1907 const unsigned short* indices,
unsigned int isize,
unsigned int ioffset,
1908 bool solid,
bool tint =
true);
void setBlendFunc(GLenum srcFactor, GLenum dstFactor)
void setColor(Color4 color)
Definition: CUSpriteBatch.h:337
Definition: CUSpriteBatch.h:78
Definition: CUPoly2.h:115
void fill(const std::vector< Vertex2 > &vertices, const std::vector< unsigned short > &indices, const Mat4 &transform, bool tint=true)
Definition: CUSpriteBatch.h:764
GLenum getSourceBlendFactor() const
Definition: CUSpriteBatch.h:436
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Rect &bounds, const Vec2 &origin, const Mat4 &transform)
Definition: CUSpriteBatch.h:1425
Definition: CUAffine2.h:63
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Rect &bounds)
Definition: CUSpriteBatch.h:1240
unsigned int getVerticesDrawn() const
Definition: CUSpriteBatch.h:298
bool init(std::shared_ptr< SpriteShader > shader)
Definition: CUSpriteBatch.h:188
static std::shared_ptr< SpriteBatch > alloc()
Definition: CUSpriteBatch.h:245
static std::shared_ptr< SpriteBatch > alloc(unsigned int capacity)
Definition: CUSpriteBatch.h:267
static const std::shared_ptr< Texture > & getBlankTexture()
void draw(const std::shared_ptr< Texture > &texture, const Rect &bounds, const Vec2 &origin, const Affine2 &transform)
Definition: CUSpriteBatch.h:1486
unsigned int getCallsMade() const
Definition: CUSpriteBatch.h:307
void draw(const std::shared_ptr< Texture > &texture, const Poly2 &poly, const Vec2 &origin, const Mat4 &transform)
Definition: CUSpriteBatch.h:1703
static const Color4 WHITE
Definition: CUColor4.h:1126
void begin(const Mat4 &perspective)
Definition: CUSpriteBatch.h:498
bool isReady() const
Definition: CUSpriteBatch.h:279
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Rect &bounds, const Vec2 &origin, const Affine2 &transform)
Definition: CUSpriteBatch.h:1510
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Rect &bounds, const Vec2 &origin, const Vec2 &scale, float angle, const Vec2 &offset)
Definition: CUSpriteBatch.h:1341
void fill(const Rect &rect)
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Poly2 &poly, const Vec2 &offset)
Definition: CUSpriteBatch.h:1578
void setShader(const std::shared_ptr< SpriteShader > &shader)
const std::shared_ptr< Texture > & getTexture() const
Definition: CUSpriteBatch.h:373
Definition: CUVertex.h:46
Color4 getColor() const
Definition: CUSpriteBatch.h:347
void fill(const std::vector< Vertex2 > &vertices, const std::vector< unsigned short > &indices, const Affine2 &transform, bool tint=true)
Definition: CUSpriteBatch.h:789
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Poly2 &poly, const Vec2 &origin, const Mat4 &transform)
Definition: CUSpriteBatch.h:1743
void draw(const std::shared_ptr< Texture > &texture, const Rect &bounds, const Vec2 &origin, const Vec2 &scale, float angle, const Vec2 &offset)
Definition: CUSpriteBatch.h:1313
void draw(const std::shared_ptr< Texture > &texture, const Rect &bounds, const Vec2 &origin, const Mat4 &transform)
Definition: CUSpriteBatch.h:1401
void setTexture(const std::shared_ptr< Texture > &texture)
const Mat4 & getPerspective() const
Definition: CUSpriteBatch.h:406
void outline(const Rect &rect)
bool isDrawing() const
Definition: CUSpriteBatch.h:289
void setBlendEquation(GLenum equation)
void outline(const std::vector< Vertex2 > &vertices, const std::vector< unsigned short > &indices, const Affine2 &transform, bool tint=true)
Definition: CUSpriteBatch.h:1124
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Poly2 &poly, const Vec2 &origin, const Vec2 &scale, float angle, const Vec2 &offset)
Definition: CUSpriteBatch.h:1664
~SpriteBatch()
Definition: CUSpriteBatch.h:151
void draw(const std::shared_ptr< Texture > &texture, const Rect &bounds)
Definition: CUSpriteBatch.h:1224
Definition: CUColor4.h:1104
void draw(const std::shared_ptr< Texture > &texture, Color4 color, const Poly2 &poly, const Vec2 &origin, const Affine2 &transform)
Definition: CUSpriteBatch.h:1822
void draw(const std::shared_ptr< Texture > &texture, const Poly2 &poly, const Vec2 &origin, const Vec2 &scale, float angle, const Vec2 &offset)
Definition: CUSpriteBatch.h:1620
GLenum getBlendEquation() const
Definition: CUSpriteBatch.h:474
void outline(const std::vector< Vertex2 > &vertices, const std::vector< unsigned short > &indices, const Mat4 &transform, bool tint=true)
Definition: CUSpriteBatch.h:1099
Definition: CUAnimationNode.h:52
const std::shared_ptr< SpriteShader > & getShader() const
Definition: CUSpriteBatch.h:325
void setPerspective(const Mat4 &perspective)
void draw(const std::shared_ptr< Texture > &texture, const Vec2 &position)
GLenum getDestinationBlendFactor() const
Definition: CUSpriteBatch.h:447
void draw(const std::shared_ptr< Texture > &texture, const Poly2 &poly, const Vec2 &origin, const Affine2 &transform)
Definition: CUSpriteBatch.h:1782
void draw(const std::shared_ptr< Texture > &texture, const Poly2 &poly, const Vec2 &offset)
Definition: CUSpriteBatch.h:1544