Index: code/renderer/tr_init.c =================================================================== --- code/renderer/tr_init.c (revision 1941) +++ code/renderer/tr_init.c (working copy) @@ -28,6 +28,11 @@ int maxAnisotropy = 0; float displayAspect = 0.0f; +// Used to fix glReadPixels during screenshots and video frame capture +// 4 is just for reference the default value for GL_PACK_ALIGNMENT +// see http://www.opengl.org/sdk/docs/man/xhtml/glPixelStore.xml +GLint glPackAlignment = 4; + glstate_t glState; static void GfxInfo_f( void ); @@ -370,7 +375,10 @@ buffer[15] = height >> 8; buffer[16] = 24; // pixel size - qglReadPixels( x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer+18 ); + qglGetIntegerv(GL_PACK_ALIGNMENT, &glPackAlignment); + qglPixelStorei(GL_PACK_ALIGNMENT, 1); + qglReadPixels( x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer+18 ); + qglPixelStorei(GL_PACK_ALIGNMENT, glPackAlignment); // swap rgb to bgr c = 18 + width * height * 3; @@ -403,7 +411,10 @@ buffer = ri.Hunk_AllocateTempMemory(memcount); + qglGetIntegerv(GL_PACK_ALIGNMENT, &glPackAlignment); + qglPixelStorei(GL_PACK_ALIGNMENT, 1); qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer); + qglPixelStorei(GL_PACK_ALIGNMENT, glPackAlignment); // gamma correct if(glConfig.deviceSupportsGamma) @@ -536,7 +547,10 @@ buffer[14] = 128; buffer[16] = 24; // pixel size - qglReadPixels( 0, 0, glConfig.vidWidth, glConfig.vidHeight, GL_RGB, GL_UNSIGNED_BYTE, source ); + qglGetIntegerv(GL_PACK_ALIGNMENT, &glPackAlignment); + qglPixelStorei(GL_PACK_ALIGNMENT, 1); + qglReadPixels( 0, 0, glConfig.vidWidth, glConfig.vidHeight, GL_RGB, GL_UNSIGNED_BYTE, source ); + qglPixelStorei(GL_PACK_ALIGNMENT, glPackAlignment); // resample from source xScale = glConfig.vidWidth / 512.0f; @@ -705,8 +719,11 @@ cmd = (const videoFrameCommand_t *)data; + qglGetIntegerv(GL_PACK_ALIGNMENT, &glPackAlignment); + qglPixelStorei(GL_PACK_ALIGNMENT, 1); qglReadPixels(0, 0, cmd->width, cmd->height, GL_RGB, GL_UNSIGNED_BYTE, cmd->captureBuffer); + qglPixelStorei(GL_PACK_ALIGNMENT, glPackAlignment); memcount = cmd->width * cmd->height * 3;