This is supposed to multiply the source texels with the destination pixels, right (Dest*Source+0*Dest)? It does just that when I use the Windows/GL equivalent so I shouldn't be completely off.
Jesse wrote:I've writing a small application for both Windows/GL and the PSP, but there is one blending-mode that doens't seem to work the way I intend it.
This is supposed to multiply the source texels with the destination pixels, right (Dest*Source+0*Dest)? It does just that when I use the Windows/GL equivalent so I shouldn't be completely off.
Your problem is that "GU_ZERO" is not a proper blending function. You should use GU_FIX instead (with fix parameter 0. "GU_ONE" would have fix parameter 0xffffffff).
Both of these work as you intented (give you the multiply alpha you want):
sceGuBlendFunc(GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0);
sceGuBlendFunc(GU_ADD, GU_DST_COLOR, GU_FIX, 0, 0);
And this gives you basic additive alpha (src_color * 1 + dst_color * 1):
sceGuBlendFunc(GU_ADD, GU_FIX, GU_FIX, 0xffffff, 0xffffff);