mirror of
https://github.com/raysan5/raylib.git
synced 2025-12-06 14:23:12 +00:00
feat: Optimize ImageClearBackground and ImageDrawRectangleRec with doubling strategy (#5363)
This commit is contained in:
parent
3f92c396a0
commit
e2233acdb0
@ -3341,11 +3341,14 @@ void ImageClearBackground(Image *dst, Color color)
|
|||||||
|
|
||||||
unsigned char *pSrcPixel = (unsigned char *)dst->data;
|
unsigned char *pSrcPixel = (unsigned char *)dst->data;
|
||||||
int bytesPerPixel = GetPixelDataSize(1, 1, dst->format);
|
int bytesPerPixel = GetPixelDataSize(1, 1, dst->format);
|
||||||
|
int totalPixels = dst->width * dst->height;
|
||||||
|
|
||||||
// Repeat the first pixel data throughout the image
|
// Repeat the first pixel data throughout the image,
|
||||||
for (int i = 1; i < dst->width*dst->height; i++)
|
// doubling the pixels copied on each iteration
|
||||||
|
for (int i = 1; i < totalPixels; i *= 2)
|
||||||
{
|
{
|
||||||
memcpy(pSrcPixel + i*bytesPerPixel, pSrcPixel, bytesPerPixel);
|
int pixelsToCopy = MIN(i, totalPixels - i);
|
||||||
|
memcpy(pSrcPixel + i * bytesPerPixel, pSrcPixel, pixelsToCopy * bytesPerPixel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3724,9 +3727,10 @@ void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color)
|
|||||||
unsigned char *pSrcPixel = (unsigned char *)dst->data + bytesOffset;
|
unsigned char *pSrcPixel = (unsigned char *)dst->data + bytesOffset;
|
||||||
|
|
||||||
// Repeat the first pixel data throughout the row
|
// Repeat the first pixel data throughout the row
|
||||||
for (int x = 1; x < (int)rec.width; x++)
|
for (int x = 1; x < (int)rec.width; x *= 2)
|
||||||
{
|
{
|
||||||
memcpy(pSrcPixel + x*bytesPerPixel, pSrcPixel, bytesPerPixel);
|
int pixelsToCopy = MIN(x, (int)rec.width - x);
|
||||||
|
memcpy(pSrcPixel + x*bytesPerPixel, pSrcPixel, pixelsToCopy * bytesPerPixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Repeat the first row data for all other rows
|
// Repeat the first row data for all other rows
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user