1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Fix screen shot capture.

This commit is contained in:
Sergey Lipskiy 2013-08-03 16:56:18 +07:00
parent d27daf1009
commit 7056d29c0f
4 changed files with 17 additions and 13 deletions

View File

@ -79,7 +79,7 @@ EXPORT void CALL CaptureScreen ( char * Directory )
WaitForSingleObject( RSP.threadFinished, INFINITE ); WaitForSingleObject( RSP.threadFinished, INFINITE );
} }
#else #else
OGL_SaveScreenshot(); OGL.captureScreen = true;
#endif #endif
} }

View File

@ -532,6 +532,7 @@ bool OGL_Start()
gSP.changed = gDP.changed = 0xFFFFFFFF; gSP.changed = gDP.changed = 0xFFFFFFFF;
OGL_UpdateScale(); OGL_UpdateScale();
OGL.captureScreen = false;
return TRUE; return TRUE;
} }
@ -1171,9 +1172,11 @@ void OGL_SaveScreenshot()
char *pixelData = (char*)malloc( OGL.width * OGL.height * 3 ); char *pixelData = (char*)malloc( OGL.width * OGL.height * 3 );
GLint oldMode;
glGetIntegerv( GL_READ_BUFFER, &oldMode );
glReadBuffer( GL_FRONT ); glReadBuffer( GL_FRONT );
glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixelData ); glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixelData );
glReadBuffer( GL_BACK ); glReadBuffer( oldMode );
infoHeader.biSize = sizeof( BITMAPINFOHEADER ); infoHeader.biSize = sizeof( BITMAPINFOHEADER );
infoHeader.biWidth = OGL.width; infoHeader.biWidth = OGL.width;
@ -1208,14 +1211,14 @@ void OGL_SaveScreenshot()
hBitmapFile = CreateFile( filename, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL ); hBitmapFile = CreateFile( filename, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL );
} }
while (hBitmapFile == INVALID_HANDLE_VALUE); while (hBitmapFile == INVALID_HANDLE_VALUE);
DWORD written; DWORD written;
WriteFile( hBitmapFile, &fileHeader, sizeof( BITMAPFILEHEADER ), &written, NULL ); WriteFile( hBitmapFile, &fileHeader, sizeof( BITMAPFILEHEADER ), &written, NULL );
WriteFile( hBitmapFile, &infoHeader, sizeof( BITMAPINFOHEADER ), &written, NULL ); WriteFile( hBitmapFile, &infoHeader, sizeof( BITMAPINFOHEADER ), &written, NULL );
WriteFile( hBitmapFile, pixelData, infoHeader.biSizeImage, &written, NULL ); WriteFile( hBitmapFile, pixelData, infoHeader.biSizeImage, &written, NULL );
CloseHandle( hBitmapFile ); CloseHandle( hBitmapFile );
free( pixelData ); free( pixelData );
#else // !__LINUX__ #else // !__LINUX__
#endif // __LINUX__ #endif // __LINUX__
@ -1227,16 +1230,11 @@ void OGL_ReadScreen( void **dest, long *width, long *height )
*height = OGL.height; *height = OGL.height;
*dest = malloc( OGL.height * OGL.width * 3 ); *dest = malloc( OGL.height * OGL.width * 3 );
if (*dest == 0) if (*dest == NULL)
return; return;
GLint oldMode;
glGetIntegerv( GL_READ_BUFFER, &oldMode );
glReadBuffer( GL_FRONT ); glReadBuffer( GL_FRONT );
// glReadBuffer( GL_BACK ); glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, *dest );
glReadPixels( 0, 0, OGL.width, OGL.height,
GL_BGR, GL_UNSIGNED_BYTE, *dest );
glReadBuffer( oldMode );
} }
#ifdef __LINUX__ #ifdef __LINUX__

View File

@ -89,6 +89,7 @@ struct GLInfo
fbFBO, fbFBO,
fbFBOEXT fbFBOEXT
} framebuffer_mode; } framebuffer_mode;
bool captureScreen;
}; };
extern GLInfo OGL; extern GLInfo OGL;

5
VI.cpp
View File

@ -37,6 +37,11 @@ void VI_UpdateScreen()
{ {
glFinish(); glFinish();
if (OGL.captureScreen) {
OGL_SaveScreenshot();
OGL.captureScreen = false;
}
if (OGL.frameBufferTextures) if (OGL.frameBufferTextures)
{ {
//FrameBuffer *current = FrameBuffer_FindBuffer( *REG.VI_ORIGIN ); //FrameBuffer *current = FrameBuffer_FindBuffer( *REG.VI_ORIGIN );