From 9e1e64d62ec87f7c9df3a0fc046821b412d70b7d Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 29 Sep 2013 23:28:02 -0700 Subject: [PATCH] Swap render targets when drawing spline/beziers. --- GPU/GLES/GLES_GPU.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/GPU/GLES/GLES_GPU.cpp b/GPU/GLES/GLES_GPU.cpp index 78b0a759c6..a72b443b52 100644 --- a/GPU/GLES/GLES_GPU.cpp +++ b/GPU/GLES/GLES_GPU.cpp @@ -738,6 +738,13 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) { // The arrow and other rotary items in Puzbob are bezier patches, strangely enough. case GE_CMD_BEZIER: { + // This also make skipping drawing very effective. + framebufferManager_.SetRenderFrameBuffer(); + if (gstate_c.skipDrawReason & (SKIPDRAW_SKIPFRAME | SKIPDRAW_NON_DISPLAYED_FB)) { + // TODO: Should this eat some cycles? Probably yes. Not sure if important. + return; + } + if (!Memory::IsValidAddress(gstate_c.vertexAddr)) { ERROR_LOG_REPORT(G3D, "Bad vertex address %08x!", gstate_c.vertexAddr); break; @@ -774,6 +781,13 @@ void GLES_GPU::ExecuteOp(u32 op, u32 diff) { case GE_CMD_SPLINE: { + // This also make skipping drawing very effective. + framebufferManager_.SetRenderFrameBuffer(); + if (gstate_c.skipDrawReason & (SKIPDRAW_SKIPFRAME | SKIPDRAW_NON_DISPLAYED_FB)) { + // TODO: Should this eat some cycles? Probably yes. Not sure if important. + return; + } + if (!Memory::IsValidAddress(gstate_c.vertexAddr)) { ERROR_LOG_REPORT(G3D, "Bad vertex address %08x!", gstate_c.vertexAddr); break;