28 enum class LoadType : uint8_t {
57 Sprite(
const uint8_t* bytes,
size_t width,
size_t height);
111 operator
bool() const;
120 std::
string filename;
186 [[deprecated(
"Scale the modelview matrix instead using jngl::Mat3::scale")]]
191 [[deprecated(
"Use new drawClipped(Vec2, Vec2) method instead")]]
void
192 drawClipped(
float xstart,
float xend,
float ystart,
float yend)
const;
230 void setBytes(
const unsigned char*);
240 void setPos(
double x,
double y);
241 template <
class Vect>
void setPos(Vect p) {
246 void setCenter(
double x,
double y);
247 template <
class Vect>
void setCenter(Vect c) {
251 double getLeft()
const;
252 void setLeft(
double x);
254 double getTop()
const;
255 void setTop(
double y);
257 double getRight()
const;
258 void setRight(
double x);
260 double getBottom()
const;
261 void setBottom(
double y);
269 Vec2 getSize()
const;
271 float getWidth()
const;
273 float getHeight()
const;
275 void drawBoundingBox()
const;
281 void loadTexture(
int scaledWidth,
int scaledHeight,
const std::string& filename,
bool halfLoad,
282 unsigned int format,
const unsigned char*
const* rowPointers,
283 const unsigned char* data =
nullptr);
284 Finally LoadPNG(
const std::string& filename, FILE* fp,
bool halfLoad);
286 unsigned int dataOffset;
287 unsigned int headerSize;
290 unsigned short planes;
292 unsigned int compression;
293 unsigned int dataSize;
295 Finally LoadBMP(
const std::string& filename, FILE* fp,
bool halfLoad);
297 Finally LoadWebP(
const std::string& filename, FILE* file,
bool halfLoad);
312template <
class Vect>
void draw(
const std::string& filename, Vect pos) {
313 draw(filename, pos.x, pos.y);
326 float xend,
float ystart,
float yend);
328void setSpriteColor(
unsigned char red,
unsigned char green,
unsigned char blue,
329 unsigned char alpha);
331void setSpriteColor(
unsigned char red,
unsigned char green,
unsigned char blue);
339void setSpriteAlpha(
unsigned char alpha);
341void pushSpriteAlpha(
unsigned char alpha = 255);
343void popSpriteAlpha();
349#if __cplusplus >= 201703L
354Finally drawOnlyIntoAlphaChannel();
Contains jngl::Drawable class.
Contains jngl::Finally class.
Contains jngl::Rgb class.
Contains jngl::Rgba class.
Contains jngl::ShaderProgram class.
Contains jngl::Vec2 class.
Object representing only the Alpha Channel in an RGBA color, 0 meaning invisible, 1 fully visible.
Helper class which calls a function when being destroyed.
Containing the pixel data of an image file.
Object representing a RGB color, new version of jngl::Color (which will be deprecated in the future)
Object representing a RGBA color.
Linked vertex and fragment shaders.
Fragment or vertex GLSL shader.
While this object is alive, don't do any other draw calls. Should never outlive its Sprite.
void draw(Mat3 modelview) const
Draws the Sprite which created this Batch centered using modelview.
Use this class to load a Sprite asynchronously.
~Loader() noexcept
Blocks until the Sprite has been loaded.
Loader(std::string filename) noexcept
Starts a thread to load filename and returns instantly.
std::shared_ptr< Sprite > shared() const
Blocks until the Sprite has been loaded and returns a non-nullptr std::shared_ptr.
Higher-level representation of an image.
void drawClipped(Vec2 start, Vec2 end) const
Draw a cutout of the sprite. drawClipped({0, 0}, {1, 1}) would draw it normally.
void draw() const
Draws the Sprite, centered by default.
Batch batch(const ShaderProgram *shaderProgram=nullptr) const
Allows to draw the Sprite multiple times at different locations in an efficient way.
void drawScaled(float xfactor, float yfactor, const ShaderProgram *shaderProgram=nullptr) const
Draws the image scaled by xfactor and yfactor
std::shared_ptr< Finally > loader
Function which actually loads the sprite.
void drawClipped(float xstart, float xend, float ystart, float yend) const
void drawMesh(const std::vector< Vertex > &vertexes, const ShaderProgram *=nullptr) const
Draws a list of triangles with the sprite's texture on it using the global modelview from jngl::model...
Sprite(const uint8_t *bytes, size_t width, size_t height)
The sprite data is stored as packed RGBA bytes in an array, where the size of the array needs to be c...
static const Shader & vertexShader()
Returns a reference to JNGL's default vertex shader used to draw textures.
void drawMesh(const Mat3 &modelview, const std::vector< Vertex > &vertexes, const ShaderProgram *shaderProgram=nullptr) const
Draws a list of triangles with the sprite's texture on it, ignores the Sprite's position.
Sprite(const ImageData &, double scale, std::optional< std::string_view > filename=std::nullopt)
Creates a Sprite from ImageData and scales it by scale.
Sprite(const std::string &filename, LoadType loadType=LoadType::NORMAL)
void scale(double factor)
Multiplies the global ModelView matrix by a scaling matrix.
Finally load(const std::string &filename)
Starts a thread to load filename and returns a Finally which will join it.
jngl::Mat3 modelview()
Returns a copy of the global ModelView matrix.