From eea91e9a1a6334b39cf1328f60473e75c1d59632 Mon Sep 17 00:00:00 2001 From: "wrenczes@gmail.com" Date: Wed, 10 Nov 2010 02:24:39 +0000 Subject: [PATCH] Two changes here: 1) Consolidated the Loggers so that we only have one in JGE. Added a helper constructor/destructor to the JLogger class so that you can instantiate one at the top of a function, it'll trace out a 'start' and 'end' message when it goes in & out of scope. 2) Fixed the crash part of a bug I've been chasing down where, on the psp, after saturating the cache, the game dies when trying to reload the background PNG image of the deck menu. We still need to fix the root cause of the failure (not enough memory to allocate a temporary buffer for the swizzle operation), but at least the psp doesn't lock up anymore. I've also left behind all the log traces I inserted into the LoadPNG code, since we'll probably need them again. --- JGE/JGE.vcproj | 4 + {projects/mtg => JGE}/include/DebugRoutines.h | 2 - JGE/include/JLogger.h | 18 +- JGE/src/JGfx.cpp | 296 ++++++++++-------- JGE/src/JLogger.cpp | 37 ++- projects/mtg/Makefile | 2 +- projects/mtg/include/GameApp.h | 4 - projects/mtg/include/Logger.h | 19 -- projects/mtg/include/PrecompiledHeader.h | 1 + projects/mtg/src/Logger.cpp | 19 -- projects/mtg/template.vcproj | 8 - 11 files changed, 202 insertions(+), 208 deletions(-) rename {projects/mtg => JGE}/include/DebugRoutines.h (93%) delete mode 100644 projects/mtg/include/Logger.h delete mode 100644 projects/mtg/src/Logger.cpp diff --git a/JGE/JGE.vcproj b/JGE/JGE.vcproj index eee916f9c..fcfe45d11 100644 --- a/JGE/JGE.vcproj +++ b/JGE/JGE.vcproj @@ -705,6 +705,10 @@ Name="Header Files" Filter="h;hpp;hxx;hm;inl" > + + diff --git a/projects/mtg/include/DebugRoutines.h b/JGE/include/DebugRoutines.h similarity index 93% rename from projects/mtg/include/DebugRoutines.h rename to JGE/include/DebugRoutines.h index 667865a55..3ca522f60 100644 --- a/projects/mtg/include/DebugRoutines.h +++ b/JGE/include/DebugRoutines.h @@ -4,8 +4,6 @@ // dirty, but I get OS header includes this way #include "JGE.h" -#include "config.h" - #include #include #include diff --git a/JGE/include/JLogger.h b/JGE/include/JLogger.h index 44e862d6f..f47313db1 100644 --- a/JGE/include/JLogger.h +++ b/JGE/include/JLogger.h @@ -1,19 +1,27 @@ #ifndef _JLOGGER_H_ #define _JLOGGER_H_ //logging facility -//#define DOJLOG +//#define DOLOG -#ifdef DOJLOG -#define JLOG(x) JLogger::Log(x); +#ifdef DOLOG +#define LOG(x) JLogger::Log(x); #else -#define JLOG(x) {}; +#define LOG(x) {}; #endif -#define JGE_LOG_FILE "jge_debug.txt" +// saving myself the pain of search/replace +#define JLOG(x) LOG(x) + +#define LOG_FILE "debug.txt" class JLogger{ public: static void Log(const char * text); + + JLogger(const char* text); + ~JLogger(); + + const char* mText; }; #endif \ No newline at end of file diff --git a/JGE/src/JGfx.cpp b/JGE/src/JGfx.cpp index c54c6ba12..615bb5258 100644 --- a/JGE/src/JGfx.cpp +++ b/JGE/src/JGfx.cpp @@ -21,6 +21,8 @@ #include "../include/vram.h" #include "../include/JLogger.h" +#include + #ifdef __cplusplus extern "C" { #endif @@ -853,7 +855,8 @@ void JRenderer::ScreenShot(const char* filename) static void PNGCustomWarningFn(png_structp png_ptr, png_const_charp warning_msg) { - // ignore PNG warnings + JLOG("PNG error callback fired!"); + JLOG(warning_msg); } static void PNGCustomReadDataFn(png_structp png_ptr, png_bytep data, png_size_t length) @@ -1195,6 +1198,7 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode bool done = false; + JLOG("Allocating Texture"); JTexture* tex = new JTexture(); if (tex) { @@ -1233,159 +1237,179 @@ JTexture* JRenderer::LoadTexture(const char* filename, int mode, int textureMode int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode, int textureMode) { JLOG("JRenderer::LoadPNG"); - textureInfo.mBits = NULL; + textureInfo.mBits = NULL; - bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM); - int pixelformat = PIXEL_FORMAT; + bool useVideoRAM = (mode == TEX_TYPE_USE_VRAM); + int pixelformat = PIXEL_FORMAT; - u32* p32; - u16* p16; - png_structp png_ptr; - png_infop info_ptr; - unsigned int sig_read = 0; - png_uint_32 width, height; - int bit_depth, color_type, interlace_type, x, y; - u32* line; + u32* p32; + u16* p16; + png_structp png_ptr; + png_infop info_ptr; + unsigned int sig_read = 0; + png_uint_32 width, height; + int bit_depth, color_type, interlace_type, x, y; + u32* line; - JFileSystem* fileSystem = JFileSystem::GetInstance(); - if (!fileSystem->OpenFile(filename)) return JGE_ERR_CANT_OPEN_FILE; + JFileSystem* fileSystem = JFileSystem::GetInstance(); + if (!fileSystem->OpenFile(filename)) return JGE_ERR_CANT_OPEN_FILE; - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) { - fileSystem->CloseFile(); - return JGE_ERR_PNG; - } - png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn); - info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) { - fileSystem->CloseFile(); - png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); - return JGE_ERR_PNG; - } - png_init_io(png_ptr, NULL); - png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn); + JLOG("PNG opened - creating read struct"); + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (png_ptr == NULL) { + fileSystem->CloseFile(); + return JGE_ERR_PNG; + } + JLOG("Setting error callback func"); + png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, PNGCustomWarningFn); + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) { + fileSystem->CloseFile(); + png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + return JGE_ERR_PNG; + } + png_init_io(png_ptr, NULL); + png_set_read_fn(png_ptr, (png_voidp)fileSystem, PNGCustomReadDataFn); - png_set_sig_bytes(png_ptr, sig_read); - png_read_info(png_ptr, info_ptr); - png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, int_p_NULL, int_p_NULL); - png_set_strip_16(png_ptr); - png_set_packing(png_ptr); - if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); - if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); - if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); - png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); - line = (u32*) malloc(width * 4); - if (!line) { - fileSystem->CloseFile(); - png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); - return JGE_ERR_MALLOC_FAILED; - } + png_set_sig_bytes(png_ptr, sig_read); + png_read_info(png_ptr, info_ptr); + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, int_p_NULL, int_p_NULL); + png_set_strip_16(png_ptr); + png_set_packing(png_ptr); + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr); + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr); + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr); + png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); + line = (u32*) malloc(width * 4); + if (!line) { + fileSystem->CloseFile(); + png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + return JGE_ERR_MALLOC_FAILED; + } - int texWidth = getNextPower2(width); - int texHeight = getNextPower2(height); + int texWidth = getNextPower2(width); + int texHeight = getNextPower2(height); - bool done = false; - PIXEL_TYPE* bits = NULL; - bool videoRAMUsed = false; - int size = texWidth * texHeight * sizeof(PIXEL_TYPE); + bool done = false; + PIXEL_TYPE* bits = NULL; + bool videoRAMUsed = false; + int size = texWidth * texHeight * sizeof(PIXEL_TYPE); + { + if (useVideoRAM) { - - if (useVideoRAM) - { - bits = (PIXEL_TYPE*) valloc(size); - videoRAMUsed = true; - } - - if (bits == NULL) - { - videoRAMUsed = false; - bits = (PIXEL_TYPE*) memalign(16, size); - } - - PIXEL_TYPE* buffer = bits; - - if (mSwizzle) - buffer = (PIXEL_TYPE*) memalign(16, texWidth * texHeight * sizeof(PIXEL_TYPE)); - - if (buffer) - { - p32 = (u32*) buffer; - p16 = (u16*) p32; - - for (y = 0; y < (int)height; y++) - { - png_read_row(png_ptr, (u8*) line, png_bytep_NULL); - for (x = 0; x < (int)width; x++) - { - u32 color32 = line[x]; - u16 color16; - int a = (color32 >> 24) & 0xff; - int r = color32 & 0xff; - int g = (color32 >> 8) & 0xff; - int b = (color32 >> 16) & 0xff; - switch (pixelformat) { - case PSP_DISPLAY_PIXEL_FORMAT_565: - color16 = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11); - *(p16+x) = color16; - break; - case PSP_DISPLAY_PIXEL_FORMAT_5551: - color16 = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10) | ((a >> 7) << 15); - *(p16+x) = color16; - break; - case PSP_DISPLAY_PIXEL_FORMAT_4444: - color16 = (r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8) | ((a >> 4) << 12); - *(p16+x) = color16; - break; - case PSP_DISPLAY_PIXEL_FORMAT_8888: - color32 = r | (g << 8) | (b << 16) | (a << 24); - *(p32+x) = color32; - break; - } - } - p32 += texWidth; - p16 += texWidth; - } - - if (mSwizzle) - { - swizzle_fast((u8*)bits, (const u8*)buffer, texWidth*sizeof(PIXEL_TYPE), texHeight); - free (buffer); - } - - done = true; - } + bits = (PIXEL_TYPE*) valloc(size); + videoRAMUsed = true; } - free (line); - png_read_end(png_ptr, info_ptr); - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + if (bits == NULL) + { + videoRAMUsed = false; + bits = (PIXEL_TYPE*) memalign(16, size); + } - fileSystem->CloseFile(); + PIXEL_TYPE* buffer = bits; - if (done) - { - textureInfo.mBits = (u8 *)bits; - textureInfo.mWidth = width; - textureInfo.mHeight = height; - textureInfo.mTexWidth = texWidth; - textureInfo.mTexHeight = texHeight; - textureInfo.mVRAM = videoRAMUsed; + if (mSwizzle) + { + JLOG("allocating swizzle buffer"); + buffer = (PIXEL_TYPE*) memalign(16, texWidth * texHeight * sizeof(PIXEL_TYPE)); + if (!buffer) + { + JLOG("failed to allocate destination swizzle buffer!"); + std::ostringstream stream; + stream << "Alloc failed for: Tex Width: " << texWidth << " Tex Height: " << texHeight << ", total bytes: " << texWidth * texHeight * sizeof(PIXEL_TYPE); + JLOG(stream.str().c_str()); + fileSystem->CloseFile(); + png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL); + return JGE_ERR_MALLOC_FAILED; + } + } + + if (buffer) + { + JLOG("buffer allocated"); + p32 = (u32*) buffer; + p16 = (u16*) p32; + + for (y = 0; y < (int)height; y++) + { + png_read_row(png_ptr, (u8*) line, png_bytep_NULL); + for (x = 0; x < (int)width; x++) + { + u32 color32 = line[x]; + u16 color16; + int a = (color32 >> 24) & 0xff; + int r = color32 & 0xff; + int g = (color32 >> 8) & 0xff; + int b = (color32 >> 16) & 0xff; + switch (pixelformat) { + case PSP_DISPLAY_PIXEL_FORMAT_565: + color16 = (r >> 3) | ((g >> 2) << 5) | ((b >> 3) << 11); + *(p16+x) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_5551: + color16 = (r >> 3) | ((g >> 3) << 5) | ((b >> 3) << 10) | ((a >> 7) << 15); + *(p16+x) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_4444: + color16 = (r >> 4) | ((g >> 4) << 4) | ((b >> 4) << 8) | ((a >> 4) << 12); + *(p16+x) = color16; + break; + case PSP_DISPLAY_PIXEL_FORMAT_8888: + color32 = r | (g << 8) | (b << 16) | (a << 24); + *(p32+x) = color32; + break; + } + } + p32 += texWidth; + p16 += texWidth; + } + + if (mSwizzle) + { + JLOG("performing swizzle"); + swizzle_fast((u8*)bits, (const u8*)buffer, texWidth*sizeof(PIXEL_TYPE), texHeight); + free (buffer); + } + + done = true; + } + } + + JLOG("Freeing line"); + free (line); + JLOG("Reading end"); + png_read_end(png_ptr, info_ptr); + JLOG("Destroying read struct"); + png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + + JLOG("Closing PNG"); + fileSystem->CloseFile(); + + if (done) + { + textureInfo.mBits = (u8 *)bits; + textureInfo.mWidth = width; + textureInfo.mHeight = height; + textureInfo.mTexWidth = texWidth; + textureInfo.mTexHeight = texHeight; + textureInfo.mVRAM = videoRAMUsed; JLOG("-- OK -- JRenderer::LoadPNG"); return 1; - } - else - { + } + else + { + JLOG("LoadPNG failure - deallocating bits"); + textureInfo.mBits = NULL; - textureInfo.mBits = NULL; - - if (videoRAMUsed) - vfree(bits); - else - free(bits); + if (videoRAMUsed) + vfree(bits); + else + free(bits); return JGE_ERR_GENERIC; - } + } } diff --git a/JGE/src/JLogger.cpp b/JGE/src/JLogger.cpp index 759663e11..dc2a5f9a2 100644 --- a/JGE/src/JLogger.cpp +++ b/JGE/src/JLogger.cpp @@ -1,25 +1,34 @@ #include "../include/JLogger.h" -#include -#include -using namespace std; +#include "../include/DebugRoutines.h" -#if defined (WIN32) -#include -#endif +#include void JLogger::Log(const char * text){ - ofstream file (JGE_LOG_FILE,ios_base::app); + std::ofstream file(LOG_FILE, std::ios_base::app); if (file){ file << text; file << "\n"; file.close(); } -#if defined (WIN32) && !defined(QT_CONFIG) - OutputDebugString(text); - OutputDebugString("\n"); -#else - printf("%s", text); - printf("\n"); -#endif + DebugTrace(text); } + +JLogger::JLogger(const char* text) : mText(text) +{ +#ifdef DOLOG + std::ostringstream stream; + stream << mText << ": Start"; + JLogger::Log(stream.str().c_str()); +#endif +} + +JLogger::~JLogger() +{ +#ifdef DOLOG + std::ostringstream stream; + stream << mText << ": End"; + JLogger::Log(stream.str().c_str()); +#endif +} + diff --git a/projects/mtg/Makefile b/projects/mtg/Makefile index 9222bd351..98a423371 100644 --- a/projects/mtg/Makefile +++ b/projects/mtg/Makefile @@ -1,4 +1,4 @@ -OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/AllAbilities.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/Logger.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o +OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/AllAbilities.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS)) RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache) diff --git a/projects/mtg/include/GameApp.h b/projects/mtg/include/GameApp.h index 600fcbad4..79ae4eec2 100644 --- a/projects/mtg/include/GameApp.h +++ b/projects/mtg/include/GameApp.h @@ -11,10 +11,6 @@ #ifndef _GAMEAPP_H_ #define _GAMEAPP_H_ - -#include "Logger.h" - - #include #include #include diff --git a/projects/mtg/include/Logger.h b/projects/mtg/include/Logger.h deleted file mode 100644 index a11f4d8ba..000000000 --- a/projects/mtg/include/Logger.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _LOGGER_H -#define _LOGGER_H_ - -//TODO Remove this and use the jge logging facility (same system) -//#define DOLOG - -#ifdef DOLOG -#define LOG_FILE "debug.txt" - -class Logger{ - public: - static void Log(const char * text); -}; -#define LOG(x) Logger::Log(x); -#else -#define LOG(x) -#endif - -#endif diff --git a/projects/mtg/include/PrecompiledHeader.h b/projects/mtg/include/PrecompiledHeader.h index 2a556df9b..b279a279c 100644 --- a/projects/mtg/include/PrecompiledHeader.h +++ b/projects/mtg/include/PrecompiledHeader.h @@ -17,5 +17,6 @@ #include "JGE.h" #include "JFileSystem.h" +#include "JLogger.h" #endif //PRECOMPILEDHEADER_H \ No newline at end of file diff --git a/projects/mtg/src/Logger.cpp b/projects/mtg/src/Logger.cpp deleted file mode 100644 index e4e605085..000000000 --- a/projects/mtg/src/Logger.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "PrecompiledHeader.h" - -#include "Logger.h" -#ifdef DOLOG - -using namespace std; - -void Logger::Log(const char * text){ - ofstream file (LOG_FILE,ios_base::app); - if (file){ - file << text; - file << "\n"; - file.close(); - } - - DebugTrace(text); -} - -#endif \ No newline at end of file diff --git a/projects/mtg/template.vcproj b/projects/mtg/template.vcproj index 8cae902cf..ed9504dfd 100644 --- a/projects/mtg/template.vcproj +++ b/projects/mtg/template.vcproj @@ -693,10 +693,6 @@ RelativePath=".\src\GuiStatic.cpp" > - - @@ -1158,10 +1154,6 @@ RelativePath=".\include\GuiStatic.h" > - -