(view as text)
diff --git a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp
index 290dc51..4531e23 100644
--- a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp
+++ b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp
@@ -277,34 +277,25 @@ void EncodeToRamUsingShader(GLuint srcTexture, const TargetRectangle& sourceRc,
int readHeight = readStride / dstWidth / 4; // 4 bytes per pixel
int readLoops = dstHeight / readHeight;
- if (writeStride != readStride && readLoops > 1 && toTexture)
+ // copy into one pbo first, map this buffer, and then memcpy into gc memory
+ // in this way, we only have one vram->ram transfer, but maybe a bigger
+ // cpu overhead because of the pbo
+ glBindBuffer(GL_PIXEL_PACK_BUFFER, s_PBO);
+ glBufferData(GL_PIXEL_PACK_BUFFER, dstSize, NULL, GL_STREAM_READ);
+ glReadPixels(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight, GL_BGRA, GL_UNSIGNED_BYTE, 0);
+ u8* pbo = (u8*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, dstSize, GL_MAP_READ_BIT);
+
+ //int readStart = 0;
+ for (int i = 0; i < readLoops; i++)
{
- // writing to a texture of a different size
- // also copy more then one block line, so the different strides matters
- // copy into one pbo first, map this buffer, and then memcpy into gc memory
- // in this way, we only have one vram->ram transfer, but maybe a bigger
- // cpu overhead because of the pbo
- glBindBuffer(GL_PIXEL_PACK_BUFFER, s_PBO);
- glBufferData(GL_PIXEL_PACK_BUFFER, dstSize, NULL, GL_STREAM_READ);
- glReadPixels(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight, GL_BGRA, GL_UNSIGNED_BYTE, 0);
- u8* pbo = (u8*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, dstSize, GL_MAP_READ_BIT);
-
- //int readStart = 0;
- for (int i = 0; i < readLoops; i++)
- {
- memcpy(destAddr, pbo, readStride);
- pbo += readStride;
- destAddr += writeStride;
- }
-
- glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
- glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
- }
- else
- {
- glReadPixels(0, 0, (GLsizei)dstWidth, (GLsizei)dstHeight, GL_BGRA, GL_UNSIGNED_BYTE, destAddr);
+ memcpy(destAddr, pbo, readStride);
+ pbo += readStride;
+ destAddr += writeStride;
}
+ glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
+ glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
+
GL_REPORT_ERRORD();
}