From 90e0e5c29d55d29b76f62eabbcb9f33a52f2438e Mon Sep 17 00:00:00 2001 From: Daniel Santos <47725160+DanielSant0s@users.noreply.github.com> Date: Thu, 30 Jun 2022 19:50:22 -0300 Subject: [PATCH] Add point, line and rect support --- src/render/ps2/SDL_blendfillrect.c | 357 ------------ src/render/ps2/SDL_blendfillrect.h | 33 -- src/render/ps2/SDL_blendline.c | 875 ----------------------------- src/render/ps2/SDL_blendline.h | 33 -- src/render/ps2/SDL_blendpoint.c | 362 ------------ src/render/ps2/SDL_blendpoint.h | 33 -- src/render/ps2/SDL_drawline.c | 213 ------- src/render/ps2/SDL_drawline.h | 33 -- src/render/ps2/SDL_drawpoint.c | 114 ---- src/render/ps2/SDL_drawpoint.h | 33 -- src/render/ps2/SDL_render_ps2.c | 154 ++++- src/video/ps2/SDL_ps2video.c | 2 +- 12 files changed, 134 insertions(+), 2108 deletions(-) delete mode 100644 src/render/ps2/SDL_blendfillrect.c delete mode 100644 src/render/ps2/SDL_blendfillrect.h delete mode 100644 src/render/ps2/SDL_blendline.c delete mode 100644 src/render/ps2/SDL_blendline.h delete mode 100644 src/render/ps2/SDL_blendpoint.c delete mode 100644 src/render/ps2/SDL_blendpoint.h delete mode 100644 src/render/ps2/SDL_drawline.c delete mode 100644 src/render/ps2/SDL_drawline.h delete mode 100644 src/render/ps2/SDL_drawpoint.c delete mode 100644 src/render/ps2/SDL_drawpoint.h diff --git a/src/render/ps2/SDL_blendfillrect.c b/src/render/ps2/SDL_blendfillrect.c deleted file mode 100644 index 41a0b83c1..000000000 --- a/src/render/ps2/SDL_blendfillrect.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED - -#include "SDL_draw.h" -#include "SDL_blendfillrect.h" - - -static int -SDL_BlendFillRect_RGB555(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB555); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB555); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB555); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB555); - break; - default: - FILLRECT(Uint16, DRAW_SETPIXEL_RGB555); - break; - } - return 0; -} - -static int -SDL_BlendFillRect_RGB565(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB565); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB565); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB565); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB565); - break; - default: - FILLRECT(Uint16, DRAW_SETPIXEL_RGB565); - break; - } - return 0; -} - -static int -SDL_BlendFillRect_RGB888(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGB888); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGB888); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB888); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB888); - break; - default: - FILLRECT(Uint32, DRAW_SETPIXEL_RGB888); - break; - } - return 0; -} - -static int -SDL_BlendFillRect_ARGB8888(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint32, DRAW_SETPIXEL_ADD_ARGB8888); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint32, DRAW_SETPIXEL_MOD_ARGB8888); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint32, DRAW_SETPIXEL_MUL_ARGB8888); - break; - default: - FILLRECT(Uint32, DRAW_SETPIXEL_ARGB8888); - break; - } - return 0; -} - -static int -SDL_BlendFillRect_RGB(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - SDL_PixelFormat *fmt = dst->format; - unsigned inva = 0xff - a; - - switch (fmt->BytesPerPixel) { - case 2: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB); - break; - default: - FILLRECT(Uint16, DRAW_SETPIXEL_RGB); - break; - } - return 0; - case 4: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGB); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGB); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB); - break; - default: - FILLRECT(Uint32, DRAW_SETPIXEL_RGB); - break; - } - return 0; - default: - return SDL_Unsupported(); - } -} - -static int -SDL_BlendFillRect_RGBA(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - SDL_PixelFormat *fmt = dst->format; - unsigned inva = 0xff - a; - - switch (fmt->BytesPerPixel) { - case 4: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGBA); - break; - case SDL_BLENDMODE_ADD: - FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGBA); - break; - case SDL_BLENDMODE_MOD: - FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGBA); - break; - case SDL_BLENDMODE_MUL: - FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGBA); - break; - default: - FILLRECT(Uint32, DRAW_SETPIXEL_RGBA); - break; - } - return 0; - default: - return SDL_Unsupported(); - } -} - -int -SDL_BlendFillRect(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - SDL_Rect clipped; - - if (!dst) { - return SDL_InvalidParamError("SDL_BlendFillRect(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_BlendFillRect(): Unsupported surface format"); - } - - /* If 'rect' == NULL, then fill the whole surface */ - if (rect) { - /* Perform clipping */ - if (!SDL_IntersectRect(rect, &dst->clip_rect, &clipped)) { - return 0; - } - rect = &clipped; - } else { - rect = &dst->clip_rect; - } - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(r, a); - g = DRAW_MUL(g, a); - b = DRAW_MUL(b, a); - } - - switch (dst->format->BitsPerPixel) { - case 15: - switch (dst->format->Rmask) { - case 0x7C00: - return SDL_BlendFillRect_RGB555(dst, rect, blendMode, r, g, b, a); - } - break; - case 16: - switch (dst->format->Rmask) { - case 0xF800: - return SDL_BlendFillRect_RGB565(dst, rect, blendMode, r, g, b, a); - } - break; - case 32: - switch (dst->format->Rmask) { - case 0x00FF0000: - if (!dst->format->Amask) { - return SDL_BlendFillRect_RGB888(dst, rect, blendMode, r, g, b, a); - } else { - return SDL_BlendFillRect_ARGB8888(dst, rect, blendMode, r, g, b, a); - } - /* break; -Wunreachable-code-break */ - } - break; - default: - break; - } - - if (!dst->format->Amask) { - return SDL_BlendFillRect_RGB(dst, rect, blendMode, r, g, b, a); - } else { - return SDL_BlendFillRect_RGBA(dst, rect, blendMode, r, g, b, a); - } -} - -int -SDL_BlendFillRects(SDL_Surface * dst, const SDL_Rect * rects, int count, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - SDL_Rect rect; - int i; - int (*func)(SDL_Surface * dst, const SDL_Rect * rect, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; - int status = 0; - - if (!dst) { - return SDL_InvalidParamError("SDL_BlendFillRects(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_BlendFillRects(): Unsupported surface format"); - } - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(r, a); - g = DRAW_MUL(g, a); - b = DRAW_MUL(b, a); - } - - /* FIXME: Does this function pointer slow things down significantly? */ - switch (dst->format->BitsPerPixel) { - case 15: - switch (dst->format->Rmask) { - case 0x7C00: - func = SDL_BlendFillRect_RGB555; - } - break; - case 16: - switch (dst->format->Rmask) { - case 0xF800: - func = SDL_BlendFillRect_RGB565; - } - break; - case 32: - switch (dst->format->Rmask) { - case 0x00FF0000: - if (!dst->format->Amask) { - func = SDL_BlendFillRect_RGB888; - } else { - func = SDL_BlendFillRect_ARGB8888; - } - break; - } - break; - default: - break; - } - - if (!func) { - if (!dst->format->Amask) { - func = SDL_BlendFillRect_RGB; - } else { - func = SDL_BlendFillRect_RGBA; - } - } - - for (i = 0; i < count; ++i) { - /* Perform clipping */ - if (!SDL_IntersectRect(&rects[i], &dst->clip_rect, &rect)) { - continue; - } - status = func(dst, &rect, blendMode, r, g, b, a); - } - return status; -} - -#endif /* SDL_VIDEO_RENDER_SW */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_blendfillrect.h b/src/render/ps2/SDL_blendfillrect.h deleted file mode 100644 index 8ee62b198..000000000 --- a/src/render/ps2/SDL_blendfillrect.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_blendfillrect_h_ -#define SDL_blendfillrect_h_ - -#include "../../SDL_internal.h" - - -extern int SDL_BlendFillRect(SDL_Surface * dst, const SDL_Rect * rect, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); -extern int SDL_BlendFillRects(SDL_Surface * dst, const SDL_Rect * rects, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -#endif /* SDL_blendfillrect_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_blendline.c b/src/render/ps2/SDL_blendline.c deleted file mode 100644 index d85eeb504..000000000 --- a/src/render/ps2/SDL_blendline.c +++ /dev/null @@ -1,875 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED - -#include "SDL_draw.h" -#include "SDL_blendline.h" -#include "SDL_blendpoint.h" - - -static void -SDL_BlendLine_RGB2(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - const SDL_PixelFormat *fmt = dst->format; - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - HLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - VLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - DLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY2_BLEND_RGB, DRAW_SETPIXELXY2_BLEND_RGB, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY2_ADD_RGB, DRAW_SETPIXELXY2_ADD_RGB, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY2_MOD_RGB, DRAW_SETPIXELXY2_MOD_RGB, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY2_MUL_RGB, DRAW_SETPIXELXY2_MUL_RGB, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY2_RGB, DRAW_SETPIXELXY2_BLEND_RGB, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_RGB555(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); - break; - default: - HLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); - break; - default: - VLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end); - break; - default: - DLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_BLEND_RGB555, DRAW_SETPIXELXY_BLEND_RGB555, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_ADD_RGB555, DRAW_SETPIXELXY_ADD_RGB555, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MOD_RGB555, DRAW_SETPIXELXY_MOD_RGB555, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MUL_RGB555, DRAW_SETPIXELXY_MUL_RGB555, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_RGB555, DRAW_SETPIXELXY_BLEND_RGB555, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_RGB565(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); - break; - default: - HLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); - break; - default: - VLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end); - break; - default: - DLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_BLEND_RGB565, DRAW_SETPIXELXY_BLEND_RGB565, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_ADD_RGB565, DRAW_SETPIXELXY_ADD_RGB565, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MOD_RGB565, DRAW_SETPIXELXY_MOD_RGB565, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MUL_RGB565, DRAW_SETPIXELXY_MUL_RGB565, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_RGB565, DRAW_SETPIXELXY_BLEND_RGB565, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_RGB4(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - const SDL_PixelFormat *fmt = dst->format; - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - HLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - VLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end); - break; - default: - DLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_BLEND_RGB, DRAW_SETPIXELXY4_BLEND_RGB, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_ADD_RGB, DRAW_SETPIXELXY4_ADD_RGB, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_MOD_RGB, DRAW_SETPIXELXY4_MOD_RGB, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_MUL_RGB, DRAW_SETPIXELXY4_MUL_RGB, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_RGB, DRAW_SETPIXELXY4_BLEND_RGB, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_RGBA4(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - const SDL_PixelFormat *fmt = dst->format; - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); - break; - default: - HLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); - break; - default: - VLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end); - break; - default: - DLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_BLEND_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_ADD_RGBA, DRAW_SETPIXELXY4_ADD_RGBA, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_MOD_RGBA, DRAW_SETPIXELXY4_MOD_RGBA, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_MUL_RGBA, DRAW_SETPIXELXY4_MUL_RGBA, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY4_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_RGB888(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB888, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint32, DRAW_SETPIXEL_ADD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end); - break; - default: - HLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB888, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint32, DRAW_SETPIXEL_ADD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end); - break; - default: - VLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB888, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint32, DRAW_SETPIXEL_ADD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end); - break; - default: - DLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_BLEND_RGB888, DRAW_SETPIXELXY_BLEND_RGB888, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_ADD_RGB888, DRAW_SETPIXELXY_ADD_RGB888, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MOD_RGB888, DRAW_SETPIXELXY_MOD_RGB888, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MUL_RGB888, DRAW_SETPIXELXY_MUL_RGB888, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_RGB888, DRAW_SETPIXELXY_BLEND_RGB888, - draw_end); - break; - } - } -} - -static void -SDL_BlendLine_ARGB8888(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a, - SDL_bool draw_end) -{ - unsigned r, g, b, a, inva; - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(_r, _a); - g = DRAW_MUL(_g, _a); - b = DRAW_MUL(_b, _a); - a = _a; - } else { - r = _r; - g = _g; - b = _b; - a = _a; - } - inva = (a ^ 0xff); - - if (y1 == y2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - HLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_ADD: - HLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MOD: - HLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MUL: - HLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); - break; - default: - HLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); - break; - } - } else if (x1 == x2) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - VLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_ADD: - VLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MOD: - VLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MUL: - VLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); - break; - default: - VLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); - break; - } - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DLINE(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_ADD: - DLINE(Uint32, DRAW_SETPIXEL_ADD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MOD: - DLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end); - break; - case SDL_BLENDMODE_MUL: - DLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end); - break; - default: - DLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end); - break; - } - } else { - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_BLEND_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888, - draw_end); - break; - case SDL_BLENDMODE_ADD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_ADD_ARGB8888, DRAW_SETPIXELXY_ADD_ARGB8888, - draw_end); - break; - case SDL_BLENDMODE_MOD: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MOD_ARGB8888, DRAW_SETPIXELXY_MOD_ARGB8888, - draw_end); - break; - case SDL_BLENDMODE_MUL: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_MUL_ARGB8888, DRAW_SETPIXELXY_MUL_ARGB8888, - draw_end); - break; - default: - AALINE(x1, y1, x2, y2, - DRAW_SETPIXELXY_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888, - draw_end); - break; - } - } -} - -typedef void (*BlendLineFunc) (SDL_Surface * dst, - int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, - Uint8 r, Uint8 g, Uint8 b, Uint8 a, - SDL_bool draw_end); - -static BlendLineFunc -SDL_CalculateBlendLineFunc(const SDL_PixelFormat * fmt) -{ - switch (fmt->BytesPerPixel) { - case 2: - if (fmt->Rmask == 0x7C00) { - return SDL_BlendLine_RGB555; - } else if (fmt->Rmask == 0xF800) { - return SDL_BlendLine_RGB565; - } else { - return SDL_BlendLine_RGB2; - } - /* break; -Wunreachable-code-break */ - case 4: - if (fmt->Rmask == 0x00FF0000) { - if (fmt->Amask) { - return SDL_BlendLine_ARGB8888; - } else { - return SDL_BlendLine_RGB888; - } - } else { - if (fmt->Amask) { - return SDL_BlendLine_RGBA4; - } else { - return SDL_BlendLine_RGB4; - } - } - } - return NULL; -} - -int -SDL_BlendLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - BlendLineFunc func; - - if (!dst) { - return SDL_InvalidParamError("SDL_BlendLine(): dst"); - } - - func = SDL_CalculateBlendLineFunc(dst->format); - if (!func) { - return SDL_SetError("SDL_BlendLine(): Unsupported surface format"); - } - - /* Perform clipping */ - /* FIXME: We don't actually want to clip, as it may change line slope */ - if (!SDL_IntersectRectAndLine(&dst->clip_rect, &x1, &y1, &x2, &y2)) { - return 0; - } - - func(dst, x1, y1, x2, y2, blendMode, r, g, b, a, SDL_TRUE); - return 0; -} - -int -SDL_BlendLines(SDL_Surface * dst, const SDL_Point * points, int count, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - int i; - int x1, y1; - int x2, y2; - SDL_bool draw_end; - BlendLineFunc func; - - if (!dst) { - return SDL_SetError("SDL_BlendLines(): Passed NULL destination surface"); - } - - func = SDL_CalculateBlendLineFunc(dst->format); - if (!func) { - return SDL_SetError("SDL_BlendLines(): Unsupported surface format"); - } - - for (i = 1; i < count; ++i) { - x1 = points[i-1].x; - y1 = points[i-1].y; - x2 = points[i].x; - y2 = points[i].y; - - /* Perform clipping */ - /* FIXME: We don't actually want to clip, as it may change line slope */ - if (!SDL_IntersectRectAndLine(&dst->clip_rect, &x1, &y1, &x2, &y2)) { - continue; - } - - /* Draw the end if it was clipped */ - draw_end = (x2 != points[i].x || y2 != points[i].y); - - func(dst, x1, y1, x2, y2, blendMode, r, g, b, a, draw_end); - } - if (points[0].x != points[count-1].x || points[0].y != points[count-1].y) { - SDL_BlendPoint(dst, points[count-1].x, points[count-1].y, - blendMode, r, g, b, a); - } - return 0; -} - -#endif /* SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_blendline.h b/src/render/ps2/SDL_blendline.h deleted file mode 100644 index a844110c4..000000000 --- a/src/render/ps2/SDL_blendline.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_blendline_h_ -#define SDL_blendline_h_ - -#include "../../SDL_internal.h" - - -extern int SDL_BlendLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); -extern int SDL_BlendLines(SDL_Surface * dst, const SDL_Point * points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -#endif /* SDL_blendline_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_blendpoint.c b/src/render/ps2/SDL_blendpoint.c deleted file mode 100644 index aae201b7f..000000000 --- a/src/render/ps2/SDL_blendpoint.c +++ /dev/null @@ -1,362 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED - -#include "SDL_draw.h" -#include "SDL_blendpoint.h" - - -static int -SDL_BlendPoint_RGB555(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY_BLEND_RGB555(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY_ADD_RGB555(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY_MOD_RGB555(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY_MUL_RGB555(x, y); - break; - default: - DRAW_SETPIXELXY_RGB555(x, y); - break; - } - return 0; -} - -static int -SDL_BlendPoint_RGB565(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY_BLEND_RGB565(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY_ADD_RGB565(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY_MOD_RGB565(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY_MUL_RGB565(x, y); - break; - default: - DRAW_SETPIXELXY_RGB565(x, y); - break; - } - return 0; -} - -static int -SDL_BlendPoint_RGB888(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY_BLEND_RGB888(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY_ADD_RGB888(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY_MOD_RGB888(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY_MUL_RGB888(x, y); - break; - default: - DRAW_SETPIXELXY_RGB888(x, y); - break; - } - return 0; -} - -static int -SDL_BlendPoint_ARGB8888(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, - Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - unsigned inva = 0xff - a; - - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY_BLEND_ARGB8888(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY_ADD_ARGB8888(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY_MOD_ARGB8888(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY_MUL_ARGB8888(x, y); - break; - default: - DRAW_SETPIXELXY_ARGB8888(x, y); - break; - } - return 0; -} - -static int -SDL_BlendPoint_RGB(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - SDL_PixelFormat *fmt = dst->format; - unsigned inva = 0xff - a; - - switch (fmt->BytesPerPixel) { - case 2: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY2_BLEND_RGB(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY2_ADD_RGB(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY2_MOD_RGB(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY2_MUL_RGB(x, y); - break; - default: - DRAW_SETPIXELXY2_RGB(x, y); - break; - } - return 0; - case 4: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY4_BLEND_RGB(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY4_ADD_RGB(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY4_MOD_RGB(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY4_MUL_RGB(x, y); - break; - default: - DRAW_SETPIXELXY4_RGB(x, y); - break; - } - return 0; - default: - return SDL_Unsupported(); - } -} - -static int -SDL_BlendPoint_RGBA(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - SDL_PixelFormat *fmt = dst->format; - unsigned inva = 0xff - a; - - switch (fmt->BytesPerPixel) { - case 4: - switch (blendMode) { - case SDL_BLENDMODE_BLEND: - DRAW_SETPIXELXY4_BLEND_RGBA(x, y); - break; - case SDL_BLENDMODE_ADD: - DRAW_SETPIXELXY4_ADD_RGBA(x, y); - break; - case SDL_BLENDMODE_MOD: - DRAW_SETPIXELXY4_MOD_RGBA(x, y); - break; - case SDL_BLENDMODE_MUL: - DRAW_SETPIXELXY4_MUL_RGBA(x, y); - break; - default: - DRAW_SETPIXELXY4_RGBA(x, y); - break; - } - return 0; - default: - return SDL_Unsupported(); - } -} - -int -SDL_BlendPoint(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, - Uint8 g, Uint8 b, Uint8 a) -{ - if (!dst) { - return SDL_InvalidParamError("SDL_BlendPoint(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_BlendPoint(): Unsupported surface format"); - } - - /* Perform clipping */ - if (x < dst->clip_rect.x || y < dst->clip_rect.y || - x >= (dst->clip_rect.x + dst->clip_rect.w) || - y >= (dst->clip_rect.y + dst->clip_rect.h)) { - return 0; - } - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(r, a); - g = DRAW_MUL(g, a); - b = DRAW_MUL(b, a); - } - - switch (dst->format->BitsPerPixel) { - case 15: - switch (dst->format->Rmask) { - case 0x7C00: - return SDL_BlendPoint_RGB555(dst, x, y, blendMode, r, g, b, a); - } - break; - case 16: - switch (dst->format->Rmask) { - case 0xF800: - return SDL_BlendPoint_RGB565(dst, x, y, blendMode, r, g, b, a); - } - break; - case 32: - switch (dst->format->Rmask) { - case 0x00FF0000: - if (!dst->format->Amask) { - return SDL_BlendPoint_RGB888(dst, x, y, blendMode, r, g, b, a); - } else { - return SDL_BlendPoint_ARGB8888(dst, x, y, blendMode, r, g, b, a); - } - /* break; -Wunreachable-code-break */ - } - break; - default: - break; - } - - if (!dst->format->Amask) { - return SDL_BlendPoint_RGB(dst, x, y, blendMode, r, g, b, a); - } else { - return SDL_BlendPoint_RGBA(dst, x, y, blendMode, r, g, b, a); - } -} - -int -SDL_BlendPoints(SDL_Surface * dst, const SDL_Point * points, int count, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) -{ - int minx, miny; - int maxx, maxy; - int i; - int x, y; - int (*func)(SDL_Surface * dst, int x, int y, - SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL; - int status = 0; - - if (!dst) { - return SDL_InvalidParamError("SDL_BlendPoints(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_BlendPoints(): Unsupported surface format"); - } - - if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) { - r = DRAW_MUL(r, a); - g = DRAW_MUL(g, a); - b = DRAW_MUL(b, a); - } - - /* FIXME: Does this function pointer slow things down significantly? */ - switch (dst->format->BitsPerPixel) { - case 15: - switch (dst->format->Rmask) { - case 0x7C00: - func = SDL_BlendPoint_RGB555; - break; - } - break; - case 16: - switch (dst->format->Rmask) { - case 0xF800: - func = SDL_BlendPoint_RGB565; - break; - } - break; - case 32: - switch (dst->format->Rmask) { - case 0x00FF0000: - if (!dst->format->Amask) { - func = SDL_BlendPoint_RGB888; - } else { - func = SDL_BlendPoint_ARGB8888; - } - break; - } - break; - default: - break; - } - - if (!func) { - if (!dst->format->Amask) { - func = SDL_BlendPoint_RGB; - } else { - func = SDL_BlendPoint_RGBA; - } - } - - minx = dst->clip_rect.x; - maxx = dst->clip_rect.x + dst->clip_rect.w - 1; - miny = dst->clip_rect.y; - maxy = dst->clip_rect.y + dst->clip_rect.h - 1; - - for (i = 0; i < count; ++i) { - x = points[i].x; - y = points[i].y; - - if (x < minx || x > maxx || y < miny || y > maxy) { - continue; - } - status = func(dst, x, y, blendMode, r, g, b, a); - } - return status; -} - -#endif /* SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_blendpoint.h b/src/render/ps2/SDL_blendpoint.h deleted file mode 100644 index bf6ddec07..000000000 --- a/src/render/ps2/SDL_blendpoint.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_blendpoint_h_ -#define SDL_blendpoint_h_ - -#include "../../SDL_internal.h" - - -extern int SDL_BlendPoint(SDL_Surface * dst, int x, int y, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); -extern int SDL_BlendPoints(SDL_Surface * dst, const SDL_Point * points, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a); - -#endif /* SDL_blendpoint_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_drawline.c b/src/render/ps2/SDL_drawline.c deleted file mode 100644 index e97312fa8..000000000 --- a/src/render/ps2/SDL_drawline.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED - -#include "SDL_draw.h" -#include "SDL_drawline.h" -#include "SDL_drawpoint.h" - -#include <gsKit.h> -#include <dmaKit.h> - -static void -SDL_DrawLine1(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color, - SDL_bool draw_end) -{ - if (y1 == y2) { - int length; - int pitch = (dst->pitch / dst->format->BytesPerPixel); - Uint8 *pixel; - if (x1 <= x2) { - pixel = (Uint8 *)dst->pixels + y1 * pitch + x1; - length = draw_end ? (x2-x1+1) : (x2-x1); - } else { - pixel = (Uint8 *)dst->pixels + y1 * pitch + x2; - if (!draw_end) { - ++pixel; - } - length = draw_end ? (x1-x2+1) : (x1-x2); - } - SDL_memset(pixel, color, length); - } else if (x1 == x2) { - VLINE(Uint8, DRAW_FASTSETPIXEL1, draw_end); - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - DLINE(Uint8, DRAW_FASTSETPIXEL1, draw_end); - } else { - BLINE(x1, y1, x2, y2, DRAW_FASTSETPIXELXY1, draw_end); - } -} - -static void -SDL_DrawLine2(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color, - SDL_bool draw_end) -{ - if (y1 == y2) { - HLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); - } else if (x1 == x2) { - VLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - DLINE(Uint16, DRAW_FASTSETPIXEL2, draw_end); - } else { - Uint8 _r, _g, _b, _a; - const SDL_PixelFormat * fmt = dst->format; - SDL_GetRGBA(color, fmt, &_r, &_g, &_b, &_a); - if (fmt->Rmask == 0x7C00) { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB555, - draw_end); - } else if (fmt->Rmask == 0xF800) { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY_BLEND_RGB565, - draw_end); - } else { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY2, DRAW_SETPIXELXY2_BLEND_RGB, - draw_end); - } - } -} - -static void -SDL_DrawLine4(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color, - SDL_bool draw_end) -{ - if (y1 == y2) { - HLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); - } else if (x1 == x2) { - VLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); - } else if (ABS(x1 - x2) == ABS(y1 - y2)) { - DLINE(Uint32, DRAW_FASTSETPIXEL4, draw_end); - } else { - Uint8 _r, _g, _b, _a; - const SDL_PixelFormat * fmt = dst->format; - SDL_GetRGBA(color, fmt, &_r, &_g, &_b, &_a); - if (fmt->Rmask == 0x00FF0000) { - if (!fmt->Amask) { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY_BLEND_RGB888, - draw_end); - } else { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY_BLEND_ARGB8888, - draw_end); - } - } else { - AALINE(x1, y1, x2, y2, - DRAW_FASTSETPIXELXY4, DRAW_SETPIXELXY4_BLEND_RGB, - draw_end); - } - } -} - -typedef void (*DrawLineFunc) (SDL_Surface * dst, - int x1, int y1, int x2, int y2, - Uint32 color, SDL_bool draw_end); - -static DrawLineFunc -SDL_CalculateDrawLineFunc(const SDL_PixelFormat * fmt) -{ - switch (fmt->BytesPerPixel) { - case 1: - if (fmt->BitsPerPixel < 8) { - break; - } - return SDL_DrawLine1; - case 2: - return SDL_DrawLine2; - case 4: - return SDL_DrawLine4; - } - - return NULL; -} - -int -SDL_DrawLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color) -{ - DrawLineFunc func; - - if (!dst) { - return SDL_InvalidParamError("SDL_DrawLine(): dst"); - } - - func = SDL_CalculateDrawLineFunc(dst->format); - if (!func) { - return SDL_SetError("SDL_DrawLine(): Unsupported surface format"); - } - - /* Perform clipping */ - /* FIXME: We don't actually want to clip, as it may change line slope */ - if (!SDL_IntersectRectAndLine(&dst->clip_rect, &x1, &y1, &x2, &y2)) { - return 0; - } - - func(dst, x1, y1, x2, y2, color, SDL_TRUE); - return 0; -} - -int -SDL_DrawLines(SDL_Surface * dst, const SDL_Point * points, int count, - Uint32 color) -{ - int i; - int x1, y1; - int x2, y2; - SDL_bool draw_end; - DrawLineFunc func; - - if (!dst) { - return SDL_InvalidParamError("SDL_DrawLines(): dst"); - } - - func = SDL_CalculateDrawLineFunc(dst->format); - if (!func) { - return SDL_SetError("SDL_DrawLines(): Unsupported surface format"); - } - - for (i = 1; i < count; ++i) { - x1 = points[i-1].x; - y1 = points[i-1].y; - x2 = points[i].x; - y2 = points[i].y; - - /* Perform clipping */ - /* FIXME: We don't actually want to clip, as it may change line slope */ - if (!SDL_IntersectRectAndLine(&dst->clip_rect, &x1, &y1, &x2, &y2)) { - continue; - } - - /* Draw the end if the whole line is a single point or it was clipped */ - draw_end = ((x1 == x2) && (y1 == y2)) || (x2 != points[i].x || y2 != points[i].y); - - func(dst, x1, y1, x2, y2, color, draw_end); - //gsKit_prim_line(dst->userdata, 10.0, 10.0, 15.0, 15.0, 1, GS_SETREG_RGBAQ(0x20,0,0x80,0x80,0x00)); - } - if (points[0].x != points[count-1].x || points[0].y != points[count-1].y) { - SDL_DrawPoint(dst, points[count-1].x, points[count-1].y, color); - } - return 0; -} - -#endif /* SDL_VIDEO_RENDER_PS2 */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_drawline.h b/src/render/ps2/SDL_drawline.h deleted file mode 100644 index 186119e8e..000000000 --- a/src/render/ps2/SDL_drawline.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_drawline_h_ -#define SDL_drawline_h_ - -#include "../../SDL_internal.h" - - -extern int SDL_DrawLine(SDL_Surface * dst, int x1, int y1, int x2, int y2, Uint32 color); -extern int SDL_DrawLines(SDL_Surface * dst, const SDL_Point * points, int count, Uint32 color); - -#endif /* SDL_drawline_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_drawpoint.c b/src/render/ps2/SDL_drawpoint.c deleted file mode 100644 index 27a43e81c..000000000 --- a/src/render/ps2/SDL_drawpoint.c +++ /dev/null @@ -1,114 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED - -#include "SDL_draw.h" -#include "SDL_drawpoint.h" - - -int -SDL_DrawPoint(SDL_Surface * dst, int x, int y, Uint32 color) -{ - if (!dst) { - return SDL_InvalidParamError("SDL_DrawPoint(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_DrawPoint(): Unsupported surface format"); - } - - /* Perform clipping */ - if (x < dst->clip_rect.x || y < dst->clip_rect.y || - x >= (dst->clip_rect.x + dst->clip_rect.w) || - y >= (dst->clip_rect.y + dst->clip_rect.h)) { - return 0; - } - - switch (dst->format->BytesPerPixel) { - case 1: - DRAW_FASTSETPIXELXY1(x, y); - break; - case 2: - DRAW_FASTSETPIXELXY2(x, y); - break; - case 3: - return SDL_Unsupported(); - case 4: - DRAW_FASTSETPIXELXY4(x, y); - break; - } - return 0; -} - -int -SDL_DrawPoints(SDL_Surface * dst, const SDL_Point * points, int count, - Uint32 color) -{ - int minx, miny; - int maxx, maxy; - int i; - int x, y; - - if (!dst) { - return SDL_InvalidParamError("SDL_DrawPoints(): dst"); - } - - /* This function doesn't work on surfaces < 8 bpp */ - if (dst->format->BitsPerPixel < 8) { - return SDL_SetError("SDL_DrawPoints(): Unsupported surface format"); - } - - minx = dst->clip_rect.x; - maxx = dst->clip_rect.x + dst->clip_rect.w - 1; - miny = dst->clip_rect.y; - maxy = dst->clip_rect.y + dst->clip_rect.h - 1; - - for (i = 0; i < count; ++i) { - x = points[i].x; - y = points[i].y; - - if (x < minx || x > maxx || y < miny || y > maxy) { - continue; - } - - switch (dst->format->BytesPerPixel) { - case 1: - DRAW_FASTSETPIXELXY1(x, y); - break; - case 2: - DRAW_FASTSETPIXELXY2(x, y); - break; - case 3: - return SDL_Unsupported(); - case 4: - DRAW_FASTSETPIXELXY4(x, y); - break; - } - } - return 0; -} - -#endif /* SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_drawpoint.h b/src/render/ps2/SDL_drawpoint.h deleted file mode 100644 index 4c019e014..000000000 --- a/src/render/ps2/SDL_drawpoint.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org> - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef SDL_drawpoint_h_ -#define SDL_drawpoint_h_ - -#include "../../SDL_internal.h" - - -extern int SDL_DrawPoint(SDL_Surface * dst, int x, int y, Uint32 color); -extern int SDL_DrawPoints(SDL_Surface * dst, const SDL_Point * points, int count, Uint32 color); - -#endif /* SDL_drawpoint_h_ */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/render/ps2/SDL_render_ps2.c b/src/render/ps2/SDL_render_ps2.c index fd2c91a67..d6085bdfa 100644 --- a/src/render/ps2/SDL_render_ps2.c +++ b/src/render/ps2/SDL_render_ps2.c @@ -27,11 +27,6 @@ #include "SDL_hints.h" #include "SDL_draw.h" -#include "SDL_blendfillrect.h" -#include "SDL_blendline.h" -#include "SDL_blendpoint.h" -#include "SDL_drawline.h" -#include "SDL_drawpoint.h" #include "SDL_rotate.h" #include "SDL_triangle.h" @@ -92,6 +87,133 @@ static void gsKit_flip(GSGLOBAL *gsGlobal) } +int +PS2_DrawPoints(SDL_Surface * dst, const SDL_Point * points, int count, + Uint32 color) +{ + int minx, miny; + int maxx, maxy; + int i; + int x, y; + + if (!dst) { + return SDL_InvalidParamError("SDL_DrawPoints(): dst"); + } + + /* This function doesn't work on surfaces < 8 bpp */ + if (dst->format->BitsPerPixel < 8) { + return SDL_SetError("SDL_DrawPoints(): Unsupported surface format"); + } + + minx = dst->clip_rect.x; + maxx = dst->clip_rect.x + dst->clip_rect.w - 1; + miny = dst->clip_rect.y; + maxy = dst->clip_rect.y + dst->clip_rect.h - 1; + + for (i = 0; i < count; ++i) { + x = points[i].x; + y = points[i].y; + + if (x < minx || x > maxx || y < miny || y > maxy) { + continue; + } + + gsKit_prim_point(gsGlobal, x, y, 1, color); + } + return 0; +} + +int +PS2_DrawLines(SDL_Surface * dst, const SDL_Point * points, int count, + Uint32 color) +{ + int i; + int x1, y1; + int x2, y2; + + if (!dst) { + return SDL_InvalidParamError("SDL_DrawLines(): dst"); + } + + for (i = 1; i < count; ++i) { + x1 = points[i-1].x; + y1 = points[i-1].y; + x2 = points[i].x; + y2 = points[i].y; + + gsKit_prim_line(gsGlobal, x1, y1, x2, y2, 1, color); + } + if (points[0].x != points[count-1].x || points[0].y != points[count-1].y) { + SDL_DrawPoint(dst, points[count-1].x, points[count-1].y, color); + } + return 0; +} + + +int +PS2_FillRects(SDL_Surface * dst, const SDL_Rect * rects, int count, + Uint32 color) +{ + SDL_Rect clipped; + Uint8 *pixels; + const SDL_Rect* rect; + int i; + + if (!dst) { + return SDL_InvalidParamError("SDL_FillRects(): dst"); + } + + /* Nothing to do */ + if (dst->w == 0 || dst->h == 0) { + return 0; + } + + /* Perform software fill */ + if (!dst->pixels) { + return SDL_SetError("SDL_FillRects(): You must lock the surface"); + } + + if (!rects) { + return SDL_InvalidParamError("SDL_FillRects(): rects"); + } + + /* This function doesn't usually work on surfaces < 8 bpp + * Except: support for 4bits, when filling full size. + */ + if (dst->format->BitsPerPixel < 8) { + if (count == 1) { + const SDL_Rect *r = &rects[0]; + if (r->x == 0 && r->y == 0 && r->w == dst->w && r->w == dst->h) { + if (dst->format->BitsPerPixel == 4) { + Uint8 b = (((Uint8) color << 4) | (Uint8) color); + SDL_memset(dst->pixels, b, dst->h * dst->pitch); + return 1; + } + } + } + return SDL_SetError("SDL_FillRects(): Unsupported surface format"); + } + + + for (i = 0; i < count; ++i) { + rect = &rects[i]; + /* Perform clipping */ + if (!SDL_IntersectRect(rect, &dst->clip_rect, &clipped)) { + continue; + } + rect = &clipped; + + gsKit_prim_sprite(gsGlobal, rect->x, rect->y, rect->w, rect->h, 1, color); + + } + + /* We're done! */ + return 0; +} + + + + static SDL_Surface * PS2_ActivateRenderer(SDL_Renderer * renderer) { @@ -757,6 +879,7 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti const Uint8 b = cmd->data.color.b; const Uint8 a = cmd->data.color.a; gsKit_clear(gsGlobal, GS_SETREG_RGBAQ(r,g,b,a/2,0x00)); + renderer->line_method = SDL_RENDERLINEMETHOD_LINES; drawstate.surface_cliprect_dirty = SDL_TRUE; break; } @@ -780,11 +903,8 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti } } - if (blend == SDL_BLENDMODE_NONE) { - SDL_DrawPoints(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); - } else { - SDL_BlendPoints(surface, verts, count, blend, r, g, b, a); - } + PS2_DrawPoints(surface, verts, count, (r | (g << 8) | (b << 16) | (a << 24))); + break; } @@ -807,12 +927,7 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti } } - if (blend == SDL_BLENDMODE_NONE) { - SDL_DrawLines(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); - } else { - SDL_BlendLines(surface, verts, count, blend, r, g, b, a); - } - + PS2_DrawLines(surface, verts, count, (r | (g << 8) | (b << 16) | (a << 24))); break; } @@ -835,11 +950,8 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti } } - if (blend == SDL_BLENDMODE_NONE) { - SDL_FillRects(surface, verts, count, SDL_MapRGBA(surface->format, r, g, b, a)); - } else { - SDL_BlendFillRects(surface, verts, count, blend, r, g, b, a); - } + PS2_FillRects(surface, verts, count, (r | (g << 8) | (b << 16) | (a << 24))); + break; } diff --git a/src/video/ps2/SDL_ps2video.c b/src/video/ps2/SDL_ps2video.c index ff9613fd8..c0ca5b2a1 100644 --- a/src/video/ps2/SDL_ps2video.c +++ b/src/video/ps2/SDL_ps2video.c @@ -159,7 +159,7 @@ PS2_VideoInit(_THIS) /* Use a fake 32-bpp desktop mode */ SDL_zero(mode); - mode.format = SDL_PIXELFORMAT_RGB888; + mode.format = SDL_PIXELFORMAT_RGBA8888; mode.w = 640; /*if (gsGlobal->Mode == GS_MODE_PAL){ mode.h = 512;