Mercurial > hg > openttd
changeset 13632:26e73974b916 draft
(svn r18156) -Add: crash screenshot, created from blitter buffer
author | smatz <smatz@openttd.org> |
---|---|
date | Tue, 17 Nov 2009 23:12:42 +0000 |
parents | 9d22db56efe5 |
children | e809c4dab49d |
files | readme.txt src/crashlog.cpp src/crashlog.h src/openttd.cpp src/screenshot.cpp src/screenshot.h |
diffstat | 6 files changed, 37 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/readme.txt +++ b/readme.txt @@ -68,7 +68,8 @@ forum thread related to that patch pack. * Make it reproducible for the developers. In other words, create a savegame in which you can reproduce the issue once loaded. It is very useful to give - us the crash.dmp, crash.sav and crash.log which are created on crashes. + us the crash.dmp, crash.sav, crash.log and crash screenshot which are + created on crashes. * Check whether the bug is already reported on our bug tracker. This includes searching for recently closed bug reports as the bug might already be fixed.
--- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -21,6 +21,8 @@ #include "sound/sound_driver.hpp" #include "video/video_driver.hpp" #include "saveload/saveload.h" +#include "screenshot.h" +#include "gfx_func.h" #include <squirrel.h> #include "ai/ai_info.hpp" @@ -249,6 +251,17 @@ } } +bool CrashLog::WriteScreenshot(char *filename, const char *filename_last) const +{ + /* Don't draw when we have invalid screen size */ + if (_screen.width < 1 || _screen.height < 1 || _screen.dst_ptr == NULL) return false; + + RequestScreenshot(SC_RAW, "crash"); + bool res = MakeScreenshot(); + if (res) strecpy(filename, _full_screenshot_name, filename_last); + return res; +} + bool CrashLog::MakeCrashLog() const { /* Don't keep looping logging crashes. */ @@ -292,6 +305,15 @@ printf("Writing crash savegame failed. Please attach the last (auto)save to any bug reports.\n\n"); } + printf("Writing crash screenshot...\n"); + bret = this->WriteScreenshot(filename, lastof(filename)); + if (bret) { + printf("Crash screenshot written to %s. Please add this file to any bug reports.\n\n", filename); + } else { + ret = false; + printf("Writing crash screenshot failed.\n\n"); + } + return ret; }
--- a/src/crashlog.h +++ b/src/crashlog.h @@ -155,6 +155,16 @@ bool WriteSavegame(char *filename, const char *filename_last) const; /** + * Write the (crash) screenshot to a file. + * @note On success the filename will be filled with the full path of the + * screenshot. Make sure filename is at least \c MAX_PATH big. + * @param filename Output for the filename of the written file. + * @param filename_last The last position in the filename buffer. + * @return true when the crash screenshot was successfully made. + */ + bool WriteScreenshot(char *filename, const char *filename_last) const; + + /** * Makes the crash log, writes it to a file and then subsequently tries * to make a crash dump and crash savegame. It uses DEBUG to write * information like paths to the console.
--- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -123,7 +123,6 @@ va_end(va); ShowOSErrorBox(buf, true); - if (_video_driver != NULL) _video_driver->Stop(); /* Set the error message for the crash log and then invoke it. */ CrashLog::SetErrorMessage(buf);