From 871a1a9c63dded0bba219856392b800651e03093 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 12 Feb 2004 06:49:13 +0000 Subject: [PATCH] add JPEG screenshots --- stepmania/src/RageDisplay.cpp | 41 ++++++ stepmania/src/RageDisplay.h | 5 +- stepmania/src/RageDisplay_D3D.cpp | 26 +--- stepmania/src/RageDisplay_D3D.h | 2 +- stepmania/src/RageDisplay_OGL.cpp | 22 +--- stepmania/src/RageDisplay_OGL.h | 2 +- stepmania/src/SDL_SaveJPEG.cpp | 203 ++++++++++++++++++++++++++++++ stepmania/src/SDL_SaveJPEG.h | 2 + stepmania/src/StepMania.cpp | 14 ++- stepmania/src/StepMania.dsp | 79 +++++++----- stepmania/src/StepMania.vcproj | 6 + 11 files changed, 323 insertions(+), 79 deletions(-) create mode 100644 stepmania/src/SDL_SaveJPEG.cpp create mode 100644 stepmania/src/SDL_SaveJPEG.h diff --git a/stepmania/src/RageDisplay.cpp b/stepmania/src/RageDisplay.cpp index 39826d09b3..ca5de4d1d9 100644 --- a/stepmania/src/RageDisplay.cpp +++ b/stepmania/src/RageDisplay.cpp @@ -18,6 +18,8 @@ #include "RageUtil.h" #include "GameConstantsAndTypes.h" #include "SDL_utils.h" +#include "SDL_image.h" +#include "RageFile.h" // // Statistics stuff @@ -634,3 +636,42 @@ void RageDisplay::ChangeCentering( int trans_x, int trans_y, float scale_x, floa RageMatrixScaling( &m2, scale_x, scale_y, 1 ); RageMatrixMultiply( &m_Centering, &m1, &m2 ); } + +bool RageDisplay::SaveScreenshot( CString sPath, GraphicsFileFormat format ) +{ + SDL_Surface* surface = this->CreateScreenshot(); + + CString buf; + buf.reserve( 1024*1024 ); + + SDL_RWops *rw = OpenRWops( buf ); + + switch( format ) + { + case bmp: + SDL_SaveBMP_RW( surface, rw, false ); + break; + case jpg: + IMG_SaveJPG_RW( surface, rw ); + break; + default: + ASSERT(0); + return false; + } + + SDL_FreeRW( rw ); + + SDL_FreeSurface( surface ); + surface = NULL; + + RageFile out; + if( !out.Open( sPath, RageFile::WRITE ) ) + { + LOG->Trace("Couldn't write %s: %s", sPath.c_str(), out.GetError().c_str() ); + return false; + } + + out.Write( buf ); + + return true; +} diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index acd2b02648..ca186b6f03 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -210,7 +210,8 @@ public: void DrawCircle( const RageSpriteVertex &v, float radius ); - virtual void SaveScreenshot( CString sPath ) = 0; + enum GraphicsFileFormat{ bmp, jpg }; + bool SaveScreenshot( CString sPath, GraphicsFileFormat format ); virtual CString GetTextureDiagnostics( unsigned id ) const { return ""; } @@ -219,11 +220,13 @@ protected: // bNewDeviceOut is set true if a new device was created and textures // need to be reloaded. virtual CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut ) = 0; + virtual SDL_Surface* CreateScreenshot() = 0; // allocates a surface. Caller must SDL_FreeSurface it. virtual void SetViewport(int shift_left, int shift_down) = 0; void DrawPolyLine(const RageSpriteVertex &p1, const RageSpriteVertex &p2, float LineWidth ); + // Stuff in RageDisplay.cpp void SetDefaultRenderStates(); diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index 81dae748d8..4167749706 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -670,7 +670,7 @@ bool RageDisplay_D3D::SupportsTextureFormat( PixelFormat pixfmt, bool realtime ) return SUCCEEDED( hr ); } -void RageDisplay_D3D::SaveScreenshot( CString sPath ) +SDL_Surface* RageDisplay_D3D::CreateScreenshot() { #ifndef _XBOX /* Get the back buffer. */ @@ -703,29 +703,13 @@ void RageDisplay_D3D::SaveScreenshot( CString sPath ) pCopy->LockRect( &lr, &rect, D3DLOCK_READONLY ); } - SDL_Surface *Texture = CreateSurfaceFromPixfmt( FMT_RGBA8, lr.pBits, desc.Width, desc.Height, lr.Pitch); - ASSERT( Texture ); - - CString buf; - buf.reserve( 1024*1024 ); - - SDL_RWops *rw = OpenRWops( buf ); - SDL_SaveBMP_RW( Texture, rw, false ); - SDL_FreeRW( rw ); - - SDL_FreeSurface( Texture ); - - RageFile out; - if( !out.Open( sPath, RageFile::WRITE ) ) - { - LOG->Trace("Couldn't write %s: %s", sPath.c_str(), out.GetError().c_str() ); - return; - } - - out.Write( buf ); + SDL_Surface *surface = CreateSurfaceFromPixfmt( FMT_RGBA8, lr.pBits, desc.Width, desc.Height, lr.Pitch); + ASSERT( surface ); pCopy->UnlockRect(); pCopy->Release(); + + return surface; #endif } diff --git a/stepmania/src/RageDisplay_D3D.h b/stepmania/src/RageDisplay_D3D.h index 4546801309..a9d80738d3 100644 --- a/stepmania/src/RageDisplay_D3D.h +++ b/stepmania/src/RageDisplay_D3D.h @@ -82,9 +82,9 @@ public: void DrawIndexedTriangles( const RageModelVertex v[], int iNumVerts, const Uint16* pIndices, int iNumIndices ); // void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth ); - void SaveScreenshot( CString sPath ); protected: CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut ); + SDL_Surface* CreateScreenshot(); void SetViewport(int shift_left, int shift_down); RageMatrix GetOrthoMatrix( float l, float r, float b, float t, float zn, float zf ); }; diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index a46746eb93..a96fd27a1d 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -742,10 +742,8 @@ bool RageDisplay_OGL::Supports4BitPalettes() return g_b4BitPalettesWork; } -void RageDisplay_OGL::SaveScreenshot( CString sPath ) +SDL_Surface* RageDisplay_OGL::CreateScreenshot() { - ASSERT( sPath.Right(3).CompareNoCase("bmp") == 0 ); // we can only save bitmaps - int width = wind->GetVideoModeParams().width; int height = wind->GetVideoModeParams().height; @@ -770,23 +768,7 @@ void RageDisplay_OGL::SaveScreenshot( CString sPath ) 3*width ); SDL_FreeSurface( image ); - CString buf; - buf.reserve( 1024*1024 ); - - SDL_RWops *rw = OpenRWops( buf ); - SDL_SaveBMP_RW( temp, rw, false ); - SDL_FreeRW( rw ); - - SDL_FreeSurface( temp ); - - RageFile out; - if( !out.Open( sPath, RageFile::WRITE ) ) - { - LOG->Trace("Couldn't write %s: %s", sPath.c_str(), out.GetError().c_str() ); - return; - } - - out.Write( buf ); + return temp; } RageDisplay::VideoModeParams RageDisplay_OGL::GetVideoModeParams() const { return wind->GetVideoModeParams(); } diff --git a/stepmania/src/RageDisplay_OGL.h b/stepmania/src/RageDisplay_OGL.h index 8fd7a39587..651c8c1db2 100644 --- a/stepmania/src/RageDisplay_OGL.h +++ b/stepmania/src/RageDisplay_OGL.h @@ -70,9 +70,9 @@ public: CString GetTextureDiagnostics( unsigned id ) const; - void SaveScreenshot( CString sPath ); protected: CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut ); + SDL_Surface* CreateScreenshot(); void SetViewport(int shift_left, int shift_down); RageMatrix GetOrthoMatrix( float l, float r, float b, float t, float zn, float zf ); PixelFormat GetImgPixelFormat( SDL_Surface* &img, bool &FreeImg, int width, int height ); diff --git a/stepmania/src/SDL_SaveJPEG.cpp b/stepmania/src/SDL_SaveJPEG.cpp new file mode 100644 index 0000000000..c6e9dc631f --- /dev/null +++ b/stepmania/src/SDL_SaveJPEG.cpp @@ -0,0 +1,203 @@ +#include +#include +#include + +#include "SDL.h" + +#include "libjpeg/jpeglib.h" + + +/* Pull in JPEG library here. */ +#ifdef _XBOX + // FIXME +#elif defined _WINDOWS +#endif + + #pragma comment(lib, "libjpeg/jpeg.lib") + + + +#define OUTPUT_BUFFER_SIZE 4096 +typedef struct { + struct jpeg_destination_mgr pub; + + SDL_RWops *ctx; + Uint8 buffer[OUTPUT_BUFFER_SIZE]; +} my_destination_mgr; + + +/* + * Initialize source --- called by jpeg_read_header + * before any data is actually read. + */ +static void init_destination (j_compress_ptr cinfo) +{ + /* We don't actually need to do anything */ + return; +} + +/* + * Empty the output buffer --- called whenever buffer is full. + */ +static unsigned char empty_output_buffer (j_compress_ptr cinfo) +{ + my_destination_mgr * dest = (my_destination_mgr *) cinfo->dest; + int nbytes; + + nbytes = SDL_RWwrite(dest->ctx, dest->buffer, 1, OUTPUT_BUFFER_SIZE); + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUFFER_SIZE; + + return TRUE; +} + + +/* + * Terminate source --- called by jpeg_finish_decompress + * after all data has been read. + */ +static void term_destination (j_compress_ptr cinfo) +{ + /* Write data remaining in the buffer */ + my_destination_mgr * dest = (my_destination_mgr *) cinfo->dest; + int nbytes; + + nbytes = SDL_RWwrite(dest->ctx, dest->buffer, 1, OUTPUT_BUFFER_SIZE - dest->pub.free_in_buffer); + dest->pub.next_output_byte = dest->buffer; + dest->pub.free_in_buffer = OUTPUT_BUFFER_SIZE; + + return; +} + +/* + * Prepare for output to a stdio stream. + * The caller must have already opened the stream, and is responsible + * for closing it after finishing decompression. + */ +static void jpeg_SDL_RW_dest(j_compress_ptr cinfo, SDL_RWops *ctx) +{ + my_destination_mgr *dest; + + /* The source object and input buffer are made permanent so that a series + * of JPEG images can be read from the same file by calling jpeg_stdio_src + * only before the first one. (If we discarded the buffer at the end of + * one image, we'd likely lose the start of the next one.) + * This makes it unsafe to use this manager and a different source + * manager serially with the same JPEG object. Caveat programmer. + */ + if (cinfo->dest == NULL) { /* first time for this JPEG object? */ + cinfo->dest = (struct jpeg_destination_mgr *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, + sizeof(my_destination_mgr)); + dest = (my_destination_mgr *) cinfo->dest; + } + + dest = (my_destination_mgr *) cinfo->dest; + dest->pub.init_destination = init_destination; + dest->pub.empty_output_buffer = empty_output_buffer; + dest->pub.term_destination = term_destination; + dest->ctx = ctx; + dest->pub.free_in_buffer = OUTPUT_BUFFER_SIZE; /* forces fill_input_buffer on first read */ + dest->pub.next_output_byte = dest->buffer; /* until buffer loaded */ +} + +/* Save a JPEG to a file. cjpeg.c and example.c from jpeglib were helpful in writing this. */ +void IMG_SaveJPG_RW(SDL_Surface *surface, SDL_RWops *dest) +{ +#define filename file + + + /* This struct contains the JPEG compression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + * It is possible to have several such structures, representing multiple + * compression/decompression processes, in existence at once. We refer + * to any one struct (and its associated working data) as a "JPEG object". + */ + struct jpeg_compress_struct cinfo; + /* This struct represents a JPEG error handler. It is declared separately + * because applications often want to supply a specialized error handler + * (see the second half of this file for an example). But here we just + * take the easy way out and use the standard error handler, which will + * print a message on stderr and call exit() if compression fails. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct jpeg_error_mgr jerr; + /* More stuff */ + JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ + int row_stride; /* physical row width in image buffer */ + + /* Step 1: allocate and initialize JPEG compression object */ + + /* We have to set up the error handler first, in case the initialization + * step fails. (Unlikely, but it could happen if you are out of memory.) + * This routine fills in the contents of struct jerr, and returns jerr's + * address which we place into the link field in cinfo. + */ + cinfo.err = jpeg_std_error(&jerr); + /* Now we can initialize the JPEG compression object. */ + jpeg_create_compress(&cinfo); + + /* Step 2: specify data destination (eg, a file) */ + /* Note: steps 2 and 3 can be done in either order. */ + + /* Here we use the library-supplied code to send compressed data to a + * stdio stream. You can also write your own code to do something else. + * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that + * requires it in order to write binary files. + */ + jpeg_SDL_RW_dest(&cinfo, dest); + + /* Step 3: set parameters for compression */ + + /* First we supply a description of the input image. + * Four fields of the cinfo struct must be filled in: + */ + cinfo.image_width = surface->w; /* image width and height, in pixels */ + cinfo.image_height = surface->h; + cinfo.input_components = 3; /* # of color components per pixel */ + cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ + /* Now use the library's routine to set default compression parameters. + * (You must set at least cinfo.in_color_space before calling this, + * since the defaults depend on the source color space.) + */ + jpeg_set_defaults(&cinfo); + + /* Step 4: Start compressor */ + + /* TRUE ensures that we will write a complete interchange-JPEG file. + * Pass TRUE unless you are very sure of what you're doing. + */ + jpeg_start_compress(&cinfo, TRUE); + + /* Step 5: while (scan lines remain to be written) */ + /* jpeg_write_scanlines(...); */ + + /* Here we use the library's state variable cinfo.next_scanline as the + * loop counter, so that we don't have to keep track ourselves. + * To keep things simple, we pass one scanline per call; you can pass + * more if you wish, though. + */ + row_stride = surface->pitch; /* JSAMPLEs per row in image_buffer */ + + while (cinfo.next_scanline < cinfo.image_height) { + /* jpeg_write_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could pass + * more than one scanline at a time if that's more convenient. + */ + row_pointer[0] = & ((JSAMPLE*)surface->pixels)[cinfo.next_scanline * row_stride]; + (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); + } + + /* Step 6: Finish compression */ + + jpeg_finish_compress(&cinfo); + /* After finish_compress, we can close the output file. */ + + /* Step 7: release JPEG compression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_compress(&cinfo); + + /* And we're done! */ +} \ No newline at end of file diff --git a/stepmania/src/SDL_SaveJPEG.h b/stepmania/src/SDL_SaveJPEG.h new file mode 100644 index 0000000000..52106df559 --- /dev/null +++ b/stepmania/src/SDL_SaveJPEG.h @@ -0,0 +1,2 @@ + +void IMG_SaveJPG_RW(SDL_Surface *surface, SDL_RWops *dest); diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index ea773eb727..a6b4c5473d 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -1176,6 +1176,9 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam (INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, SDLK_RMETA)) || INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, SDLK_LMETA))))) { + // If holding LShift save a BMP, else save a JPG + bool bSaveBmp = INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, SDLK_LSHIFT) ); + // Save Screenshot. CString sPath; @@ -1184,13 +1187,16 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam /* XXX slow? */ for( int i=0; i<10000; i++ ) { - sPath = ssprintf("Screenshots/screen%04d.bmp",i); + sPath = ssprintf("Screenshots/screen%04d.%s",i,bSaveBmp?"bmp":"jpg"); if( !DoesFileExist(sPath) ) break; } - DISPLAY->SaveScreenshot( sPath ); - SOUND->PlayOnce( THEME->GetPathToS("Common screenshot") ); - return true; + bool bResult = DISPLAY->SaveScreenshot( sPath, bSaveBmp ? RageDisplay::bmp : RageDisplay::jpg ); + if( bResult ) + SOUND->PlayOnce( THEME->GetPathToS("Common screenshot") ); + else + SOUND->PlayOnce( THEME->GetPathToS("Common invalid") ); + return true; // handled } if(DeviceI == DeviceInput(DEVICE_KEYBOARD, SDLK_RETURN)) diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 7632b5a976..57cb71e010 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -1,5 +1,5 @@ # Microsoft Developer Studio Project File - Name="StepMania" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# Microsoft Developer Studio Generated Build File, Format Version 60000 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 @@ -65,7 +65,7 @@ IntDir=.\../Debug6 TargetDir=\stepmania\stepmania\Program TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -82,29 +82,28 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "../Debug_Xbox" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP # ADD LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /map /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP # SUBTRACT LINK32 /incremental:no -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO # Begin Special Build Tool IntDir=.\../Debug_Xbox TargetDir=\stepmania\stepmania TargetName=default SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c \ -PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool !ELSEIF "$(CFG)" == "StepMania - Win32 Release" @@ -143,7 +142,7 @@ IntDir=.\../Release6 TargetDir=\stepmania\stepmania\Program TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -161,30 +160,29 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "../Release_Xbox" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe" # SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # ADD LINK32 $(intdir)\verstub.obj xapilib.lib d3d8.lib d3dx8.lib xgraphics.lib dsound.lib dmusic.lib xnet.lib xboxkrnl.lib libcmt.lib /nologo /incremental:no /map /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF # SUBTRACT LINK32 /pdb:none /debug -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO # Begin Special Build Tool IntDir=.\../Release_Xbox TargetDir=\stepmania\stepmania TargetName=default SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c \ -PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool !ENDIF @@ -313,6 +311,25 @@ SOURCE=.\SDL_rotozoom.h # End Source File # Begin Source File +SOURCE=.\SDL_SaveJPEG.cpp + +!IF "$(CFG)" == "StepMania - Win32 Debug" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" + +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Release" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\SDL_SaveJPEG.h +# End Source File +# Begin Source File + SOURCE=.\SDL_utils.cpp !IF "$(CFG)" == "StepMania - Win32 Debug" diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index 41fd916828..29cbf2ed5a 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -1821,6 +1821,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + +