mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-21 00:18:43 +00:00
Merge with feature-material-editor
--HG-- branch : develop
This commit is contained in:
commit
a34fd8b88f
14 changed files with 378 additions and 32 deletions
|
@ -28,6 +28,8 @@ typedef NLMISC::CSString TPathString;
|
||||||
typedef std::string TPathString;
|
typedef std::string TPathString;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
/// Asset database configuration
|
/// Asset database configuration
|
||||||
class CDatabaseConfig
|
class CDatabaseConfig
|
||||||
{
|
{
|
||||||
|
@ -55,4 +57,6 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
/* end of file */
|
/* end of file */
|
79
code/nel/include/nel/pipeline/project_config.h
Normal file
79
code/nel/include/nel/pipeline/project_config.h
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
// Copyright (C) 2015 Winch Gate Property Limited
|
||||||
|
// Author: Jan Boon <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#ifndef NLPIPELINE_PROJECT_CONFIG_H
|
||||||
|
#define NLPIPELINE_PROJECT_CONFIG_H
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
|
||||||
|
namespace NLMISC {
|
||||||
|
class CConfigFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NL_OS_WINDOWS
|
||||||
|
#include <nel/misc/sstring.h>
|
||||||
|
typedef NLMISC::CSString TPathString;
|
||||||
|
#else
|
||||||
|
typedef std::string TPathString;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
|
/// Asset project configuration. Used to configure lookup directories for tools and buildsite specific setup. Do not use for pipeline build settings
|
||||||
|
class CProjectConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Flags
|
||||||
|
{
|
||||||
|
DatabaseTextureSearchPaths = 0x0001,
|
||||||
|
DatabaseMaterialSearchPaths = 0x0002,
|
||||||
|
RuntimeTextureSearchPaths = 0x0100,
|
||||||
|
RuntimeShapeSearchPaths = 0x0200,
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
~CProjectConfig();
|
||||||
|
|
||||||
|
/// Searches for the configuration for the specified asset path by recursively going through all parent directories looking for 'nel.cfg', matches it to a project cfg if partial is not set, initializes and applies the configuration.
|
||||||
|
static bool init(const std::string &asset, Flags flags, bool partial = false);
|
||||||
|
/// Undo init
|
||||||
|
static void release();
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void cleanup();
|
||||||
|
static void searchDirectories(const char *var);
|
||||||
|
|
||||||
|
static CProjectConfig s_Instance;
|
||||||
|
|
||||||
|
static uint32 s_AssetConfigModification;
|
||||||
|
static uint32 s_ProjectConfigModification;
|
||||||
|
|
||||||
|
static TPathString s_AssetConfigPath;
|
||||||
|
static TPathString s_ProjectConfigPath;
|
||||||
|
|
||||||
|
static std::string s_ProjectName;
|
||||||
|
static CProjectConfig::Flags CProjectConfig::s_InitFlags;
|
||||||
|
|
||||||
|
static std::vector<TPathString> s_ConfigPaths;
|
||||||
|
static std::vector<NLMISC::CConfigFile *> s_ConfigFiles;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
|
#endif /* #ifndef NLPIPELINE_PROJECT_CONFIG_H */
|
||||||
|
|
||||||
|
/* end of file */
|
|
@ -27,8 +27,8 @@
|
||||||
* <http://www.gnu.org/licenses/>.
|
* <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NLMISC_TOOL_LOGGER_H
|
#ifndef NLPIPELINE_TOOL_LOGGER_H
|
||||||
#define NLMISC_TOOL_LOGGER_H
|
#define NLPIPELINE_TOOL_LOGGER_H
|
||||||
#include <nel/misc/types_nl.h>
|
#include <nel/misc/types_nl.h>
|
||||||
|
|
||||||
// STL includes
|
// STL includes
|
||||||
|
@ -47,16 +47,16 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NL_DEBUG_H
|
#ifdef NL_DEBUG_H
|
||||||
#define tlerror(toolLogger, path, error, ...) nlwarning(error, ## __VA_ARGS__), toolLogger.writeError(NLMISC::ERROR, path, error, ## __VA_ARGS__)
|
#define tlerror(toolLogger, path, error, ...) nlwarning(error, ## __VA_ARGS__), toolLogger.writeError(NLPIPELINE::ERROR, path, error, ## __VA_ARGS__)
|
||||||
#define tlwarning(toolLogger, path, error, ...) nlwarning(error, ## __VA_ARGS__), toolLogger.writeError(NLMISC::WARNING, path, error, ## __VA_ARGS__)
|
#define tlwarning(toolLogger, path, error, ...) nlwarning(error, ## __VA_ARGS__), toolLogger.writeError(NLPIPELINE::WARNING, path, error, ## __VA_ARGS__)
|
||||||
#define tlmessage(toolLogger, path, error, ...) nlinfo(error, ## __VA_ARGS__), toolLogger.writeError(NLMISC::MESSAGE, path, error, ## __VA_ARGS__)
|
#define tlmessage(toolLogger, path, error, ...) nlinfo(error, ## __VA_ARGS__), toolLogger.writeError(NLPIPELINE::MESSAGE, path, error, ## __VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
#define tlerror(toolLogger, path, error, ...) toolLogger.writeError(NLMISC::ERROR, path, error, ## __VA_ARGS__)
|
#define tlerror(toolLogger, path, error, ...) toolLogger.writeError(NLPIPELINE::ERROR, path, error, ## __VA_ARGS__)
|
||||||
#define tlwarning(toolLogger, path, error, ...) toolLogger.writeError(NLMISC::WARNING, path, error, ## __VA_ARGS__)
|
#define tlwarning(toolLogger, path, error, ...) toolLogger.writeError(NLPIPELINE::WARNING, path, error, ## __VA_ARGS__)
|
||||||
#define tlmessage(toolLogger, path, error, ...) toolLogger.writeError(NLMISC::MESSAGE, path, error, ## __VA_ARGS__)
|
#define tlmessage(toolLogger, path, error, ...) toolLogger.writeError(NLPIPELINE::MESSAGE, path, error, ## __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace NLMISC {
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
enum TError
|
enum TError
|
||||||
{
|
{
|
||||||
|
@ -203,8 +203,8 @@ public:
|
||||||
}
|
}
|
||||||
}; /* class CToolLogger */
|
}; /* class CToolLogger */
|
||||||
|
|
||||||
} /* namespace NLMISC */
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
#endif /* #ifndef NLMISC_TOOL_LOGGER_H */
|
#endif /* #ifndef NLPIPELINE_TOOL_LOGGER_H */
|
||||||
|
|
||||||
/* end of file */
|
/* end of file */
|
|
@ -35,3 +35,7 @@ ENDIF(WITH_NEL_CEGUI)
|
||||||
IF(WITH_PACS)
|
IF(WITH_PACS)
|
||||||
ADD_SUBDIRECTORY(pacs)
|
ADD_SUBDIRECTORY(pacs)
|
||||||
ENDIF(WITH_PACS)
|
ENDIF(WITH_PACS)
|
||||||
|
|
||||||
|
IF(WITH_NEL_TOOLS)
|
||||||
|
ADD_SUBDIRECTORY(pipeline)
|
||||||
|
ENDIF(WITH_NEL_TOOLS)
|
||||||
|
|
18
code/nel/src/pipeline/CMakeLists.txt
Normal file
18
code/nel/src/pipeline/CMakeLists.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
FILE(GLOB SRC *.cpp *.h)
|
||||||
|
FILE(GLOB HEADERS ../../include/nel/pipeline/*.h)
|
||||||
|
|
||||||
|
SOURCE_GROUP("" FILES ${HEADERS} ${SRC})
|
||||||
|
|
||||||
|
NL_TARGET_LIB(nelpipeline ${HEADERS} ${SRC})
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR})
|
||||||
|
|
||||||
|
TARGET_LINK_LIBRARIES(nelpipeline nelmisc)
|
||||||
|
NL_DEFAULT_PROPS(nelpipeline "NeL, Library: NeL Pipeline")
|
||||||
|
NL_ADD_RUNTIME_FLAGS(nelpipeline)
|
||||||
|
|
||||||
|
NL_ADD_LIB_SUFFIX(nelpipeline)
|
||||||
|
|
||||||
|
IF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC)
|
||||||
|
INSTALL(TARGETS nelpipeline LIBRARY DESTINATION ${NL_LIB_PREFIX} ARCHIVE DESTINATION ${NL_LIB_PREFIX} COMPONENT libraries)
|
||||||
|
ENDIF((WITH_INSTALL_LIBRARIES AND WITH_STATIC) OR NOT WITH_STATIC)
|
|
@ -16,7 +16,7 @@
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include <nel/misc/types_nl.h>
|
#include <nel/misc/types_nl.h>
|
||||||
#include "database_config.h"
|
#include "nel/pipeline/database_config.h"
|
||||||
|
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
|
@ -25,6 +25,8 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace NLMISC;
|
using namespace NLMISC;
|
||||||
|
|
||||||
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
TPathString CDatabaseConfig::s_RootPath;
|
TPathString CDatabaseConfig::s_RootPath;
|
||||||
NLMISC::CConfigFile *CDatabaseConfig::s_ConfigFile = NULL;
|
NLMISC::CConfigFile *CDatabaseConfig::s_ConfigFile = NULL;
|
||||||
CDatabaseConfig CDatabaseConfig::s_Instance;
|
CDatabaseConfig CDatabaseConfig::s_Instance;
|
||||||
|
@ -104,4 +106,6 @@ void CDatabaseConfig::release()
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
/* end of file */
|
/* end of file */
|
238
code/nel/src/pipeline/project_config.cpp
Normal file
238
code/nel/src/pipeline/project_config.cpp
Normal file
|
@ -0,0 +1,238 @@
|
||||||
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||||
|
// Copyright (C) 2015 Winch Gate Property Limited
|
||||||
|
// Author: Jan Boon <jan.boon@kaetemi.be>
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
#include "nel/pipeline/project_config.h"
|
||||||
|
|
||||||
|
#ifdef NL_OS_WINDOWS
|
||||||
|
# include <Windows.h>
|
||||||
|
#else
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <nel/misc/debug.h>
|
||||||
|
#include <nel/misc/path.h>
|
||||||
|
#include <nel/misc/config_file.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace NLMISC;
|
||||||
|
|
||||||
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
|
TPathString CProjectConfig::s_AssetConfigPath;
|
||||||
|
TPathString CProjectConfig::s_ProjectConfigPath;
|
||||||
|
std::vector<NLMISC::CConfigFile *> CProjectConfig::s_ConfigFiles;
|
||||||
|
std::vector<TPathString> CProjectConfig::s_ConfigPaths;
|
||||||
|
CProjectConfig CProjectConfig::s_Instance;
|
||||||
|
uint32 CProjectConfig::s_AssetConfigModification;
|
||||||
|
uint32 CProjectConfig::s_ProjectConfigModification;
|
||||||
|
CProjectConfig::Flags CProjectConfig::s_InitFlags = (CProjectConfig::Flags)0;
|
||||||
|
std::string CProjectConfig::s_ProjectName;
|
||||||
|
|
||||||
|
static std::set<TPathString> s_SearchPaths;
|
||||||
|
|
||||||
|
void CProjectConfig::cleanup()
|
||||||
|
{
|
||||||
|
for (std::vector<NLMISC::CConfigFile *>::iterator it(s_ConfigFiles.begin()), end(s_ConfigFiles.end()); it != end; ++it)
|
||||||
|
delete *it;
|
||||||
|
s_ConfigFiles.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
CProjectConfig::~CProjectConfig()
|
||||||
|
{
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CProjectConfig::init(const std::string &asset, Flags flags, bool partial)
|
||||||
|
{
|
||||||
|
TPathString rootPath = NLMISC::CPath::standardizePath(asset, false);
|
||||||
|
TPathString configPath = rootPath + "/nel.cfg";
|
||||||
|
while (!CFile::fileExists(configPath))
|
||||||
|
{
|
||||||
|
int sep = CFile::getLastSeparator(rootPath);
|
||||||
|
if (sep == string::npos)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
rootPath = rootPath.substr(0, sep);
|
||||||
|
if (rootPath.empty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
configPath = rootPath + "/nel.cfg";
|
||||||
|
}
|
||||||
|
|
||||||
|
rootPath += "/";
|
||||||
|
uint32 configFileModification = CFile::getFileModificationDate(configPath);
|
||||||
|
bool assetConfigSame = configPath == s_AssetConfigPath && s_AssetConfigModification == configFileModification && s_InitFlags == flags;
|
||||||
|
|
||||||
|
std::vector<TPathString> configRootPaths;
|
||||||
|
TPathString projectConfigPath;
|
||||||
|
uint32 projectConfigModification;
|
||||||
|
std::string projectName;
|
||||||
|
if (partial)
|
||||||
|
{
|
||||||
|
if (assetConfigSame && s_ProjectConfigPath.empty())
|
||||||
|
return true; // Do not reload
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (assetConfigSame && !s_ProjectConfigPath.empty() && CFile::fileExists(s_ProjectConfigPath))
|
||||||
|
{
|
||||||
|
projectConfigModification = CFile::getFileModificationDate(s_ProjectConfigPath);
|
||||||
|
|
||||||
|
if (s_ProjectConfigModification == projectConfigModification)
|
||||||
|
return true; // Do not reload
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for project and load up all root paths
|
||||||
|
std::vector<std::string> files;
|
||||||
|
CPath::getPathContent(CPath::getApplicationDirectory("NeL", true) + "/projects", false, false, true, files);
|
||||||
|
for (std::vector<std::string>::iterator it(files.begin()), end(files.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
const std::string& file = *it;
|
||||||
|
if (file.length() >= 4 && (file.compare(file.length() - 4, 4, ".cfg") == 0))
|
||||||
|
{
|
||||||
|
CConfigFile project;
|
||||||
|
project.load(file);
|
||||||
|
CConfigFile::CVar &directories = project.getVar("Directories");
|
||||||
|
bool isProject = false;
|
||||||
|
for (uint i = 0; i < directories.size(); ++i)
|
||||||
|
{
|
||||||
|
if (rootPath == CPath::standardizePath(directories.asString(i), true))
|
||||||
|
{
|
||||||
|
isProject = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isProject)
|
||||||
|
{
|
||||||
|
projectConfigModification = CFile::getFileModificationDate(file);
|
||||||
|
projectConfigPath = file;
|
||||||
|
|
||||||
|
for (uint i = 0; i < directories.size(); ++i)
|
||||||
|
{
|
||||||
|
std::string dir = CPath::standardizePath(directories.asString(i), true);
|
||||||
|
std::string cfgPath = dir + "nel.cfg";
|
||||||
|
if (CFile::fileExists(cfgPath))
|
||||||
|
configRootPaths.push_back(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
projectName = project.getVar("ProjectName").asString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (projectConfigPath.empty())
|
||||||
|
{
|
||||||
|
projectName = "NeL Project";
|
||||||
|
configRootPaths.push_back(rootPath);
|
||||||
|
projectConfigModification = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
nldebug("Initializing project config '%s'", projectConfigPath.empty() ? configPath.c_str() : projectConfigPath.c_str());
|
||||||
|
release();
|
||||||
|
|
||||||
|
s_InitFlags = flags;
|
||||||
|
s_AssetConfigPath = configPath;
|
||||||
|
s_AssetConfigModification = configFileModification;
|
||||||
|
s_ProjectConfigPath = projectConfigPath;
|
||||||
|
s_ProjectConfigModification = projectConfigModification;
|
||||||
|
s_ProjectName = projectName;
|
||||||
|
s_ConfigPaths = configRootPaths;
|
||||||
|
|
||||||
|
std::map<std::string, CConfigFile *> configFiles;
|
||||||
|
for (std::vector<TPathString>::iterator it(configRootPaths.begin()), end(configRootPaths.end()); it != end; ++it)
|
||||||
|
{
|
||||||
|
const std::string &dir = *it;
|
||||||
|
const std::string &cfgPath = *it + "nel.cfg";
|
||||||
|
CConfigFile *cfgFile = new CConfigFile();
|
||||||
|
cfgFile->load(cfgPath);
|
||||||
|
std::string identifier = cfgFile->getVar("Identifier").asString();
|
||||||
|
if (configFiles.find(identifier) != configFiles.end()) // Identifier already exists
|
||||||
|
{
|
||||||
|
if (dir == rootPath)
|
||||||
|
{
|
||||||
|
// Replace config that was already added, asset root gets priority
|
||||||
|
std::vector<NLMISC::CConfigFile *>::iterator old = std::find(s_ConfigFiles.begin(), s_ConfigFiles.end(), configFiles[identifier]);
|
||||||
|
uint idx = old - s_ConfigFiles.begin();
|
||||||
|
s_ConfigFiles.erase(old);
|
||||||
|
s_ConfigPaths.erase(s_ConfigPaths.begin() + idx);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Skip, first listed config gets priority
|
||||||
|
s_ConfigPaths.erase(s_ConfigPaths.begin() + s_ConfigFiles.size());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef NL_OS_WINDOWS
|
||||||
|
SetEnvironmentVariableA(identifier.c_str(), dir.c_str());
|
||||||
|
#else
|
||||||
|
setenv(identifier.c_str(), dir.c_str(), 1);
|
||||||
|
#endif
|
||||||
|
configFiles[identifier] = cfgFile;
|
||||||
|
s_ConfigFiles.push_back(cfgFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
nlassert(s_ConfigFiles.size() == s_ConfigPaths.size());
|
||||||
|
|
||||||
|
if (flags & DatabaseTextureSearchPaths)
|
||||||
|
{
|
||||||
|
searchDirectories("DatabaseTextureSearchPaths");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CProjectConfig::searchDirectories(const char *var)
|
||||||
|
{
|
||||||
|
for (uint i = 0; i < s_ConfigFiles.size(); ++i)
|
||||||
|
{
|
||||||
|
CConfigFile *cfg = s_ConfigFiles[i];
|
||||||
|
const TPathString &dir = s_ConfigPaths[i];
|
||||||
|
CConfigFile::CVar *paths = cfg->getVarPtr(var);
|
||||||
|
if (paths)
|
||||||
|
{
|
||||||
|
for (uint i = 0; i < paths->size(); i++)
|
||||||
|
{
|
||||||
|
TPathString path = paths->asString(i);
|
||||||
|
if (!CPath::isAbsolutePath(path)) path = dir + path;
|
||||||
|
path = CPath::standardizePath(path);
|
||||||
|
if (s_SearchPaths.find(path) == s_SearchPaths.end())
|
||||||
|
{
|
||||||
|
CPath::addSearchPath(path);
|
||||||
|
s_SearchPaths.insert(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CProjectConfig::release()
|
||||||
|
{
|
||||||
|
s_SearchPaths.clear();
|
||||||
|
CPath::clearMap();
|
||||||
|
cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
|
/* end of file */
|
|
@ -25,8 +25,7 @@
|
||||||
* <http://www.gnu.org/licenses/>.
|
* <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "stdmisc.h"
|
#include "nel/pipeline/tool_logger.h"
|
||||||
#include "nel/misc/tool_logger.h"
|
|
||||||
|
|
||||||
// STL includes
|
// STL includes
|
||||||
|
|
||||||
|
@ -35,11 +34,11 @@
|
||||||
|
|
||||||
// Project includes
|
// Project includes
|
||||||
|
|
||||||
namespace NLMISC {
|
namespace NLPIPELINE {
|
||||||
|
|
||||||
// Tool logger is fully implemented in header so small tools do not need to link to this library unnecessarily.
|
// Tool logger is fully implemented in header so small tools do not need to link to this library unnecessarily.
|
||||||
void dummy_tool_logger_cpp() { }
|
void dummy_tool_logger_cpp() { }
|
||||||
|
|
||||||
} /* namespace NLMISC */
|
} /* namespace NLPIPELINE */
|
||||||
|
|
||||||
/* end of file */
|
/* end of file */
|
|
@ -7,7 +7,7 @@ INCLUDE_DIRECTORIES(${assimp_INCLUDE_DIRS})
|
||||||
|
|
||||||
NL_TARGET_LIB(mesh_utils ${SRCS} ${HDRS})
|
NL_TARGET_LIB(mesh_utils ${SRCS} ${HDRS})
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(mesh_utils ${assimp_LIBRARIES} nelmisc nel3d)
|
TARGET_LINK_LIBRARIES(mesh_utils ${assimp_LIBRARIES} nelmisc nelpipeline nel3d)
|
||||||
NL_DEFAULT_PROPS(mesh_utils "NeL, Tools, 3D: Mesh Utils")
|
NL_DEFAULT_PROPS(mesh_utils "NeL, Tools, 3D: Mesh Utils")
|
||||||
NL_ADD_RUNTIME_FLAGS(mesh_utils)
|
NL_ADD_RUNTIME_FLAGS(mesh_utils)
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
#include <nel/misc/tool_logger.h>
|
#include <nel/pipeline/tool_logger.h>
|
||||||
|
|
||||||
#include <nel/3d/mesh.h>
|
#include <nel/3d/mesh.h>
|
||||||
#include <nel/3d/texture_file.h>
|
#include <nel/3d/texture_file.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
#include <nel/misc/tool_logger.h>
|
#include <nel/pipeline/tool_logger.h>
|
||||||
|
|
||||||
#include <nel/3d/mesh.h>
|
#include <nel/3d/mesh.h>
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
#include "mesh_utils.h"
|
#include "mesh_utils.h"
|
||||||
|
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
#include <nel/misc/tool_logger.h>
|
#include <nel/pipeline/tool_logger.h>
|
||||||
|
#include <nel/pipeline/project_config.h>
|
||||||
#include <nel/misc/sstring.h>
|
#include <nel/misc/sstring.h>
|
||||||
#include <nel/misc/file.h>
|
#include <nel/misc/file.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
|
@ -28,7 +29,6 @@
|
||||||
#include <nel/3d/mesh.h>
|
#include <nel/3d/mesh.h>
|
||||||
#include <nel/3d/texture_file.h>
|
#include <nel/3d/texture_file.h>
|
||||||
|
|
||||||
#include "database_config.h"
|
|
||||||
#include "scene_meta.h"
|
#include "scene_meta.h"
|
||||||
|
|
||||||
#include <assimp/postprocess.h>
|
#include <assimp/postprocess.h>
|
||||||
|
@ -231,7 +231,7 @@ void exportShapes(CMeshUtilsContext &context)
|
||||||
if (nodeContext.Shape)
|
if (nodeContext.Shape)
|
||||||
{
|
{
|
||||||
std::string shapePath = NLMISC::CPath::standardizePath(context.Settings.DestinationDirectoryPath, true) + it->first + ".shape";
|
std::string shapePath = NLMISC::CPath::standardizePath(context.Settings.DestinationDirectoryPath, true) + it->first + ".shape";
|
||||||
context.ToolLogger.writeDepend(NLMISC::BUILD, shapePath.c_str(), "*");
|
context.ToolLogger.writeDepend(NLPIPELINE::BUILD, shapePath.c_str(), "*");
|
||||||
NLMISC::COFile f;
|
NLMISC::COFile f;
|
||||||
if (f.open(shapePath, false, false, true))
|
if (f.open(shapePath, false, false, true))
|
||||||
{
|
{
|
||||||
|
@ -262,7 +262,7 @@ void exportShapes(CMeshUtilsContext &context)
|
||||||
std::string knownPath = NLMISC::CPath::lookup(fileName, false, false, false);
|
std::string knownPath = NLMISC::CPath::lookup(fileName, false, false, false);
|
||||||
if (!knownPath.empty())
|
if (!knownPath.empty())
|
||||||
{
|
{
|
||||||
context.ToolLogger.writeDepend(NLMISC::RUNTIME, shapePath.c_str(), knownPath.c_str());
|
context.ToolLogger.writeDepend(NLPIPELINE::RUNTIME, shapePath.c_str(), knownPath.c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -289,17 +289,17 @@ int exportScene(const CMeshUtilsSettings &settings)
|
||||||
context.ToolLogger.initDepend(settings.ToolDependLog);
|
context.ToolLogger.initDepend(settings.ToolDependLog);
|
||||||
if (!settings.ToolErrorLog.empty())
|
if (!settings.ToolErrorLog.empty())
|
||||||
context.ToolLogger.initError(settings.ToolErrorLog);
|
context.ToolLogger.initError(settings.ToolErrorLog);
|
||||||
context.ToolLogger.writeDepend(NLMISC::BUILD, "*", NLMISC::CPath::standardizePath(context.Settings.SourceFilePath, false).c_str()); // Base input file
|
context.ToolLogger.writeDepend(NLPIPELINE::BUILD, "*", NLMISC::CPath::standardizePath(context.Settings.SourceFilePath, false).c_str()); // Base input file
|
||||||
|
|
||||||
// Apply database configuration
|
// Apply database configuration
|
||||||
if (!CDatabaseConfig::init(settings.SourceFilePath))
|
if (!NLPIPELINE::CProjectConfig::init(settings.SourceFilePath,
|
||||||
|
NLPIPELINE::CProjectConfig::DatabaseTextureSearchPaths,
|
||||||
|
true))
|
||||||
{
|
{
|
||||||
tlerror(context.ToolLogger, context.Settings.SourceFilePath.c_str(), "Unable to find database.cfg in input path or any of its parents.");
|
tlerror(context.ToolLogger, context.Settings.SourceFilePath.c_str(), "Unable to find database.cfg in input path or any of its parents.");
|
||||||
return EXIT_FAILURE;
|
// return EXIT_FAILURE; We can continue but the output will not be guaranteed...
|
||||||
}
|
}
|
||||||
|
|
||||||
CDatabaseConfig::initTextureSearchDirectories();
|
|
||||||
|
|
||||||
Assimp::Importer importer;
|
Assimp::Importer importer;
|
||||||
const aiScene *scene = importer.ReadFile(settings.SourceFilePath, 0
|
const aiScene *scene = importer.ReadFile(settings.SourceFilePath, 0
|
||||||
| aiProcess_Triangulate
|
| aiProcess_Triangulate
|
||||||
|
@ -321,7 +321,7 @@ int exportScene(const CMeshUtilsSettings &settings)
|
||||||
|
|
||||||
context.InternalScene = scene;
|
context.InternalScene = scene;
|
||||||
if (context.SceneMeta.load(context.Settings.SourceFilePath))
|
if (context.SceneMeta.load(context.Settings.SourceFilePath))
|
||||||
context.ToolLogger.writeDepend(NLMISC::BUILD, "*", context.SceneMeta.metaFilePath().c_str()); // Meta input file
|
context.ToolLogger.writeDepend(NLPIPELINE::BUILD, "*", context.SceneMeta.metaFilePath().c_str()); // Meta input file
|
||||||
|
|
||||||
validateInternalNodeNames(context, context.InternalScene->mRootNode);
|
validateInternalNodeNames(context, context.InternalScene->mRootNode);
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <nel/misc/debug.h>
|
#include <nel/misc/debug.h>
|
||||||
#include <nel/misc/path.h>
|
#include <nel/misc/path.h>
|
||||||
#include <nel/misc/tool_logger.h>
|
#include <nel/pipeline/tool_logger.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace NLMISC;
|
using namespace NLMISC;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "scene_meta.h"
|
#include "scene_meta.h"
|
||||||
|
|
||||||
#include <nel/misc/sstring.h>
|
#include <nel/misc/sstring.h>
|
||||||
#include <nel/misc/tool_logger.h>
|
#include <nel/pipeline/tool_logger.h>
|
||||||
#include <nel/misc/smart_ptr.h>
|
#include <nel/misc/smart_ptr.h>
|
||||||
#include <nel/misc/matrix.h>
|
#include <nel/misc/matrix.h>
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ struct CMeshUtilsContext
|
||||||
|
|
||||||
const CMeshUtilsSettings &Settings;
|
const CMeshUtilsSettings &Settings;
|
||||||
|
|
||||||
NLMISC::CToolLogger ToolLogger;
|
NLPIPELINE::CToolLogger ToolLogger;
|
||||||
|
|
||||||
const NL_SCENE_INTERNAL_TYPE *InternalScene;
|
const NL_SCENE_INTERNAL_TYPE *InternalScene;
|
||||||
CSceneMeta SceneMeta;
|
CSceneMeta SceneMeta;
|
||||||
|
|
Loading…
Reference in a new issue