diff --git a/GPU/GLES/Framebuffer.cpp b/GPU/GLES/Framebuffer.cpp index cd2de199a..98d03a316 100644 --- a/GPU/GLES/Framebuffer.cpp +++ b/GPU/GLES/Framebuffer.cpp @@ -430,16 +430,21 @@ void FramebufferManager::SetRenderFrameBuffer() { int z_stride = gstate.zbwidth & 0x3C0; // Yeah this is not completely right. but it'll do for now. - //int drawing_width = ((gstate.region2) & 0x3FF) + 1; - //int drawing_height = ((gstate.region2 >> 10) & 0x3FF) + 1; + int drawing_width = ((gstate.region2) & 0x3FF) + 1; + int drawing_height = ((gstate.region2 >> 10) & 0x3FF) + 1; + if (drawing_width > gstate.getScissorX2() + 1) + drawing_width = gstate.getScissorX2() + 1; + if (drawing_height > gstate.getScissorY2() + 1) + drawing_height = gstate.getScissorY2() + 1; + // As there are no clear "framebuffer width" and "framebuffer height" registers, // we need to infer the size of the current framebuffer somehow. Let's try the viewport. int fmt = gstate.framebufpixformat & 3; - int drawing_width, drawing_height; - GuessDrawingSize(drawing_width, drawing_height); + //int drawing_width, drawing_height; + //GuessDrawingSize(drawing_width, drawing_height); int buffer_width = drawing_width; int buffer_height = drawing_height; diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index ce5acb209..d6e2b4090 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -717,7 +717,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( memcpy(&transformed[index].u, uv, 3 * sizeof(float)); if (gstate_c.flipTexture) - transformed[index].v = 1.0f - transformed[index].v; + transformed[index].v = 1.0f - transformed[index].v * 2.0f; for (int i = 0; i < 4; i++) { transformed[index].color0[i] = c0[i] * 255.0f; diff --git a/GPU/GLES/VertexShaderGenerator.cpp b/GPU/GLES/VertexShaderGenerator.cpp index c7001b880..2ccf958c7 100644 --- a/GPU/GLES/VertexShaderGenerator.cpp +++ b/GPU/GLES/VertexShaderGenerator.cpp @@ -553,7 +553,7 @@ void GenerateVertexShader(int prim, char *buffer, bool useHWTransform) { } if (flipV) - WRITE(p, " v_texcoord.y = 1.0 - v_texcoord.y;\n"); + WRITE(p, " v_texcoord.y = 1.0 - v_texcoord.y * 2.0;\n"); } // Compute fogdepth