#ifndef NV_NVK_BASE_
#define NV_NVK_BASE_

#include <any>
#include <array>
#include <atomic>
#include <concepts>
#include <condition_variable>
#include <deque>
#include <exception>
#include <filesystem>
#include <fstream>
#include <functional>
#include <iostream>
#include <limits>
#include <list>
#include <map>
#include <mutex>
#include <queue>
#include <random>
#include <regex>
#include <set>
#include <sstream>
#include <string>
#include <thread>
#include <typeindex>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <variant>
#include <vector>

#ifdef _WIN32
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#include <windowsx.h>
#endif

#include <algorithm> // for std::min and std::max

#include <fmt/core.h>
#include <fmt/format.h>

#include <cmath>

#include <external/json.hpp>

namespace nv {
using Json = nlohmann::json;
using OrderedJson = nlohmann::ordered_json;

class PointArray;
class PCGPoint;
class PCGPointRef;

class GLTFAsset;
class GLTFMesh;
class GLTFNode;
class GLTFScene;
class GLTFBuffer;
class GLTFBufferView;
class GLTFAccessor;
class GLTFMaterial;
class GLTFTexture;
class GLTFImage;
class GLTFAnimation;
class GLTFSkin;
class GLTFSampler;
class GLTFCamera;
class GLTFPrimitive;

} // namespace nv

#endif
