@@ -502,6 +502,34 @@ static int PSP_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL
502
502
return 0 ;
503
503
}
504
504
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
+
505
533
static int PSP_QueueCopy (SDL_Renderer * renderer , SDL_RenderCommand * cmd , SDL_Texture * texture ,
506
534
const SDL_Rect * srcrect , const SDL_FRect * dstrect )
507
535
{
@@ -715,6 +743,23 @@ int PSP_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *c
715
743
return 0 ;
716
744
}
717
745
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
+
718
763
int PSP_RenderPoints (SDL_Renderer * renderer , void * vertices , SDL_RenderCommand * cmd )
719
764
{
720
765
PSP_RenderData * data = (PSP_RenderData * )renderer -> driverdata ;
@@ -806,8 +851,11 @@ static int PSP_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, v
806
851
PSP_RenderLines (renderer , gpumem , cmd );
807
852
break ;
808
853
}
809
- case SDL_RENDERCMD_FILL_RECTS : /* unused */
854
+ case SDL_RENDERCMD_FILL_RECTS :
855
+ {
856
+ PSP_RenderFillRects (renderer , gpumem , cmd );
810
857
break ;
858
+ }
811
859
case SDL_RENDERCMD_COPY :
812
860
{
813
861
PSP_RenderCopy (renderer , gpumem , cmd );
@@ -971,6 +1019,7 @@ static int PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, Uint32
971
1019
renderer -> QueueDrawPoints = PSP_QueueDrawPoints ;
972
1020
renderer -> QueueDrawLines = PSP_QueueDrawPoints ;
973
1021
renderer -> QueueGeometry = PSP_QueueGeometry ;
1022
+ renderer -> QueueFillRects = PSP_QueueFillRects ;
974
1023
renderer -> QueueCopy = PSP_QueueCopy ;
975
1024
renderer -> RunCommandQueue = PSP_RunCommandQueue ;
976
1025
renderer -> RenderReadPixels = PSP_RenderReadPixels ;
0 commit comments