Init Repo

This commit is contained in:
2026-06-03 09:00:11 +08:00
commit 9be48d8b9e
155 changed files with 14827 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
#include "PathUtils.h"
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#else
#include <unistd.h>
#include <limits.h>
#endif
#include <algorithm>
namespace UsdLayerManager {
std::string ExeDir()
{
#ifdef _WIN32
wchar_t wpath[MAX_PATH] = {};
DWORD len = ::GetModuleFileNameW(nullptr, wpath, MAX_PATH);
if (len == 0 || len >= MAX_PATH)
return "./";
// Convert UTF-16 → UTF-8
int needed = ::WideCharToMultiByte(CP_UTF8, 0, wpath, static_cast<int>(len),
nullptr, 0, nullptr, nullptr);
std::string path(static_cast<size_t>(needed), '\0');
::WideCharToMultiByte(CP_UTF8, 0, wpath, static_cast<int>(len),
path.data(), needed, nullptr, nullptr);
#else
char buf[PATH_MAX] = {};
ssize_t len = ::readlink("/proc/self/exe", buf, sizeof(buf) - 1);
if (len <= 0)
return "./";
std::string path(buf, static_cast<size_t>(len));
#endif
// Normalise to forward slashes and strip the filename
std::replace(path.begin(), path.end(), '\\', '/');
auto slash = path.rfind('/');
if (slash != std::string::npos)
path = path.substr(0, slash + 1); // keep trailing '/'
else
path = "./";
return path;
}
std::string ResourcePath(const std::string& relativePath)
{
return ExeDir() + relativePath;
}
} // namespace UsdLayerManager