Changeset - r13622:200502780bca
[Not reviewed]
master
0 6 0
smatz - 15 years ago 2009-11-17 23:12:42
smatz@openttd.org
(svn r18156) -Add: crash screenshot, created from blitter buffer
6 files changed with 37 insertions and 2 deletions:
0 comments (0 inline, 0 general)
readme.txt
Show inline comments
 
@@ -68,7 +68,8 @@ When you are sure it is not already repo
 
   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.
 

	
src/crashlog.cpp
Show inline comments
 
@@ -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::WriteSavegame(char *filen
 
	}
 
}
 

	
 
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 @@ bool CrashLog::MakeCrashLog() const
 
		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;
 
}
 

	
src/crashlog.h
Show inline comments
 
@@ -155,6 +155,16 @@ public:
 
	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.
src/openttd.cpp
Show inline comments
 
@@ -123,7 +123,6 @@ void CDECL error(const char *s, ...)
 
	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);
src/screenshot.cpp
Show inline comments
 
@@ -644,6 +644,8 @@ bool MakeScreenshot()
 
		case SC_VIEWPORT:
 
			UndrawMouseCursor();
 
			DrawDirtyBlocks();
 
			/* FALL THROUGH */
 
		case SC_RAW:
 
			_screenshot_type = SC_NONE;
 
			return MakeSmallScreenshot();
 
		case SC_WORLD:
src/screenshot.h
Show inline comments
 
@@ -21,6 +21,7 @@ void SetScreenshotFormat(int i);
 
enum ScreenshotType {
 
	SC_NONE,     ///< No screenshot requested
 
	SC_VIEWPORT, ///< Screenshot of viewport
 
	SC_RAW,      ///< Raw screenshot from blitter buffer
 
	SC_WORLD,    ///< World screenshot
 
};
 

	
0 comments (0 inline, 0 general)