forked from 0ad/0ad
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:
parent
963960fafa
commit
a976045f0f
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user