Add C3D_RenderTargetDetachOutput (called automatically on render target destroy)
This commit is contained in:
parent
4e02e27222
commit
03235602cd
@ -64,6 +64,11 @@ C3D_RenderTarget* C3D_RenderTargetCreateFromTex(C3D_Tex* tex, GPU_TEXFACE face,
|
|||||||
void C3D_RenderTargetDelete(C3D_RenderTarget* target);
|
void C3D_RenderTargetDelete(C3D_RenderTarget* target);
|
||||||
void C3D_RenderTargetSetOutput(C3D_RenderTarget* target, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags);
|
void C3D_RenderTargetSetOutput(C3D_RenderTarget* target, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags);
|
||||||
|
|
||||||
|
static inline void C3D_RenderTargetDetachOutput(C3D_RenderTarget* target)
|
||||||
|
{
|
||||||
|
C3D_RenderTargetSetOutput(NULL, target->screen, target->side, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void C3D_RenderTargetClear(C3D_RenderTarget* target, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
|
static inline void C3D_RenderTargetClear(C3D_RenderTarget* target, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
|
||||||
{
|
{
|
||||||
C3D_FrameBufClear(&target->frameBuf, clearBits, clearColor, clearDepth);
|
C3D_FrameBufClear(&target->frameBuf, clearBits, clearColor, clearDepth);
|
||||||
|
@ -355,6 +355,9 @@ void C3D_RenderTargetDelete(C3D_RenderTarget* target)
|
|||||||
{
|
{
|
||||||
if (inFrame)
|
if (inFrame)
|
||||||
svcBreak(USERBREAK_PANIC); // Shouldn't happen.
|
svcBreak(USERBREAK_PANIC); // Shouldn't happen.
|
||||||
|
if (target->linked)
|
||||||
|
C3D_RenderTargetDetachOutput(target);
|
||||||
|
else
|
||||||
C3Di_WaitAndClearQueue(-1);
|
C3Di_WaitAndClearQueue(-1);
|
||||||
C3Di_RenderTargetDestroy(target);
|
C3Di_RenderTargetDestroy(target);
|
||||||
}
|
}
|
||||||
@ -365,13 +368,20 @@ void C3D_RenderTargetSetOutput(C3D_RenderTarget* target, gfxScreen_t screen, gfx
|
|||||||
if (screen==GFX_BOTTOM) id = 2;
|
if (screen==GFX_BOTTOM) id = 2;
|
||||||
else if (side==GFX_RIGHT) id = 1;
|
else if (side==GFX_RIGHT) id = 1;
|
||||||
if (linkedTarget[id])
|
if (linkedTarget[id])
|
||||||
|
{
|
||||||
linkedTarget[id]->linked = false;
|
linkedTarget[id]->linked = false;
|
||||||
|
if (!inFrame)
|
||||||
|
C3Di_WaitAndClearQueue(-1);
|
||||||
|
}
|
||||||
linkedTarget[id] = target;
|
linkedTarget[id] = target;
|
||||||
|
if (target)
|
||||||
|
{
|
||||||
target->linked = true;
|
target->linked = true;
|
||||||
target->transferFlags = transferFlags;
|
target->transferFlags = transferFlags;
|
||||||
target->screen = screen;
|
target->screen = screen;
|
||||||
target->side = side;
|
target->side = side;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void C3Di_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags)
|
static void C3Di_SafeDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user