Commit fe7f03eb authored by nanahira's avatar nanahira

tmp save

parent 9ca608d0
......@@ -883,9 +883,7 @@ bool Game::Initialize() {
}
hideChat = false;
hideChatTimer = 0;
screenshotSequence = 0;
sprintf(screenshotDirectory, "screenshots/ygopro_%u", device->getTimer()->getRealTime());
FileSystem::MakeDir(screenshotDirectory);
//testVideoFile = fopen("./test-video", "wb");
return true;
}
void Game::MainLoop() {
......@@ -991,6 +989,9 @@ void Game::MainLoop() {
SingleMode::StopPlay(true);
std::this_thread::sleep_for(std::chrono::milliseconds(500));
SaveConfig();
//if(testVideoFile) {
// fclose(testVideoFile);
//}
// device->drop();
}
void Game::RefreshTimeDisplay() {
......@@ -2205,29 +2206,117 @@ void Game::takeScreenshot() {
} else
device->getLogger()->log(L"Failed to take screenshot.", irr::ELL_WARNING);
}
void Game::writeImageAsBMP(irr::video::IImage* const image, file* fp) {
irr::video::SBMPHeader imageHeader;
imageHeader.Id = 0x4d42;
imageHeader.Reserved = 0;
imageHeader.BitmapDataOffset = sizeof(imageHeader);
imageHeader.BitmapHeaderSize = 0x28;
imageHeader.Width = image->getDimension().Width;
imageHeader.Height = image->getDimension().Height;
imageHeader.Planes = 1;
imageHeader.BPP = 24;
imageHeader.Compression = 0;
imageHeader.PixelPerMeterX = 0;
imageHeader.PixelPerMeterY = 0;
imageHeader.Colors = 0;
imageHeader.ImportantColors = 0;
// data size is rounded up to next larger 4 bytes boundary
imageHeader.BitmapDataSize = imageHeader.Width * imageHeader.BPP / 8;
imageHeader.BitmapDataSize = (imageHeader.BitmapDataSize + 3) & ~3;
imageHeader.BitmapDataSize *= imageHeader.Height;
// file size is data size plus offset to data
imageHeader.FileSize = imageHeader.BitmapDataOffset + imageHeader.BitmapDataSize;
// bitmaps are stored upside down and padded so we always do this
void (*CColorConverter_convertFORMATtoFORMAT)(const void*, s32, void*) = 0;
switch(image->getColorFormat())
{
case ECF_R8G8B8:
CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_R8G8B8toR8G8B8;
break;
case ECF_A8R8G8B8:
CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_A8R8G8B8toB8G8R8;
break;
case ECF_A1R5G5B5:
CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_A1R5G5B5toR8G8B8;
break;
case ECF_R5G6B5:
CColorConverter_convertFORMATtoFORMAT
= CColorConverter::convert_R5G6B5toR8G8B8;
break;
#ifndef _DEBUG
default:
break;
#endif
}
// couldn't find a color converter
if (!CColorConverter_convertFORMATtoFORMAT)
return false;
// write the bitmap header
if (fwrite(&imageHeader, sizeof(imageHeader), 1) != sizeof(imageHeader))
return false;
u8* scan_lines = (u8*)image->lock();
if (!scan_lines)
return false;
// size of one pixel in bytes
u32 pixel_size = image->getBytesPerPixel();
// length of one row of the source image in bytes
u32 row_stride = (pixel_size * imageHeader.Width);
// length of one row in bytes, rounded up to nearest 4-byte boundary
s32 row_size = ((3 * imageHeader.Width) + 3) & ~3;
// allocate and clear memory for our scan line
u8* row_pointer = new u8[row_size];
memset(row_pointer, 0, row_size);
// convert the image to 24-bit BGR and flip it over
s32 y;
for (y = imageHeader.Height - 1; 0 <= y; --y)
{
if (image->getColorFormat()==ECF_R8G8B8)
CColorConverter::convert24BitTo24Bit(&scan_lines[y * row_stride], row_pointer, imageHeader.Width, 1, 0, false, true);
else
// source, length [pixels], destination
CColorConverter_convertFORMATtoFORMAT(&scan_lines[y * row_stride], imageHeader.Width, row_pointer);
if (file->write(row_pointer, row_size) < row_size)
break;
}
// clean up our scratch area
delete [] row_pointer;
// give back image handle
image->unlock();
}
void Game::takeScreenshotLoop() {
irr::video::IImage* const image = driver->createScreenShot();
//const int currentSequence = ++screenshotSequence;
if(image) {
//irr::video::ECOLOR_FORMAT colorFormat = image->getColorFormat();
//u32 pixel_size = image->getBytesPerPixel();
//u32 width = image->getDimension().Width;
//u32 height = image->getDimension().Height;
/*
auto data = image->lock();
auto size = image->getImageDataSizeInBytes();
fwrite(data, size, 1, stderr);
fflush(stderr);
fwrite(data, size, 1, testVideoFile);
fflush(testVideoFile);
image->unlock();
//irr::c8 filename[64];
//snprintf(filename, 64, "%s/%04d.bmp", screenshotDirectory, currentSequence);
//driver->writeImageToFile(image, filename);
*/
image->drop();
} else
device->getLogger()->log(L"Failed to take loop screenshot.", irr::ELL_WARNING);
}
......
......@@ -260,8 +260,7 @@ public:
bool always_chain;
bool ignore_chain;
bool chain_when_avail;
int screenshotSequence;
char screenshotDirectory[64];
//FILE *testVideoFile;
bool is_building;
bool is_siding;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment