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" > - -