Skip to content

Commit 72cb839

Browse files
committed
Inline blendmode
1 parent 3ac816a commit 72cb839

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

src/render/psp/SDL_render_psp.c

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,49 @@ static inline void prepareTextureForDownload(SDL_Texture *texture)
405405
sceKernelDcacheInvalidateRange(psp_tex->data, psp_tex->size);
406406
}
407407

408+
static inline void PSP_SetBlendMode(PSP_RenderData *data, PSP_BlendInfo blendInfo)
409+
{
410+
// Update the blend mode if necessary
411+
if (data->blendInfo.mode != blendInfo.mode) {
412+
switch (blendInfo.mode) {
413+
case SDL_BLENDMODE_NONE:
414+
sceGuShadeModel(GU_SMOOTH);
415+
sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA);
416+
sceGuDisable(GU_BLEND);
417+
break;
418+
case SDL_BLENDMODE_BLEND:
419+
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
420+
sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
421+
sceGuEnable(GU_BLEND);
422+
break;
423+
case SDL_BLENDMODE_ADD:
424+
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
425+
sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_FIX, 0, 0x00FFFFFF);
426+
sceGuEnable(GU_BLEND);
427+
break;
428+
case SDL_BLENDMODE_MOD:
429+
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
430+
sceGuBlendFunc(GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0);
431+
sceGuEnable(GU_BLEND);
432+
break;
433+
case SDL_BLENDMODE_MUL:
434+
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
435+
/* FIXME SDL_BLENDMODE_MUL is simplified, and dstA is in fact un-changed.*/
436+
sceGuBlendFunc(GU_ADD, GU_DST_COLOR, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
437+
sceGuEnable(GU_BLEND);
438+
break;
439+
}
440+
441+
data->blendInfo.mode = blendInfo.mode;
442+
}
443+
444+
// Update shade model if needed
445+
if (data->blendInfo.shade != blendInfo.shade) {
446+
sceGuShadeModel(blendInfo.shade);
447+
data->blendInfo.shade = blendInfo.shade;
448+
}
449+
}
450+
408451
static void PSP_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event)
409452
{
410453
}
@@ -710,7 +753,7 @@ static int PSP_QueueCopy(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Tex
710753
return 0;
711754
}
712755

713-
static int PSP_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
756+
static inline int PSP_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
714757
{
715758
const SDL_Rect *viewport = &cmd->data.viewport.rect;
716759

@@ -721,49 +764,6 @@ static int PSP_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
721764
return 0;
722765
}
723766

724-
static void PSP_SetBlendMode(PSP_RenderData *data, PSP_BlendInfo blendInfo)
725-
{
726-
// Update the blend mode if necessary
727-
if (data->blendInfo.mode != blendInfo.mode) {
728-
switch (blendInfo.mode) {
729-
case SDL_BLENDMODE_NONE:
730-
sceGuShadeModel(GU_SMOOTH);
731-
sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA);
732-
sceGuDisable(GU_BLEND);
733-
break;
734-
case SDL_BLENDMODE_BLEND:
735-
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
736-
sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
737-
sceGuEnable(GU_BLEND);
738-
break;
739-
case SDL_BLENDMODE_ADD:
740-
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
741-
sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_FIX, 0, 0x00FFFFFF);
742-
sceGuEnable(GU_BLEND);
743-
break;
744-
case SDL_BLENDMODE_MOD:
745-
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
746-
sceGuBlendFunc(GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0);
747-
sceGuEnable(GU_BLEND);
748-
break;
749-
case SDL_BLENDMODE_MUL:
750-
sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA);
751-
/* FIXME SDL_BLENDMODE_MUL is simplified, and dstA is in fact un-changed.*/
752-
sceGuBlendFunc(GU_ADD, GU_DST_COLOR, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
753-
sceGuEnable(GU_BLEND);
754-
break;
755-
}
756-
757-
data->blendInfo.mode = blendInfo.mode;
758-
}
759-
760-
// Update shade model if needed
761-
if (data->blendInfo.shade != blendInfo.shade) {
762-
sceGuShadeModel(blendInfo.shade);
763-
data->blendInfo.shade = blendInfo.shade;
764-
}
765-
}
766-
767767
static inline int PSP_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
768768
{
769769
const SDL_Rect *rect = &cmd->data.cliprect.rect;

0 commit comments

Comments
 (0)