#pragma once #include "TZR_types.h" #include #include /* All draw calls should happen between TZR_DrawBegin and TZR_DrawEnd. * Return -1 on error. */ [[nodiscard]] int TZR_DrawBegin(void); /* Return -1 on error. */ [[nodiscard]] int TZR_DrawEnd(void); /* Return -1 on error. */ #define TZR_DrawSetColor(...) _TZR_DrawSetColor(&(const TZR_Color){ \ .r=-1.0f, .g=-1.0f, .b=-1.0f, .a=-1.0f, ._=0, __VA_ARGS__ }) [[nodiscard]] int _TZR_DrawSetColor(const TZR_Color *color); /* Return -1 on error. */ [[nodiscard]] int TZR_DrawClear(void); /* Return -1 on error. Draw point on `x`;`y` in the framebuffer. */ [[nodiscard]] int TZR_DrawPoint(int x, int y); /* Return -1 on error. Draw line between `x0`;`y0` and `x1`;`y1` in the * framebuffer. */ [[nodiscard]] int TZR_DrawLine(int x0, int y0, int x1, int y1); /* Return -1 on error. Draw rectangle at `x`;`y` position of size `w`x`h` in the * framebuffer. */ [[nodiscard]] int TZR_DrawRectangle(bool fill, int x, int y, int w, int h); /* Return -1 on error. Draw texture ressource `id` at `x`;`y` position of * the framebuffer. */ #define TZR_DrawImage(...) _TZR_DrawImage(&(const TZR_DrawImageArgs){ \ .x=0, .y=0, .ix=0, .iy=0, .w=INT_MIN, .h=INT_MIN, .r=0.0f, .sx=1.0f, \ .sy=1.0f, .center=false, ._=0, __VA_ARGS__ }) [[nodiscard]] int _TZR_DrawImage(const TZR_DrawImageArgs *args);