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:
parent
d27daf1009
commit
7056d29c0f
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
OpenGL.cpp
22
OpenGL.cpp
|
@ -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__
|
||||||
|
|
1
OpenGL.h
1
OpenGL.h
|
@ -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
5
VI.cpp
|
@ -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 );
|
||||||
|
|
Loading…
Reference in New Issue
Block a user