12 int width,
int height,
14 : rgba_(rgba), width_(width), height_(height), scale_(scale) {}
17 uint8_t b, uint8_t a) {
20 const size_t base =
static_cast<size_t>((py *
width_ + px) * 4);
21 if (base + 3 >=
rgba_.size())
28 rgba_[base + 3] = 255;
33 const float fa = a / 255.0f;
34 const float fb = 1.0f - fa;
35 rgba_[base + 0] =
static_cast<uint8_t
>(r * fa +
rgba_[base + 0] * fb);
36 rgba_[base + 1] =
static_cast<uint8_t
>(g * fa +
rgba_[base + 1] * fb);
37 rgba_[base + 2] =
static_cast<uint8_t
>(b * fa +
rgba_[base + 2] * fb);
38 rgba_[base + 3] =
static_cast<uint8_t
>(255 * fa +
rgba_[base + 3] * fb);
42 uint8_t r, uint8_t g, uint8_t b,
44 const int x0 =
static_cast<int>(std::floor(x *
scale_));
45 const int y0 =
static_cast<int>(std::floor(y *
scale_));
46 const int x1 =
static_cast<int>(std::ceil((x + w) *
scale_));
47 const int y1 =
static_cast<int>(std::ceil((y + h) *
scale_));
48 for (
int py = y0; py < y1; ++py) {
49 for (
int px = x0; px < x1; ++px) {
56 uint8_t r, uint8_t g, uint8_t b,
58 const int x0 =
static_cast<int>(std::floor(x *
scale_));
59 const int y0 =
static_cast<int>(std::floor(y *
scale_));
60 const int x1 =
static_cast<int>(std::ceil((x + w) *
scale_)) - 1;
61 const int y1 =
static_cast<int>(std::ceil((y + h) *
scale_)) - 1;
64 for (
int px = x0; px <= x1; ++px) {
69 for (
int py = y0 + 1; py < y1; ++py) {
76 uint8_t r, uint8_t g, uint8_t b,
78 int px0 =
static_cast<int>(x0 *
scale_);
79 int py0 =
static_cast<int>(y0 *
scale_);
80 int px1 =
static_cast<int>(x1 *
scale_);
81 int py1 =
static_cast<int>(y1 *
scale_);
84 const int dx = std::abs(px1 - px0);
85 const int dy = std::abs(py1 - py0);
86 const int sx = (px0 < px1) ? 1 : -1;
87 const int sy = (py0 < py1) ? 1 : -1;
92 if (px0 == px1 && py0 == py1)
94 const int e2 = 2 * err;
void DrawRect(float x, float y, float w, float h, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
void BlendPixel(int px, int py, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
void DrawLine(float x0, float y0, float x1, float y1, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
std::vector< uint8_t > & rgba_
void DrawFilledRect(float x, float y, float w, float h, uint8_t r, uint8_t g, uint8_t b, uint8_t a)
HeadlessOverlayRenderer(std::vector< uint8_t > &rgba, int width, int height, float scale=1.0f)