#pragma once #include #include class RSoftwareBackend { public: struct Canvas { uint32_t rshift; uint32_t gshift; uint32_t bshift; uint32_t ashift; int32_t w; int32_t h; uint32_t* pixels; }; struct DestRect { int32_t x0; int32_t y0; int32_t x1; int32_t y1; }; public: RSoftwareBackend(Renderer& renderer); void Draw(); void Clear(Color color); private: void ResizeCanvas(int32_t w, int32_t h); void SortRenderEntities(); void DrawRectangle(REntity_Rectangle& entity); void DrawAlphaBitmap(REntity_AlphaBitmap& entity); void DrawText(REntity_Text& entity); void DrawTextGlyph(Glyph& glyph, Color color, int32_t xscreen, int32_t yscreen); private: Renderer& m_renderer; uint32_t m_gltexture_id{}; Canvas m_canvas; };