Report filename in Collada warning messages.

Skip harmless warnings about missing materials in Collada files.

This was SVN commit r9512.
This commit is contained in:
Ykkrosh 2011-05-14 16:43:08 +00:00
parent 963960fafa
commit a976045f0f
4 changed files with 39 additions and 20 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009 Wildfire Games.
/* Copyright (C) 2011 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -74,14 +74,18 @@ FColladaErrorHandler::~FColladaErrorHandler()
void FColladaErrorHandler::OnError(FUError::Level errorLevel, uint32 errorCode, uint32 UNUSED(lineNumber))
{
// Ignore warnings about missing materials, since we ignore materials entirely anyway
if (errorCode == FUError::WARNING_INVALID_POLYGON_MAT_SYMBOL)
return;
const char* errorString = FUError::GetErrorString((FUError::Code) errorCode);
if (! errorString)
errorString = "Unknown error code";
if (errorLevel == FUError::DEBUG_LEVEL)
Log(LOG_INFO, "FCollada message %d: %s", errorCode, errorString);
Log(LOG_INFO, "FCollada %d: %s", errorCode, errorString);
else if (errorLevel == FUError::WARNING_LEVEL)
Log(LOG_WARNING, "FCollada warning %d: %s", errorCode, errorString);
Log(LOG_WARNING, "FCollada %d: %s", errorCode, errorString);
else
throw ColladaException(errorString);
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009 Wildfire Games.
/* Copyright (C) 2011 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -25,19 +25,26 @@
#include <cstdarg>
#include <cassert>
void default_logger(int severity, const char* message)
void default_logger(void*, int severity, const char* message)
{
fprintf(stderr, "[%d] %s\n", severity, message);
}
static LogFn g_Logger = &default_logger;
static void* g_LoggerCBData = NULL;
EXPORT void set_logger(LogFn logger)
EXPORT void set_logger(LogFn logger, void* cb_data)
{
if (logger)
{
g_Logger = logger;
g_LoggerCBData = cb_data;
}
else
{
g_Logger = &default_logger;
g_LoggerCBData = NULL;
}
}
void Log(int severity, const char* msg, ...)
@ -49,7 +56,7 @@ void Log(int severity, const char* msg, ...)
buffer[sizeof(buffer)-1] = '\0';
va_end(ap);
g_Logger(severity, buffer);
g_Logger(g_LoggerCBData, severity, buffer);
}
struct BufferedOutputCallback : public OutputCB

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009 Wildfire Games.
/* Copyright (C) 2011 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -36,14 +36,14 @@
#define LOG_WARNING 1
#define LOG_ERROR 2
typedef void (*LogFn) (int severity, const char* text);
typedef void (*LogFn) (void* cb_data, int severity, const char* text);
typedef void (*OutputFn) (void* cb_data, const char* data, unsigned int length);
/* This version number should be bumped whenever incompatible changes
* are made, to invalidate old caches. */
#define COLLADA_CONVERTER_VERSION 2
EXPORT void set_logger(LogFn logger);
EXPORT void set_logger(LogFn logger, void* cb_data);
EXPORT int set_skeleton_definitions(const char* xml, int length);
EXPORT int convert_dae_to_pmd(const char* dae, OutputFn pmd_writer, void* cb_data);
EXPORT int convert_dae_to_psa(const char* dae, OutputFn psa_writer, void* cb_data);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009 Wildfire Games.
/* Copyright (C) 2011 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -33,14 +33,16 @@ namespace Collada
namespace
{
void ColladaLog(int severity, const char* text)
void ColladaLog(void* cb_data, int severity, const char* text)
{
VfsPath* path = static_cast<VfsPath*>(cb_data);
if (severity == LOG_INFO)
LOGMESSAGE(L"Collada message: %hs", text);
LOGMESSAGE(L"%ls: %hs", path->string().c_str(), text);
else if (severity == LOG_WARNING)
LOGWARNING(L"Collada warning: %hs", text);
LOGWARNING(L"%ls: %hs", path->string().c_str(), text);
else
LOGERROR(L"Collada error: %hs", text);
LOGERROR(L"%ls: %hs", path->string().c_str(), text);
}
void ColladaOutput(void* cb_data, const char* data, unsigned int length)
@ -54,7 +56,7 @@ class CColladaManagerImpl
{
DllLoader dll;
void (*set_logger)(Collada::LogFn logger);
void (*set_logger)(Collada::LogFn logger, void* cb_data);
int (*set_skeleton_definitions)(const char* xml, int length);
int (*convert_dae_to_pmd)(const char* dae, Collada::OutputFn pmd_writer, void* cb_data);
int (*convert_dae_to_psa)(const char* dae, Collada::OutputFn psa_writer, void* cb_data);
@ -68,7 +70,7 @@ public:
~CColladaManagerImpl()
{
if (dll.IsLoaded())
set_logger(NULL); // unregister the log handler
set_logger(NULL, NULL); // unregister the log handler
}
bool Convert(const VfsPath& daeFilename, const VfsPath& pmdFilename, CColladaManager::FileType type)
@ -101,10 +103,13 @@ public:
return false;
}
set_logger(ColladaLog);
VfsPath skeletonPath("art/skeletons/skeletons.xml");
// Set the filename for the logger to report
set_logger(ColladaLog, static_cast<void*>(&skeletonPath));
CVFSFile skeletonFile;
if (skeletonFile.Load(g_VFS, L"art/skeletons/skeletons.xml") != PSRETURN_OK)
if (skeletonFile.Load(g_VFS, skeletonPath) != PSRETURN_OK)
{
LOGERROR(L"Failed to read skeleton definitions");
dll.Unload();
@ -124,6 +129,9 @@ public:
// as to why it's not picking up their changes
}
// Set the filename for the logger to report
set_logger(ColladaLog, const_cast<void*>(static_cast<const void*>(&daeFilename)));
// We need to null-terminate the buffer, so do it (possibly inefficiently)
// by converting to a CStr
CStr daeData;
@ -145,7 +153,7 @@ public:
// don't create zero-length files (as happens in test_invalid_dae when
// we deliberately pass invalid XML data) because the VFS caching
// logic warns when asked to load such.
if(writeBuffer.Size())
if (writeBuffer.Size())
{
Status ret = g_VFS->CreateFile(pmdFilename, writeBuffer.Data(), writeBuffer.Size());
ENSURE(ret == INFO::OK);