Add C3D_ColorLogicOp and C3D_FragOpMode
This commit is contained in:
parent
8992e6fd18
commit
497a4ff9b7
@ -9,3 +9,5 @@ void C3D_BlendingColor(u32 color);
|
|||||||
void C3D_DepthTest(bool enable, GPU_TESTFUNC function, GPU_WRITEMASK writemask);
|
void C3D_DepthTest(bool enable, GPU_TESTFUNC function, GPU_WRITEMASK writemask);
|
||||||
void C3D_AlphaTest(bool enable, GPU_TESTFUNC function, int ref);
|
void C3D_AlphaTest(bool enable, GPU_TESTFUNC function, int ref);
|
||||||
void C3D_AlphaBlend(GPU_BLENDEQUATION colorEq, GPU_BLENDEQUATION alphaEq, GPU_BLENDFACTOR srcClr, GPU_BLENDFACTOR dstClr, GPU_BLENDFACTOR srcAlpha, GPU_BLENDFACTOR dstAlpha);
|
void C3D_AlphaBlend(GPU_BLENDEQUATION colorEq, GPU_BLENDEQUATION alphaEq, GPU_BLENDFACTOR srcClr, GPU_BLENDFACTOR dstClr, GPU_BLENDFACTOR srcAlpha, GPU_BLENDFACTOR dstAlpha);
|
||||||
|
void C3D_ColorLogicOp(GPU_LOGICOP op);
|
||||||
|
void C3D_FragOpMode(GPU_FRAGOPMODE mode);
|
||||||
|
@ -9,22 +9,6 @@ typedef struct
|
|||||||
u32 clearColor, clearDepth;
|
u32 clearColor, clearDepth;
|
||||||
} C3D_RenderBuf;
|
} C3D_RenderBuf;
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
// Renderbuffer color formats
|
|
||||||
GPU_RB_RGBA8 = 0,
|
|
||||||
GPU_RB_RGB8,
|
|
||||||
GPU_RB_RGB5_A1,
|
|
||||||
GPU_RB_R5_G6_B5,
|
|
||||||
GPU_RB_RGBA4,
|
|
||||||
|
|
||||||
// Renderbuffer depth formats
|
|
||||||
GPU_RB_DEPTH16 = 0,
|
|
||||||
GPU_RB_DEPTHXX,
|
|
||||||
GPU_RB_DEPTH24,
|
|
||||||
GPU_RB_DEPTH24_STENCIL8,
|
|
||||||
};
|
|
||||||
|
|
||||||
bool C3D_RenderBufInit(C3D_RenderBuf* rb, int width, int height, int colorFmt, int depthFmt);
|
bool C3D_RenderBufInit(C3D_RenderBuf* rb, int width, int height, int colorFmt, int depthFmt);
|
||||||
void C3D_RenderBufClearAsync(C3D_RenderBuf* rb);
|
void C3D_RenderBufClearAsync(C3D_RenderBuf* rb);
|
||||||
void C3D_RenderBufTransferAsync(C3D_RenderBuf* rb, u32* frameBuf, u32 flags);
|
void C3D_RenderBufTransferAsync(C3D_RenderBuf* rb, u32* frameBuf, u32 flags);
|
||||||
|
@ -90,6 +90,7 @@ bool C3D_Init(size_t cmdBufSize)
|
|||||||
C3D_DepthTest(true, GPU_GREATER, GPU_WRITE_ALL);
|
C3D_DepthTest(true, GPU_GREATER, GPU_WRITE_ALL);
|
||||||
C3D_AlphaTest(false, GPU_ALWAYS, 0x00);
|
C3D_AlphaTest(false, GPU_ALWAYS, 0x00);
|
||||||
C3D_AlphaBlend(GPU_BLEND_ADD, GPU_BLEND_ADD, GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA);
|
C3D_AlphaBlend(GPU_BLEND_ADD, GPU_BLEND_ADD, GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA);
|
||||||
|
C3D_FragOpMode(GPU_FRAGOPMODE_GL);
|
||||||
|
|
||||||
ctx->texEnvBuf = 0;
|
ctx->texEnvBuf = 0;
|
||||||
ctx->texEnvBufClr = 0xFFFFFFFF;
|
ctx->texEnvBufClr = 0xFFFFFFFF;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
u32 fragOpMode;
|
||||||
u32 zScale, zOffset;
|
u32 zScale, zOffset;
|
||||||
GPU_CULLMODE cullMode;
|
GPU_CULLMODE cullMode;
|
||||||
|
|
||||||
@ -20,6 +21,7 @@ typedef struct
|
|||||||
|
|
||||||
u32 blendClr;
|
u32 blendClr;
|
||||||
u32 alphaBlend;
|
u32 alphaBlend;
|
||||||
|
GPU_LOGICOP clrLogicOp;
|
||||||
} C3D_Effect;
|
} C3D_Effect;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -54,6 +54,22 @@ void C3D_AlphaBlend(GPU_BLENDEQUATION colorEq, GPU_BLENDEQUATION alphaEq, GPU_BL
|
|||||||
{
|
{
|
||||||
C3D_Effect* e = getEffect();
|
C3D_Effect* e = getEffect();
|
||||||
e->alphaBlend = colorEq | (alphaEq << 8) | (srcClr << 16) | (dstClr << 20) | (srcAlpha << 24) | (dstAlpha << 28);
|
e->alphaBlend = colorEq | (alphaEq << 8) | (srcClr << 16) | (dstClr << 20) | (srcAlpha << 24) | (dstAlpha << 28);
|
||||||
|
e->fragOpMode &= ~0xFF00;
|
||||||
|
e->fragOpMode |= 0x0100;
|
||||||
|
}
|
||||||
|
|
||||||
|
void C3D_ColorLogicOp(GPU_LOGICOP op)
|
||||||
|
{
|
||||||
|
C3D_Effect* e = getEffect();
|
||||||
|
e->fragOpMode &= ~0xFF00;
|
||||||
|
e->clrLogicOp = op;
|
||||||
|
}
|
||||||
|
|
||||||
|
void C3D_FragOpMode(GPU_FRAGOPMODE mode)
|
||||||
|
{
|
||||||
|
C3D_Effect* e = getEffect();
|
||||||
|
e->fragOpMode &= ~0xFF00FF;
|
||||||
|
e->fragOpMode |= 0xE40000 | mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void C3Di_EffectBind(C3D_Effect* e)
|
void C3Di_EffectBind(C3D_Effect* e)
|
||||||
@ -64,7 +80,8 @@ void C3Di_EffectBind(C3D_Effect* e)
|
|||||||
GPUCMD_AddIncrementalWrites(GPUREG_ALPHATEST_CONFIG, (u32*)&e->alphaTest, 4);
|
GPUCMD_AddIncrementalWrites(GPUREG_ALPHATEST_CONFIG, (u32*)&e->alphaTest, 4);
|
||||||
GPUCMD_AddWrite(GPUREG_BLEND_COLOR, e->blendClr);
|
GPUCMD_AddWrite(GPUREG_BLEND_COLOR, e->blendClr);
|
||||||
GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend);
|
GPUCMD_AddWrite(GPUREG_BLEND_CONFIG, e->alphaBlend);
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_BLEND_ENABLE, 2, 0x00000100);
|
GPUCMD_AddWrite(GPUREG_LOGICOP_CONFIG, e->clrLogicOp);
|
||||||
|
GPUCMD_AddMaskedWrite(GPUREG_BLEND_ENABLE, 2, e->fragOpMode);
|
||||||
|
|
||||||
// Disable early depth test?
|
// Disable early depth test?
|
||||||
GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 0);
|
GPUCMD_AddMaskedWrite(GPUREG_0062, 1, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user