Skip to content

Commit a2b5203

Browse files
committed
Implement FIllRects
1 parent b128bb6 commit a2b5203

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/render/psp/SDL_render_psp.c

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,34 @@ static int PSP_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL
502502
return 0;
503503
}
504504

505+
static int PSP_QueueFillRects(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FRect *rects, int count)
506+
{
507+
VertV *verts = (VertV *)SDL_AllocateRenderVertices(renderer, count * 2 * sizeof(VertV), 4, &cmd->data.draw.first);
508+
int i;
509+
510+
if (verts == NULL) {
511+
return -1;
512+
}
513+
514+
cmd->data.draw.count = count;
515+
for (i = 0; i < count; i++, rects++) {
516+
verts->x = rects->x;
517+
verts->y = rects->y;
518+
verts->z = 0.0f;
519+
verts++;
520+
521+
verts->x = rects->x + rects->w;
522+
verts->y = rects->y + rects->h;
523+
verts->z = 0.0f;
524+
verts++;
525+
}
526+
527+
// Update the vertex count
528+
cmd->data.draw.count = count * 2;
529+
530+
return 0;
531+
}
532+
505533
static int PSP_QueueCopy(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
506534
const SDL_Rect *srcrect, const SDL_FRect *dstrect)
507535
{
@@ -715,6 +743,23 @@ int PSP_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *c
715743
return 0;
716744
}
717745

746+
int PSP_RenderFillRects(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
747+
{
748+
PSP_RenderData *data = (PSP_RenderData *)renderer->driverdata;
749+
const size_t count = cmd->data.draw.count;
750+
const VertV *verts = (VertV *)(vertices + cmd->data.draw.first);
751+
const PSP_BlendInfo blendInfo = {
752+
.mode = cmd->data.draw.blend,
753+
.shade = GU_FLAT
754+
};
755+
756+
PSP_SetBlendMode(data, blendInfo);
757+
sceGuDrawArray(GU_SPRITES, GU_VERTEX_32BITF | GU_TRANSFORM_2D, count, 0, verts);
758+
759+
return 0;
760+
}
761+
762+
718763
int PSP_RenderPoints(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
719764
{
720765
PSP_RenderData *data = (PSP_RenderData *)renderer->driverdata;
@@ -806,8 +851,11 @@ static int PSP_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, v
806851
PSP_RenderLines(renderer, gpumem, cmd);
807852
break;
808853
}
809-
case SDL_RENDERCMD_FILL_RECTS: /* unused */
854+
case SDL_RENDERCMD_FILL_RECTS:
855+
{
856+
PSP_RenderFillRects(renderer, gpumem, cmd);
810857
break;
858+
}
811859
case SDL_RENDERCMD_COPY:
812860
{
813861
PSP_RenderCopy(renderer, gpumem, cmd);
@@ -971,6 +1019,7 @@ static int PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32
9711019
renderer->QueueDrawPoints = PSP_QueueDrawPoints;
9721020
renderer->QueueDrawLines = PSP_QueueDrawPoints;
9731021
renderer->QueueGeometry = PSP_QueueGeometry;
1022+
renderer->QueueFillRects = PSP_QueueFillRects;
9741023
renderer->QueueCopy = PSP_QueueCopy;
9751024
renderer->RunCommandQueue = PSP_RunCommandQueue;
9761025
renderer->RenderReadPixels = PSP_RenderReadPixels;

0 commit comments

Comments
 (0)