|
I have this working on 68k Big Endian Amiga
Add this :
static inline nsfb_colour_t pixel_bgra_to_colour_rgba(UNUSED nsfb_t *nsfb, uint32_t pixel)
{
return (((pixel & 0xFF000000) >> 16 ) |
((pixel & 0xFF0000)) |
((pixel & 0xFF00) << 16));
}
static bool readrect(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t *buffer)
{
PLOT_TYPE *pvideo;
int xloop, yloop;
int width;
if (!nsfb_plot_clip_ctx(nsfb, rect)) {
return true;
}
width = rect->x1 - rect->x0;
pvideo = get_xy_loc(nsfb, rect->x0, rect->y0);
for (yloop = rect->y0; yloop < rect->y1; yloop += 1) {
for (xloop = 0; xloop < width; xloop++) {
#ifdef __BIG_ENDIAN_BGRA__
if (Bpp == 32)
*buffer = pixel_bgra_to_colour_rgba(nsfb, *(pvideo + xloop));
else if (Bpp == 16)
*buffer = pixel_be_to_colour(nsfb, *(pvideo + xloop));
else
*buffer = pixel_to_colour(nsfb, *(pvideo + xloop));
#else
*buffer = pixel_to_colour(nsfb, *(pvideo + xloop));
#endif
buffer++;
}
pvideo += PLOT_LINELEN(nsfb->linelen);
}
return true;
} |
|