From 464972cc3172eca245cf8f3fc6919880b45dd1d5 Mon Sep 17 00:00:00 2001 From: stephena Date: Sun, 20 Jun 2004 23:30:48 +0000 Subject: [PATCH] Added snapshot support for both software and OpenGL modes. Snapshots are now created from the framebuffer() instead of directly from the Mediasource. Removed all snapshot-related code from the Console, since it didn't really belong there. A static snapshot object is now created each time a snapshot is done (in the EventHandler). These changes should make it easier for those ports (like MacOSX) that have native PNG-saving support to not use *any* of the snapshot code at all. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@275 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/common/FrameBufferGL.cxx | 13 ++- stella/src/common/FrameBufferGL.hxx | 22 ++++- stella/src/common/FrameBufferSDL.hxx | 5 +- stella/src/common/FrameBufferSoft.cxx | 52 +++++++++++- stella/src/common/FrameBufferSoft.hxx | 22 ++++- stella/src/common/Snapshot.cxx | 113 ++++++-------------------- stella/src/common/Snapshot.hxx | 30 +++---- stella/src/emucore/Console.cxx | 7 +- stella/src/emucore/Console.hxx | 21 +---- stella/src/emucore/EventHandler.cxx | 12 ++- stella/src/emucore/EventHandler.hxx | 15 +--- stella/src/emucore/FrameBuffer.hxx | 22 ++++- 12 files changed, 170 insertions(+), 164 deletions(-) diff --git a/stella/src/common/FrameBufferGL.cxx b/stella/src/common/FrameBufferGL.cxx index b6770efaf..60a71da79 100644 --- a/stella/src/common/FrameBufferGL.cxx +++ b/stella/src/common/FrameBufferGL.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.cxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: FrameBufferGL.cxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #include @@ -352,6 +352,17 @@ void FrameBufferGL::drawChar(uInt32 x, uInt32 y, uInt32 c) glEnd(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBufferGL::scanline(uInt32 row, uInt8* data) +{ + // Invert the row, since OpenGL rows start at the bottom + // of the framebuffer + row = winHeight() - row - 1; + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glReadPixels(0, row, winWidth(), 1, GL_RGB, GL_UNSIGNED_BYTE, data); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool FrameBufferGL::createTextures() { diff --git a/stella/src/common/FrameBufferGL.hxx b/stella/src/common/FrameBufferGL.hxx index 95575c16b..dbaff9136 100644 --- a/stella/src/common/FrameBufferGL.hxx +++ b/stella/src/common/FrameBufferGL.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: FrameBufferGL.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_GL_HXX @@ -34,7 +34,7 @@ class MediaSource; This class implements an SDL OpenGL framebuffer. @author Stephen Anthony - @version $Id: FrameBufferGL.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ + @version $Id: FrameBufferGL.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ */ class FrameBufferGL : public FrameBufferSDL { @@ -74,6 +74,24 @@ class FrameBufferGL : public FrameBufferSDL virtual Uint32 mapRGB(Uint8 r, Uint8 g, Uint8 b) { return SDL_MapRGB(myTexture->format, r, g, b); } + /** + This routine is called to get the width of the onscreen image. + */ + virtual uInt32 winWidth() { return (uInt32) (myWidth * theZoomLevel * theAspectRatio); } + + /** + This routine is called to get the height of the onscreen image. + */ + virtual uInt32 winHeight() { return myHeight * theZoomLevel; } + + /** + This routine is called to get the specified scanline data. + + @param row The row we are looking for + @param data The actual pixel data (in bytes) + */ + virtual void scanline(uInt32 row, uInt8* data); + ////////////////////////////////////////////////////////////////////// // The following methods are derived from FrameBuffer.hxx ////////////////////////////////////////////////////////////////////// diff --git a/stella/src/common/FrameBufferSDL.hxx b/stella/src/common/FrameBufferSDL.hxx index 520755bfc..f56f81b4c 100644 --- a/stella/src/common/FrameBufferSDL.hxx +++ b/stella/src/common/FrameBufferSDL.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSDL.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: FrameBufferSDL.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_SDL_HXX @@ -35,7 +35,7 @@ the core FrameBuffer. @author Stephen Anthony - @version $Id: FrameBufferSDL.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ + @version $Id: FrameBufferSDL.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ */ class FrameBufferSDL : public FrameBuffer { @@ -50,7 +50,6 @@ class FrameBufferSDL : public FrameBuffer */ virtual ~FrameBufferSDL(); - /** Toggles between fullscreen and window mode. Grabmouse and hidecursor activated when in fullscreen mode. diff --git a/stella/src/common/FrameBufferSoft.cxx b/stella/src/common/FrameBufferSoft.cxx index 2c0c5b812..92d6c6a8b 100644 --- a/stella/src/common/FrameBufferSoft.cxx +++ b/stella/src/common/FrameBufferSoft.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.cxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: FrameBufferSoft.cxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #include @@ -383,6 +383,56 @@ void FrameBufferSoft::drawChar(uInt32 xorig, uInt32 yorig, uInt32 c) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBufferSoft::scanline(uInt32 row, uInt8* data) +{ + // Make sure no pixels are being modified + SDL_LockSurface(myScreen); + + uInt32 bpp = myScreen->format->BytesPerPixel; + uInt8* start = (uInt8*) myScreen->pixels; + uInt32 yoffset = row * myScreen->pitch; + uInt32 pixel = 0; + uInt8 *p, r, g, b; + + for(Int32 x = 0; x < myScreen->w; x++) + { + p = (Uint8*) (start + // Start at top of RAM + (yoffset) + // Go down 'row' lines + (x * bpp)); // Go in 'x' pixels + + switch(bpp) + { + case 1: + pixel = *p; + break; + + case 2: + pixel = *(Uint16*) p; + break; + + case 3: + if(SDL_BYTEORDER == SDL_BIG_ENDIAN) + pixel = p[0] << 16 | p[1] << 8 | p[2]; + else + pixel = p[0] | p[1] << 8 | p[2] << 16; + break; + + case 4: + pixel = *(Uint32*) p; + break; + } + + SDL_GetRGB(pixel, myScreen->format, &r, &g, &b); + + data[x * 3 + 0] = r; + data[x * 3 + 1] = g; + data[x * 3 + 2] = b; + } + + SDL_UnlockSurface(myScreen); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RectList::RectList(Uint32 size) { diff --git a/stella/src/common/FrameBufferSoft.hxx b/stella/src/common/FrameBufferSoft.hxx index 7a145e378..8a6f71287 100644 --- a/stella/src/common/FrameBufferSoft.hxx +++ b/stella/src/common/FrameBufferSoft.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: FrameBufferSoft.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_SOFT_HXX @@ -35,7 +35,7 @@ class RectList; This class implements an SDL software framebuffer. @author Stephen Anthony - @version $Id: FrameBufferSoft.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ + @version $Id: FrameBufferSoft.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ */ class FrameBufferSoft : public FrameBufferSDL { @@ -69,6 +69,24 @@ class FrameBufferSoft : public FrameBufferSDL virtual Uint32 mapRGB(Uint8 r, Uint8 g, Uint8 b) { return SDL_MapRGB(myScreen->format, r, g, b); } + /** + This routine is called to get the width of the onscreen image. + */ + virtual uInt32 winWidth() { return myScreen->w; } + + /** + This routine is called to get the height of the onscreen image. + */ + virtual uInt32 winHeight() { return myScreen->h; } + + /** + This routine is called to get the specified scanline data. + + @param row The row we are looking for + @param data The actual pixel data (in bytes) + */ + virtual void scanline(uInt32 row, uInt8* data); + ////////////////////////////////////////////////////////////////////// // The following methods are derived from FrameBuffer.hxx ////////////////////////////////////////////////////////////////////// diff --git a/stella/src/common/Snapshot.cxx b/stella/src/common/Snapshot.cxx index 74e6fd1fd..988c9d61f 100644 --- a/stella/src/common/Snapshot.cxx +++ b/stella/src/common/Snapshot.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Snapshot.cxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: Snapshot.cxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #include @@ -22,23 +22,18 @@ #include "bspf.hxx" #include "FrameBuffer.hxx" -#include "Console.hxx" -#include "MediaSrc.hxx" +#include "FrameBufferSDL.hxx" #include "Snapshot.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Snapshot::Snapshot(Console* console, MediaSource* mediasrc) - : myConsole(console), - myMediaSource(mediasrc), - palette((png_colorp) NULL) +Snapshot::Snapshot(FrameBuffer& framebuffer) + : myFrameBuffer(framebuffer) { } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Snapshot::~Snapshot() { - if(palette) - delete[] palette; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -68,78 +63,39 @@ void Snapshot::png_user_error(png_structp ctx, png_const_charp str) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -uInt32 Snapshot::savePNG(string filename, uInt32 multiplier) +string Snapshot::savePNG(string filename) { - // FIXME - we shouldn't use the mediasource, but should instead use - // the framebuffer. - // Right now, the snapshot doesn't take into account any special effects - // that the framebuffer may be performing (aspect correction, OpenGL, etc) - // This will require framebuffer support for exporting its actual pixels, - // so it will have to wait ... - png_structp png_ptr = 0; - png_infop info_ptr = 0; + png_infop info_ptr = 0; - uInt8* pixels = myMediaSource->currentFrameBuffer(); - - // PNG and window dimensions will be different because of scaling - uInt32 picWidth = myMediaSource->width() * multiplier << 1; - uInt32 picHeight = myMediaSource->height() * multiplier; - uInt32 width = myMediaSource->width(); - uInt32 height = myMediaSource->height(); + // Get actual screen dimensions. which are not always the same + // as the framebuffer dimensions + uInt32 width = myFrameBuffer.winWidth(); + uInt32 height = myFrameBuffer.winHeight(); ofstream* out = new ofstream(filename.c_str(), ios_base::binary); if(!out) - return 0; - - // Create the palette if it hasn't previously been set - if(!palette) - { - palette = (png_colorp) new png_color[256]; - if(!palette) - { - cerr << "Snapshot: Couldn't allocate memory for PNG palette\n"; - out->close(); - - return 0; - } - - const uInt32* gamePalette = myMediaSource->palette(); - for(uInt32 i = 0; i < 256; ++i) - { - palette[i].red = (uInt8) ((gamePalette[i] & 0x00ff0000) >> 16); - palette[i].green = (uInt8) ((gamePalette[i] & 0x0000ff00) >> 8); - palette[i].blue = (uInt8) (gamePalette[i] & 0x000000ff); - } - } + return "Couldn't create snapshot file"; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, png_user_error, png_user_warn); if(png_ptr == NULL) - { - cerr << "Snapshot: Couldn't allocate memory for PNG file\n"; - return 0; - } + return "Snapshot: Out of memory"; // Allocate/initialize the image information data. REQUIRED. info_ptr = png_create_info_struct(png_ptr); if(info_ptr == NULL) { - cerr << "Snapshot: Couldn't create image information for PNG file\n"; - png_destroy_write_struct(&png_ptr, (png_infopp)NULL); out->close(); - return 0; + return "Snapshot: Error on create image info"; } png_set_write_fn(png_ptr, out, png_write_data, png_io_flush); - png_set_IHDR(png_ptr, info_ptr, picWidth, picHeight, 8, - PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); - - // Set the 8-bit palette - png_set_PLTE(png_ptr, info_ptr, palette, 256); + png_set_IHDR(png_ptr, info_ptr, width, height, 8, + PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); // Write the file header information. REQUIRED png_write_info(png_ptr, info_ptr); @@ -147,42 +103,23 @@ uInt32 Snapshot::savePNG(string filename, uInt32 multiplier) // Pack pixels into bytes png_set_packing(png_ptr); - // The width has to be scaled by 2 * multiplier. Each pixel must be - // present scaleX times. Each scanline must be present scaleY times. - uInt32 scaleX = multiplier << 1; - uInt32 scaleY = multiplier; + // Create space for one full scanline (3 bytes per pixel in RGB format) + uInt8* data = new uInt8[width * 3]; - // Create a buffer to hold the new scanline. - uInt8* newScanline = new uInt8[width * scaleX]; - uInt8* oldScanline; - - // Look at each original scanline - for(uInt32 y = 0; y < height; y++) + // Write a new scanline to the PNG file + for(uInt32 row = 0; row < height; row++) { - // First construct a new scanline that is scaled - oldScanline = (uInt8*) pixels + y*width; - - uInt32 px = 0; - for(uInt32 x = 0; x < width; x++) - for(uInt32 offx = 0; offx < scaleX; offx++) - newScanline[px++] = oldScanline[x]; - - // Now output the new scanline 'scaleY' times - for(uInt32 offy = 0; offy < scaleY; offy++) - { - png_bytep row_pointer = (uInt8*) newScanline; - png_write_row(png_ptr, row_pointer); - } + myFrameBuffer.scanline(row, data); + png_write_row(png_ptr, (png_bytep) data); } + // Cleanup png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, (png_infopp)NULL); - - if(newScanline) - delete[] newScanline; + delete[] data; out->close(); delete out; - return 1; + return "Snapshot saved"; } diff --git a/stella/src/common/Snapshot.hxx b/stella/src/common/Snapshot.hxx index c6d0ff297..2a082f99c 100644 --- a/stella/src/common/Snapshot.hxx +++ b/stella/src/common/Snapshot.hxx @@ -13,14 +13,13 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Snapshot.hxx,v 1.1 2004-05-24 17:18:22 stephena Exp $ +// $Id: Snapshot.hxx,v 1.2 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef SNAPSHOT_HXX #define SNAPSHOT_HXX -class Console; -class MediaSource; +class FrameBuffer; #include #include "bspf.hxx" @@ -31,10 +30,9 @@ class Snapshot /** Create a new shapshot class for taking snapshots in PNG format. - @param console The console - @param mediasrc The mediasource + @param framebuffer The SDL framebuffer containing the image data */ - Snapshot(Console* console, MediaSource* mediasrc); + Snapshot(FrameBuffer& framebuffer); /** The destructor. @@ -42,15 +40,13 @@ class Snapshot ~Snapshot(); /** - This routine saves the current frame buffer to a PNG file, - appropriately scaled by the amount specified in 'multiplier'. + This routine saves the current frame buffer to a PNG file. - @param filename The filename of the PNG file - @param multiplier The amount that multiplication (zoom level) + @param filename The filename of the PNG file - @return The resulting error code + @string The resulting string to print to the framebuffer */ - uInt32 savePNG(string filename, uInt32 multiplier = 1); + string savePNG(string filename); private: static void png_write_data(png_structp ctx, png_bytep area, png_size_t size); @@ -62,14 +58,8 @@ class Snapshot static void png_user_error(png_structp ctx, png_const_charp str); private: - // The Console for the system - Console* myConsole; - - // The Mediasource for the system - MediaSource* myMediaSource; - - // The PNG palette - png_colorp palette; + // The Framebuffer for the system + FrameBuffer& myFrameBuffer; }; #endif diff --git a/stella/src/emucore/Console.cxx b/stella/src/emucore/Console.cxx index ce733b5de..f2a0e153e 100644 --- a/stella/src/emucore/Console.cxx +++ b/stella/src/emucore/Console.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Console.cxx,v 1.30 2004-06-13 16:51:15 stephena Exp $ +// $Id: Console.cxx,v 1.31 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #include @@ -174,11 +174,6 @@ Console::Console(const uInt8* image, uInt32 size, const char* filename, // Initialize the sound interface. mySound.init(this, myMediaSource, mySystem); - -#ifdef SNAPSHOT_SUPPORT - // Create a snapshot object which will handle taking snapshots - mySnapshot = new Snapshot(this, myMediaSource); -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/emucore/Console.hxx b/stella/src/emucore/Console.hxx index 9cd9d8c33..d22ba7693 100644 --- a/stella/src/emucore/Console.hxx +++ b/stella/src/emucore/Console.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Console.hxx,v 1.19 2004-06-13 16:51:15 stephena Exp $ +// $Id: Console.hxx,v 1.20 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef CONSOLE_HXX @@ -26,7 +26,6 @@ class EventHandler; class MediaSource; class PropertiesSet; class Settings; -class Snapshot; class Sound; class Switches; class System; @@ -41,7 +40,7 @@ class FrameBuffer; This class represents the entire game console. @author Bradford W. Mott - @version $Id: Console.hxx,v 1.19 2004-06-13 16:51:15 stephena Exp $ + @version $Id: Console.hxx,v 1.20 2004-06-20 23:30:48 stephena Exp $ */ class Console { @@ -171,22 +170,6 @@ class Console */ static const Properties& defaultProperties(); -#ifdef SNAPSHOT_SUPPORT - public: - // Pointer to the Snapshot object - Snapshot* mySnapshot; - - /** - Get the snapshot object of the console - - @return The snapshot object for this console - */ - Snapshot& snapshot() const - { - return *mySnapshot; - } -#endif - #ifdef DEVELOPER_SUPPORT public: /** diff --git a/stella/src/emucore/EventHandler.cxx b/stella/src/emucore/EventHandler.cxx index 7200dbc76..a92ece819 100644 --- a/stella/src/emucore/EventHandler.cxx +++ b/stella/src/emucore/EventHandler.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.cxx,v 1.26 2004-06-13 04:57:17 bwmott Exp $ +// $Id: EventHandler.cxx,v 1.27 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #include @@ -22,7 +22,6 @@ #include "Console.hxx" #include "Event.hxx" #include "EventHandler.hxx" -#include "MediaSrc.hxx" #include "Settings.hxx" #include "StellaEvent.hxx" #include "System.hxx" @@ -432,11 +431,10 @@ void EventHandler::takeSnapshot() else filename = sspath + ".png"; - // Now save the snapshot file - uInt32 multiplier = myConsole->settings().getInt("zoom"); - - myConsole->snapshot().savePNG(filename, multiplier); - myConsole->frameBuffer().showMessage("Snapshot saved"); + // Now create a Snapshot object and save the PNG + Snapshot snapshot(myConsole->frameBuffer()); + string result = snapshot.savePNG(filename); + myConsole->frameBuffer().showMessage(result); #else myConsole->frameBuffer().showMessage("Snapshots unsupported"); #endif diff --git a/stella/src/emucore/EventHandler.hxx b/stella/src/emucore/EventHandler.hxx index 1dee84e20..85f188cc6 100644 --- a/stella/src/emucore/EventHandler.hxx +++ b/stella/src/emucore/EventHandler.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.hxx,v 1.13 2003-11-24 14:51:06 stephena Exp $ +// $Id: EventHandler.hxx,v 1.14 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef EVENTHANDLER_HXX @@ -24,7 +24,6 @@ #include "StellaEvent.hxx" class Console; -class MediaSource; /** @@ -41,7 +40,7 @@ class MediaSource; mapping can take place. @author Stephen Anthony - @version $Id: EventHandler.hxx,v 1.13 2003-11-24 14:51:06 stephena Exp $ + @version $Id: EventHandler.hxx,v 1.14 2004-06-20 23:30:48 stephena Exp $ */ class EventHandler { @@ -90,13 +89,6 @@ class EventHandler */ void sendEvent(Event::Type type, Int32 value); - /** - Set the mediasource. - - @param mediaSource The mediasource - */ - void setMediaSource(MediaSource* mediaSource); - /** Enable/disable remapping mode. @@ -146,9 +138,6 @@ class EventHandler // Global Event object Event* myEvent; - // Global mediasource object - MediaSource* myMediaSource; - // Indicates the current state to use for state loading/saving uInt32 myCurrentState; diff --git a/stella/src/emucore/FrameBuffer.hxx b/stella/src/emucore/FrameBuffer.hxx index dab18e2b0..ed2d66caa 100644 --- a/stella/src/emucore/FrameBuffer.hxx +++ b/stella/src/emucore/FrameBuffer.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.hxx,v 1.7 2003-11-24 14:51:06 stephena Exp $ +// $Id: FrameBuffer.hxx,v 1.8 2004-06-20 23:30:48 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_HXX @@ -35,7 +35,7 @@ class Console; can be changed. @author Stephen Anthony - @version $Id: FrameBuffer.hxx,v 1.7 2003-11-24 14:51:06 stephena Exp $ + @version $Id: FrameBuffer.hxx,v 1.8 2004-06-20 23:30:48 stephena Exp $ */ class FrameBuffer { @@ -193,6 +193,24 @@ class FrameBuffer */ virtual void pauseEvent(bool status) = 0; + /** + This routine is called to get the width of the onscreen image. + */ + virtual uInt32 winWidth() = 0; + + /** + This routine is called to get the height of the onscreen image. + */ + virtual uInt32 winHeight() = 0; + + /** + This routine is called to get the specified scanline data. + + @param row The row we are looking for + @param data The actual pixel data (in bytes) + */ + virtual void scanline(uInt32 row, uInt8* data) = 0; + protected: // The Console for the system Console* myConsole;