Adding setcliprect command
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
diff --git a/src/render/ps2/SDL_render_ps2.c b/src/render/ps2/SDL_render_ps2.c
index 2ebf274..a7df76b 100644
--- a/src/render/ps2/SDL_render_ps2.c
+++ b/src/render/ps2/SDL_render_ps2.c
@@ -347,6 +347,22 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
}
+static int
+PS2_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
+{
+ PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
+
+ const SDL_Rect *rect = &cmd->data.cliprect.rect;
+
+ if(cmd->data.cliprect.enabled){
+ gsKit_set_scissor(data->gsGlobal, GS_SETREG_SCISSOR(rect->x, rect->y, rect->w, rect->h));
+ } else {
+ gsKit_set_scissor(data->gsGlobal, GS_SCISSOR_RESET);
+ }
+
+ return 0;
+}
+
static int
PS2_RenderSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
@@ -564,6 +580,12 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti
{
while (cmd) {
switch (cmd->command) {
+ case SDL_RENDERCMD_SETVIEWPORT: /* pending to be implemented */
+ break;
+ case SDL_RENDERCMD_SETCLIPRECT: {
+ PS2_RenderSetClipRect(renderer, cmd);
+ break;
+ }
case SDL_RENDERCMD_SETDRAWCOLOR: {
PS2_RenderSetDrawColor(renderer, cmd);
break;
@@ -590,7 +612,7 @@ PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *verti
PS2_RenderGeometry(renderer, vertices, cmd);
break;
}
- default:
+ case SDL_RENDERCMD_NO_OP:
break;
}
cmd = cmd->next;
@@ -602,7 +624,7 @@ static int
PS2_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, void * pixels, int pitch)
{
- return 0;
+ return SDL_Unsupported();
}
static void