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.
This commit is contained in:
@@ -705,6 +705,10 @@
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\include\DebugRoutines.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\include\decoder_prx.h"
|
||||
>
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
// dirty, but I get OS header includes this way
|
||||
#include "JGE.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
@@ -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
|
||||
@@ -21,6 +21,8 @@
|
||||
#include "../include/vram.h"
|
||||
#include "../include/JLogger.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#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)
|
||||
{
|
||||
@@ -1250,11 +1254,13 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
JFileSystem* fileSystem = JFileSystem::GetInstance();
|
||||
if (!fileSystem->OpenFile(filename)) return JGE_ERR_CANT_OPEN_FILE;
|
||||
|
||||
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) {
|
||||
@@ -1290,7 +1296,6 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
int size = texWidth * texHeight * sizeof(PIXEL_TYPE);
|
||||
|
||||
{
|
||||
|
||||
if (useVideoRAM)
|
||||
{
|
||||
bits = (PIXEL_TYPE*) valloc(size);
|
||||
@@ -1306,10 +1311,24 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
PIXEL_TYPE* buffer = bits;
|
||||
|
||||
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;
|
||||
|
||||
@@ -1349,6 +1368,7 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
|
||||
if (mSwizzle)
|
||||
{
|
||||
JLOG("performing swizzle");
|
||||
swizzle_fast((u8*)bits, (const u8*)buffer, texWidth*sizeof(PIXEL_TYPE), texHeight);
|
||||
free (buffer);
|
||||
}
|
||||
@@ -1357,10 +1377,14 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -1377,7 +1401,7 @@ int JRenderer::LoadPNG(TextureInfo &textureInfo, const char* filename, int mode,
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
JLOG("LoadPNG failure - deallocating bits");
|
||||
textureInfo.mBits = NULL;
|
||||
|
||||
if (videoRAMUsed)
|
||||
|
||||
@@ -1,25 +1,34 @@
|
||||
#include "../include/JLogger.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
#include "../include/DebugRoutines.h"
|
||||
|
||||
#if defined (WIN32)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <fstream>
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
#ifndef _GAMEAPP_H_
|
||||
#define _GAMEAPP_H_
|
||||
|
||||
|
||||
#include "Logger.h"
|
||||
|
||||
|
||||
#include <JApp.h>
|
||||
#include <JGE.h>
|
||||
#include <JSprite.h>
|
||||
|
||||
@@ -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
|
||||
@@ -17,5 +17,6 @@
|
||||
|
||||
#include "JGE.h"
|
||||
#include "JFileSystem.h"
|
||||
#include "JLogger.h"
|
||||
|
||||
#endif //PRECOMPILEDHEADER_H
|
||||
@@ -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
|
||||
@@ -693,10 +693,6 @@
|
||||
RelativePath=".\src\GuiStatic.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\Logger.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\src\ManaCost.cpp"
|
||||
>
|
||||
@@ -1158,10 +1154,6 @@
|
||||
RelativePath=".\include\GuiStatic.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\include\Logger.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\include\Manacost.h"
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user