Original screen grabber

This commit is contained in:
Sergeanur 2020-08-14 18:57:23 +03:00
parent 489743da41
commit e7945625b5
7 changed files with 85 additions and 0 deletions

View File

@ -19,4 +19,5 @@ public:
static bool ReadLine(int fd, char *buf, int len); static bool ReadLine(int fd, char *buf, int len);
static int CloseFile(int fd); static int CloseFile(int fd);
static int GetErrorReadWrite(int fd); static int GetErrorReadWrite(int fd);
static char *GetRootDirName() { return ms_rootDirName; }
}; };

View File

@ -2,6 +2,7 @@
#include "rpmatfx.h" #include "rpmatfx.h"
#include "rphanim.h" #include "rphanim.h"
#include "rpskin.h" #include "rpskin.h"
#include "rtbmp.h"
#include "main.h" #include "main.h"
#include "CdStream.h" #include "CdStream.h"
@ -61,6 +62,7 @@
#include "MemoryCard.h" #include "MemoryCard.h"
#include "SceneEdit.h" #include "SceneEdit.h"
#include "debugmenu.h" #include "debugmenu.h"
#include "Clock.h"
GlobalScene Scene; GlobalScene Scene;
@ -288,6 +290,28 @@ DoFade(void)
} }
} }
bool
RwGrabScreen(RwCamera *camera, RwChar *filename)
{
char temp[255];
RwImage *pImage = RsGrabScreen(camera);
bool result = true;
if (pImage == nil)
return false;
strcpy(temp, CFileMgr::GetRootDirName());
strcat(temp, filename);
if (RtBMPImageWrite(pImage, &temp[0]) == nil)
result = false;
RwImageDestroy(pImage);
return result;
}
#define TILE_WIDTH 576
#define TILE_HEIGHT 432
void void
DoRWStuffEndOfFrame(void) DoRWStuffEndOfFrame(void)
{ {
@ -296,6 +320,20 @@ DoRWStuffEndOfFrame(void)
FlushObrsPrintfs(); FlushObrsPrintfs();
RwCameraEndUpdate(Scene.camera); RwCameraEndUpdate(Scene.camera);
RsCameraShowRaster(Scene.camera); RsCameraShowRaster(Scene.camera);
#ifndef MASTER
char s[48];
if (CPad::GetPad(1)->GetLeftShockJustDown()) {
// try using both controllers for this thing... crazy bastards
if (CPad::GetPad(0)->GetRightStickY() > 0) {
sprintf(s, "screen%d%d.ras", CClock::ms_nGameClockHours, CClock::ms_nGameClockMinutes);
// TODO
//RtTileRender(Scene.camera, TILE_WIDTH * 2, TILE_HEIGHT * 2, TILE_WIDTH, TILE_HEIGHT, &NewTileRendererCB, nil, s);
} else {
sprintf(s, "screen%d%d.bmp", CClock::ms_nGameClockHours, CClock::ms_nGameClockMinutes);
RwGrabScreen(Scene.camera, s);
}
}
#endif // !MASTER
} }
static RwBool static RwBool

View File

@ -181,6 +181,22 @@ psCameraShowRaster(RwCamera *camera)
return; return;
} }
/*
*****************************************************************************
*/
RwImage *
psGrabScreen(RwCamera *pCamera)
{
#ifndef LIBRW
RwRaster *pRaster = RwCameraGetRaster(pCamera);
if (RwImage *pImage = RwImageCreate(pRaster->width, pRaster->height, 32)) {
RwImageAllocatePixels(pImage);
RwImageSetFromRaster(pImage, pRaster);
return pImage;
}
#endif
return nil;
}
/* /*
***************************************************************************** *****************************************************************************

View File

@ -22,6 +22,7 @@ extern void psTerminate(void);
extern void psCameraShowRaster(RwCamera *camera); extern void psCameraShowRaster(RwCamera *camera);
extern RwBool psCameraBeginUpdate(RwCamera *camera); extern RwBool psCameraBeginUpdate(RwCamera *camera);
extern RwImage *psGrabScreen(RwCamera *camera);
extern void psMouseSetPos(RwV2d *pos); extern void psMouseSetPos(RwV2d *pos);

View File

@ -50,6 +50,15 @@ RsCameraBeginUpdate(RwCamera * camera)
return psCameraBeginUpdate(camera); return psCameraBeginUpdate(camera);
} }
/*
*****************************************************************************
*/
RwImage*
RsGrabScreen(RwCamera *camera)
{
return psGrabScreen(camera);
}
/* /*
***************************************************************************** *****************************************************************************
*/ */

View File

@ -274,6 +274,9 @@ RsCameraBeginUpdate(RwCamera *camera);
//extern void //extern void
//RsMouseSetVisibility(RwBool visible); //RsMouseSetVisibility(RwBool visible);
extern RwImage*
RsGrabScreen(RwCamera *camera);
extern void extern void
RsMouseSetPos(RwV2d *pos); RsMouseSetPos(RwV2d *pos);

View File

@ -238,6 +238,23 @@ psCameraShowRaster(RwCamera *camera)
} }
/*
*****************************************************************************
*/
RwImage *
psGrabScreen(RwCamera *pCamera)
{
#ifndef LIBRW
RwRaster *pRaster = RwCameraGetRaster(pCamera);
if (RwImage *pImage = RwImageCreate(pRaster->width, pRaster->height, 32)) {
RwImageAllocatePixels(pImage);
RwImageSetFromRaster(pImage, pRaster);
return pImage;
}
#endif
return nil;
}
/* /*
***************************************************************************** *****************************************************************************
*/ */