add enum serialization

This commit is contained in:
SweetId 2024-03-10 16:33:25 -04:00
parent a0f2b128d7
commit e9f95d4d0f
5 changed files with 624 additions and 0 deletions

View File

@ -9,6 +9,8 @@ namespace Nz
: public SerializationContext
{
public:
EnumSerializationMode GetEnumSerializationMode() const override { return EnumSerializationMode::Binary; }
bool PushObject(std::string_view name) override;
bool PopObject() override;
bool PushArray(std::string_view name) override;

View File

@ -0,0 +1,64 @@
#pragma once
#include <Nazara/Core/Enums.hpp>
#include <Nazara/Core/Export.hpp>
#include <string_view>
namespace Nz
{
template <typename T>
concept Enum = std::is_enum_v<T>;
template <Enum TEnum> TEnum EnumFromString(std::string_view) { return TEnum{}; }
#define DEF_ENUM(Type) \
NAZARA_CORE_API std::string_view EnumToString(Type t); \
NAZARA_CORE_API Type EnumFromString_##Type(std::string_view); \
template<> inline Type EnumFromString(std::string_view v) { return EnumFromString_##Type(v); }
DEF_ENUM(AnimationType);
DEF_ENUM(BlendEquation);
DEF_ENUM(BlendFunc);
DEF_ENUM(BufferAccess);
DEF_ENUM(BufferType);
DEF_ENUM(BufferUsage);
DEF_ENUM(ComponentType);
DEF_ENUM(CoordSys);
DEF_ENUM(CursorPosition);
DEF_ENUM(CubemapFace);
DEF_ENUM(DataStorage);
DEF_ENUM(ErrorMode);
DEF_ENUM(ErrorType);
DEF_ENUM(FaceFilling);
DEF_ENUM(FaceCulling);
DEF_ENUM(FrontFace);
DEF_ENUM(ImageType);
DEF_ENUM(IndexType);
DEF_ENUM(HashType);
DEF_ENUM(OpenMode);
DEF_ENUM(ParameterType);
DEF_ENUM(PixelFormatContent);
DEF_ENUM(PixelFormat);
DEF_ENUM(PixelFormatSubType);
DEF_ENUM(PixelFlipping);
DEF_ENUM(PrimitiveMode);
DEF_ENUM(PrimitiveType);
DEF_ENUM(ProcessorCap);
DEF_ENUM(ProcessorVendor);
DEF_ENUM(RendererComparison);
DEF_ENUM(ResourceLoadingError);
DEF_ENUM(SamplerFilter);
DEF_ENUM(SamplerMipmapMode);
DEF_ENUM(SamplerWrap);
DEF_ENUM(SphereType);
DEF_ENUM(StencilOperation);
DEF_ENUM(StreamOption);
DEF_ENUM(TextAlign);
DEF_ENUM(TextStyle);
DEF_ENUM(VertexComponent);
DEF_ENUM(VertexInputRate);
DEF_ENUM(VertexLayout);
#undef DEF_ENUM
}

View File

@ -8,6 +8,7 @@
#define NAZARA_CORE_SERIALIZATION_HPP
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Core/EnumSerialization.hpp>
#include <Nazara/Core/Export.hpp>
#include <Nazara/Core/Stream.hpp>
#include <NazaraUtils/Endianness.hpp>
@ -21,9 +22,17 @@ namespace Nz
template <typename T>
concept Numeric = std::is_arithmetic<T>::value;
enum class EnumSerializationMode
{
Binary,
String,
};
struct NAZARA_CORE_API SerializationContext
{
public:
virtual EnumSerializationMode GetEnumSerializationMode() const = 0;
virtual bool PushObject(std::string_view name) = 0;
virtual bool PopObject() = 0;
virtual bool PushArray(std::string_view name) = 0;
@ -83,6 +92,9 @@ namespace Nz
template<Numeric T>
inline bool Serialize(SerializationContext& context, std::string_view name, const T& value, TypeTag<T>);
template<Enum T>
inline bool Serialize(SerializationContext& context, std::string_view name, const T& value, TypeTag<T>);
template<typename T>
inline bool Unserialize(SerializationContext&, T*, TypeTag<T>) { return false; }
@ -113,6 +125,9 @@ namespace Nz
template<Numeric T>
inline bool Unserialize(SerializationContext& context, std::string_view name, T* value, TypeTag<T>);
template<Enum T>
bool Unserialize(SerializationContext& context, std::string_view name, T* value, TypeTag<T>);
}
#include <Nazara/Core/Serialization.inl>

View File

@ -2,6 +2,7 @@
// This file is part of the "Nazara Engine - Core module"
// For conditions of distribution and use, see copyright notice in Export.hpp
#include <Nazara/Core/EnumSerialization.hpp>
namespace Nz
{
@ -127,6 +128,19 @@ namespace Nz
return context.Write(name, value);
}
template<Enum T>
inline bool Serialize(SerializationContext& context, std::string_view name, const T& value, TypeTag<T>)
{
switch (context.GetEnumSerializationMode())
{
case EnumSerializationMode::Binary:
return Serialize(context, name, std::underlying_type_t<T>(value), TypeTag<std::decay_t<std::underlying_type_t<T>>>());
case EnumSerializationMode::String:
return Serialize(context, name, std::string(EnumToString(value)), TypeTag<std::string>());
}
return false;
}
template<typename T>
inline bool Unserialize(SerializationContext& context, std::string_view name, T* value)
@ -250,5 +264,33 @@ namespace Nz
{
return context.Read(name, value);
}
template<Enum T>
bool Unserialize(SerializationContext& context, std::string_view name, T* value, TypeTag<T>)
{
switch (context.GetEnumSerializationMode())
{
case EnumSerializationMode::Binary:
{
std::underlying_type_t<T> v = 0;
if (!Unserialize(context, name, &v, TypeTag<std::decay_t<std::underlying_type_t<T>>>()))
return false;
*value = static_cast<T>(v);
return true;
}
case EnumSerializationMode::String:
{
std::string str;
if (!Unserialize(context, name, &str, TypeTag<std::string>()))
return false;
*value = EnumFromString<T>(str);
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,501 @@
#include <Nazara/Core/EnumSerialization.hpp>
#include <unordered_map>
#include <string_view>
namespace Nz
{
template<Enum TEnum>
inline TEnum Find(const std::unordered_map<TEnum, std::string_view>& m, std::string_view v)
{
auto it = std::find_if(m.begin(), m.end(), [v](const auto& kp) { return kp.second == v; });
return it != m.end() ? it->first : TEnum{};
}
#define DEF_ENUM(Type) \
namespace Type ## _Generated { \
std::unordered_map<Type, std::string_view> ValuesToString = {
#define DEF_ENUM_VALUE(Type, Value) \
{ Type::Value, #Value },
#define DEF_ENUM_END(Type) \
}; \
} \
std::string_view EnumToString(Type v) { return Type ## _Generated::ValuesToString[v]; }; \
Type EnumFromString_##Type(std::string_view v) { return Find(Type ## _Generated::ValuesToString, v);}
DEF_ENUM(AnimationType)
DEF_ENUM_VALUE(AnimationType, Skeletal)
DEF_ENUM_VALUE(AnimationType, Static)
DEF_ENUM_END(AnimationType)
DEF_ENUM(BlendEquation)
DEF_ENUM_VALUE(BlendEquation, Add)
DEF_ENUM_VALUE(BlendEquation, Max)
DEF_ENUM_VALUE(BlendEquation, Min)
DEF_ENUM_VALUE(BlendEquation, ReverseSubtract)
DEF_ENUM_VALUE(BlendEquation, Subtract)
DEF_ENUM_END(BlendEquation)
DEF_ENUM(BlendFunc)
DEF_ENUM_VALUE(BlendFunc, ConstantColor)
DEF_ENUM_VALUE(BlendFunc, ConstantAlpha)
DEF_ENUM_VALUE(BlendFunc, DstAlpha)
DEF_ENUM_VALUE(BlendFunc, DstColor)
DEF_ENUM_VALUE(BlendFunc, SrcAlpha)
DEF_ENUM_VALUE(BlendFunc, SrcColor)
DEF_ENUM_VALUE(BlendFunc, InvConstantColor)
DEF_ENUM_VALUE(BlendFunc, InvConstantAlpha)
DEF_ENUM_VALUE(BlendFunc, InvDstAlpha)
DEF_ENUM_VALUE(BlendFunc, InvDstColor)
DEF_ENUM_VALUE(BlendFunc, InvSrcAlpha)
DEF_ENUM_VALUE(BlendFunc, InvSrcColor)
DEF_ENUM_VALUE(BlendFunc, One)
DEF_ENUM_VALUE(BlendFunc, Zero)
DEF_ENUM_END(BlendFunc)
DEF_ENUM(BufferAccess)
DEF_ENUM_VALUE(BufferAccess, DiscardAndWrite)
DEF_ENUM_VALUE(BufferAccess, ReadOnly)
DEF_ENUM_VALUE(BufferAccess, ReadWrite)
DEF_ENUM_VALUE(BufferAccess, WriteOnly)
DEF_ENUM_VALUE(BufferAccess, Max)
DEF_ENUM_END(BufferAccess)
DEF_ENUM(BufferType)
DEF_ENUM_VALUE(BufferType, Index)
DEF_ENUM_VALUE(BufferType, Vertex)
DEF_ENUM_VALUE(BufferType, Storage)
DEF_ENUM_VALUE(BufferType, Uniform)
DEF_ENUM_VALUE(BufferType, Upload)
DEF_ENUM_VALUE(BufferType, Max)
DEF_ENUM_END(BufferType)
DEF_ENUM(BufferUsage)
DEF_ENUM_VALUE(BufferUsage, DeviceLocal)
DEF_ENUM_VALUE(BufferUsage, DirectMapping)
DEF_ENUM_VALUE(BufferUsage, Dynamic)
DEF_ENUM_VALUE(BufferUsage, Read)
DEF_ENUM_VALUE(BufferUsage, PersistentMapping)
DEF_ENUM_VALUE(BufferUsage, Write)
DEF_ENUM_VALUE(BufferUsage, Max)
DEF_ENUM_END(BufferUsage)
DEF_ENUM(ComponentType)
DEF_ENUM_VALUE(ComponentType, Color)
DEF_ENUM_VALUE(ComponentType, Double1)
DEF_ENUM_VALUE(ComponentType, Double2)
DEF_ENUM_VALUE(ComponentType, Double3)
DEF_ENUM_VALUE(ComponentType, Double4)
DEF_ENUM_VALUE(ComponentType, Float1)
DEF_ENUM_VALUE(ComponentType, Float2)
DEF_ENUM_VALUE(ComponentType, Float3)
DEF_ENUM_VALUE(ComponentType, Float4)
DEF_ENUM_VALUE(ComponentType, Int1)
DEF_ENUM_VALUE(ComponentType, Int2)
DEF_ENUM_VALUE(ComponentType, Int3)
DEF_ENUM_VALUE(ComponentType, Int4)
DEF_ENUM_VALUE(ComponentType, Max)
DEF_ENUM_END(ComponentType)
DEF_ENUM(CoordSys)
DEF_ENUM_VALUE(CoordSys, Global)
DEF_ENUM_VALUE(CoordSys, Local)
DEF_ENUM_VALUE(CoordSys, Max)
DEF_ENUM_END(CoordSys)
DEF_ENUM(CursorPosition)
DEF_ENUM_VALUE(CursorPosition, AtBegin)
DEF_ENUM_VALUE(CursorPosition, AtCurrent)
DEF_ENUM_VALUE(CursorPosition, AtEnd)
DEF_ENUM_VALUE(CursorPosition, Max)
DEF_ENUM_END(CursorPosition)
DEF_ENUM(CubemapFace)
DEF_ENUM_VALUE(CubemapFace, PositiveX)
DEF_ENUM_VALUE(CubemapFace, PositiveY)
DEF_ENUM_VALUE(CubemapFace, PositiveZ)
DEF_ENUM_VALUE(CubemapFace, NegativeX)
DEF_ENUM_VALUE(CubemapFace, NegativeY)
DEF_ENUM_VALUE(CubemapFace, NegativeZ)
DEF_ENUM_VALUE(CubemapFace, Max)
DEF_ENUM_END(CubemapFace)
DEF_ENUM(DataStorage)
DEF_ENUM_VALUE(DataStorage, Hardware)
DEF_ENUM_VALUE(DataStorage, Software)
DEF_ENUM_VALUE(DataStorage, Max)
DEF_ENUM_END(DataStorage)
DEF_ENUM(ErrorMode)
DEF_ENUM_VALUE(ErrorMode, Silent)
DEF_ENUM_VALUE(ErrorMode, ThrowException)
DEF_ENUM_VALUE(ErrorMode, Max)
DEF_ENUM_END(ErrorMode)
DEF_ENUM(ErrorType)
DEF_ENUM_VALUE(ErrorType, AssertFailed)
DEF_ENUM_VALUE(ErrorType, Internal)
DEF_ENUM_VALUE(ErrorType, Normal)
DEF_ENUM_VALUE(ErrorType, Warning)
DEF_ENUM_VALUE(ErrorType, Max)
DEF_ENUM_END(ErrorType)
DEF_ENUM(FaceFilling)
DEF_ENUM_VALUE(FaceFilling, Fill)
DEF_ENUM_VALUE(FaceFilling, Line)
DEF_ENUM_VALUE(FaceFilling, Point)
DEF_ENUM_VALUE(FaceFilling, Max)
DEF_ENUM_END(FaceFilling)
DEF_ENUM(FaceCulling)
DEF_ENUM_VALUE(FaceCulling, None)
DEF_ENUM_VALUE(FaceCulling, Back)
DEF_ENUM_VALUE(FaceCulling, Front)
DEF_ENUM_VALUE(FaceCulling, FrontAndBack)
DEF_ENUM_VALUE(FaceCulling, Max)
DEF_ENUM_END(FaceCulling)
DEF_ENUM(FrontFace)
DEF_ENUM_VALUE(FrontFace, Clockwise)
DEF_ENUM_VALUE(FrontFace, CounterClockwise)
DEF_ENUM_VALUE(FrontFace, Max)
DEF_ENUM_END(FrontFace)
DEF_ENUM(ImageType)
DEF_ENUM_VALUE(ImageType, E1D)
DEF_ENUM_VALUE(ImageType, E1D_Array)
DEF_ENUM_VALUE(ImageType, E2D)
DEF_ENUM_VALUE(ImageType, E2D_Array)
DEF_ENUM_VALUE(ImageType, E3D)
DEF_ENUM_VALUE(ImageType, Cubemap)
DEF_ENUM_VALUE(ImageType, Max)
DEF_ENUM_END(ImageType)
DEF_ENUM(IndexType)
DEF_ENUM_VALUE(IndexType, U8)
DEF_ENUM_VALUE(IndexType, U16)
DEF_ENUM_VALUE(IndexType, U32)
DEF_ENUM_VALUE(IndexType, Max)
DEF_ENUM_END(IndexType)
DEF_ENUM(HashType)
DEF_ENUM_VALUE(HashType, CRC32)
DEF_ENUM_VALUE(HashType, CRC64)
DEF_ENUM_VALUE(HashType, Fletcher16)
DEF_ENUM_VALUE(HashType, MD5)
DEF_ENUM_VALUE(HashType, SHA1)
DEF_ENUM_VALUE(HashType, SHA224)
DEF_ENUM_VALUE(HashType, SHA256)
DEF_ENUM_VALUE(HashType, SHA384)
DEF_ENUM_VALUE(HashType, SHA512)
DEF_ENUM_VALUE(HashType, Whirlpool)
DEF_ENUM_VALUE(HashType, Max)
DEF_ENUM_END(HashType)
DEF_ENUM(OpenMode)
DEF_ENUM_VALUE(OpenMode, NotOpen)
DEF_ENUM_VALUE(OpenMode, Append)
DEF_ENUM_VALUE(OpenMode, Defer)
DEF_ENUM_VALUE(OpenMode, Lock)
DEF_ENUM_VALUE(OpenMode, MustExist)
DEF_ENUM_VALUE(OpenMode, Read)
DEF_ENUM_VALUE(OpenMode, Text)
DEF_ENUM_VALUE(OpenMode, Truncate)
DEF_ENUM_VALUE(OpenMode, Unbuffered)
DEF_ENUM_VALUE(OpenMode, Write)
DEF_ENUM_VALUE(OpenMode, Max)
DEF_ENUM_END(OpenMode)
DEF_ENUM(ParameterType)
DEF_ENUM_VALUE(ParameterType, Boolean)
DEF_ENUM_VALUE(ParameterType, Color)
DEF_ENUM_VALUE(ParameterType, Double)
DEF_ENUM_VALUE(ParameterType, Integer)
DEF_ENUM_VALUE(ParameterType, None)
DEF_ENUM_VALUE(ParameterType, Pointer)
DEF_ENUM_VALUE(ParameterType, String)
DEF_ENUM_VALUE(ParameterType, Userdata)
DEF_ENUM_VALUE(ParameterType, Max)
DEF_ENUM_END(ParameterType)
DEF_ENUM(PixelFormatContent)
DEF_ENUM_VALUE(PixelFormatContent, Undefined)
DEF_ENUM_VALUE(PixelFormatContent, ColorRGBA)
DEF_ENUM_VALUE(PixelFormatContent, Depth)
DEF_ENUM_VALUE(PixelFormatContent, DepthStencil)
DEF_ENUM_VALUE(PixelFormatContent, Stencil)
DEF_ENUM_VALUE(PixelFormatContent, Max)
DEF_ENUM_END(PixelFormatContent)
DEF_ENUM(PixelFormat)
DEF_ENUM_VALUE(PixelFormat, Undefined)
DEF_ENUM_VALUE(PixelFormat, A8)
DEF_ENUM_VALUE(PixelFormat, BGR8)
DEF_ENUM_VALUE(PixelFormat, BGR8_SRGB)
DEF_ENUM_VALUE(PixelFormat, BGRA8)
DEF_ENUM_VALUE(PixelFormat, BGRA8_SRGB)
DEF_ENUM_VALUE(PixelFormat, DXT1)
DEF_ENUM_VALUE(PixelFormat, DXT3)
DEF_ENUM_VALUE(PixelFormat, DXT5)
DEF_ENUM_VALUE(PixelFormat, L8)
DEF_ENUM_VALUE(PixelFormat, LA8)
DEF_ENUM_VALUE(PixelFormat, R8)
DEF_ENUM_VALUE(PixelFormat, R8I)
DEF_ENUM_VALUE(PixelFormat, R8UI)
DEF_ENUM_VALUE(PixelFormat, R16)
DEF_ENUM_VALUE(PixelFormat, R16F)
DEF_ENUM_VALUE(PixelFormat, R16I)
DEF_ENUM_VALUE(PixelFormat, R16UI)
DEF_ENUM_VALUE(PixelFormat, R32F)
DEF_ENUM_VALUE(PixelFormat, R32I)
DEF_ENUM_VALUE(PixelFormat, R32UI)
DEF_ENUM_VALUE(PixelFormat, RG8)
DEF_ENUM_VALUE(PixelFormat, RG8I)
DEF_ENUM_VALUE(PixelFormat, RG8UI)
DEF_ENUM_VALUE(PixelFormat, RG16)
DEF_ENUM_VALUE(PixelFormat, RG16F)
DEF_ENUM_VALUE(PixelFormat, RG16I)
DEF_ENUM_VALUE(PixelFormat, RG16UI)
DEF_ENUM_VALUE(PixelFormat, RG32F)
DEF_ENUM_VALUE(PixelFormat, RG32I)
DEF_ENUM_VALUE(PixelFormat, RG32UI)
DEF_ENUM_VALUE(PixelFormat, RGB5A1)
DEF_ENUM_VALUE(PixelFormat, RGB8)
DEF_ENUM_VALUE(PixelFormat, RGB8_SRGB)
DEF_ENUM_VALUE(PixelFormat, RGB16F)
DEF_ENUM_VALUE(PixelFormat, RGB16I)
DEF_ENUM_VALUE(PixelFormat, RGB16UI)
DEF_ENUM_VALUE(PixelFormat, RGB32F)
DEF_ENUM_VALUE(PixelFormat, RGB32I)
DEF_ENUM_VALUE(PixelFormat, RGB32UI)
DEF_ENUM_VALUE(PixelFormat, RGBA4)
DEF_ENUM_VALUE(PixelFormat, RGBA8)
DEF_ENUM_VALUE(PixelFormat, RGBA8_SRGB)
DEF_ENUM_VALUE(PixelFormat, RGBA16F)
DEF_ENUM_VALUE(PixelFormat, RGBA16I)
DEF_ENUM_VALUE(PixelFormat, RGBA16UI)
DEF_ENUM_VALUE(PixelFormat, RGBA32F)
DEF_ENUM_VALUE(PixelFormat, RGBA32I)
DEF_ENUM_VALUE(PixelFormat, RGBA32UI)
DEF_ENUM_VALUE(PixelFormat, Depth16)
DEF_ENUM_VALUE(PixelFormat, Depth16Stencil8)
DEF_ENUM_VALUE(PixelFormat, Depth24)
DEF_ENUM_VALUE(PixelFormat, Depth24Stencil8)
DEF_ENUM_VALUE(PixelFormat, Depth32F)
DEF_ENUM_VALUE(PixelFormat, Depth32FStencil8)
DEF_ENUM_VALUE(PixelFormat, Stencil1)
DEF_ENUM_VALUE(PixelFormat, Stencil4)
DEF_ENUM_VALUE(PixelFormat, Stencil8)
DEF_ENUM_VALUE(PixelFormat, Stencil16)
DEF_ENUM_VALUE(PixelFormat, Max)
DEF_ENUM_END(PixelFormat)
DEF_ENUM(PixelFormatSubType)
DEF_ENUM_VALUE(PixelFormatSubType, Compressed)
DEF_ENUM_VALUE(PixelFormatSubType, Double)
DEF_ENUM_VALUE(PixelFormatSubType, Float)
DEF_ENUM_VALUE(PixelFormatSubType, Half)
DEF_ENUM_VALUE(PixelFormatSubType, Int)
DEF_ENUM_VALUE(PixelFormatSubType, Unsigned)
DEF_ENUM_VALUE(PixelFormatSubType, Max)
DEF_ENUM_END(PixelFormatSubType)
DEF_ENUM(PixelFlipping)
DEF_ENUM_VALUE(PixelFlipping, Horizontally)
DEF_ENUM_VALUE(PixelFlipping, Vertically)
DEF_ENUM_VALUE(PixelFlipping, Max)
DEF_ENUM_END(PixelFlipping)
DEF_ENUM(PrimitiveMode)
DEF_ENUM_VALUE(PrimitiveMode, LineList)
DEF_ENUM_VALUE(PrimitiveMode, LineStrip)
DEF_ENUM_VALUE(PrimitiveMode, PointList)
DEF_ENUM_VALUE(PrimitiveMode, TriangleList)
DEF_ENUM_VALUE(PrimitiveMode, TriangleStrip)
DEF_ENUM_VALUE(PrimitiveMode, TriangleFan)
DEF_ENUM_VALUE(PrimitiveMode, Max)
DEF_ENUM_END(PrimitiveMode)
DEF_ENUM(PrimitiveType)
DEF_ENUM_VALUE(PrimitiveType, Box)
DEF_ENUM_VALUE(PrimitiveType, Cone)
DEF_ENUM_VALUE(PrimitiveType, Plane)
DEF_ENUM_VALUE(PrimitiveType, Sphere)
DEF_ENUM_VALUE(PrimitiveType, Max)
DEF_ENUM_END(PrimitiveType)
DEF_ENUM(ProcessorCap)
DEF_ENUM_VALUE(ProcessorCap, x64)
DEF_ENUM_VALUE(ProcessorCap, AES)
DEF_ENUM_VALUE(ProcessorCap, AVX)
DEF_ENUM_VALUE(ProcessorCap, FMA3)
DEF_ENUM_VALUE(ProcessorCap, FMA4)
DEF_ENUM_VALUE(ProcessorCap, MMX)
DEF_ENUM_VALUE(ProcessorCap, Popcnt)
DEF_ENUM_VALUE(ProcessorCap, RDRAND)
DEF_ENUM_VALUE(ProcessorCap, XOP)
DEF_ENUM_VALUE(ProcessorCap, SSE)
DEF_ENUM_VALUE(ProcessorCap, SSE2)
DEF_ENUM_VALUE(ProcessorCap, SSE3)
DEF_ENUM_VALUE(ProcessorCap, SSSE3)
DEF_ENUM_VALUE(ProcessorCap, SSE41)
DEF_ENUM_VALUE(ProcessorCap, SSE42)
DEF_ENUM_VALUE(ProcessorCap, SSE4a)
DEF_ENUM_VALUE(ProcessorCap, Max)
DEF_ENUM_END(ProcessorCap)
DEF_ENUM(ProcessorVendor)
DEF_ENUM_VALUE(ProcessorVendor, Unknown)
DEF_ENUM_VALUE(ProcessorVendor, ACRN)
DEF_ENUM_VALUE(ProcessorVendor, AMD)
DEF_ENUM_VALUE(ProcessorVendor, Ao486)
DEF_ENUM_VALUE(ProcessorVendor, AppleRosetta2)
DEF_ENUM_VALUE(ProcessorVendor, Bhyve)
DEF_ENUM_VALUE(ProcessorVendor, Centaur)
DEF_ENUM_VALUE(ProcessorVendor, Cyrix)
DEF_ENUM_VALUE(ProcessorVendor, Elbrus)
DEF_ENUM_VALUE(ProcessorVendor, Hygon)
DEF_ENUM_VALUE(ProcessorVendor, HyperV)
DEF_ENUM_VALUE(ProcessorVendor, Intel)
DEF_ENUM_VALUE(ProcessorVendor, KVM)
DEF_ENUM_VALUE(ProcessorVendor, MicrosoftXTA)
DEF_ENUM_VALUE(ProcessorVendor, NSC)
DEF_ENUM_VALUE(ProcessorVendor, NexGen)
DEF_ENUM_VALUE(ProcessorVendor, Parallels)
DEF_ENUM_VALUE(ProcessorVendor, QEMU)
DEF_ENUM_VALUE(ProcessorVendor, QNX)
DEF_ENUM_VALUE(ProcessorVendor, Rise)
DEF_ENUM_VALUE(ProcessorVendor, SIS)
DEF_ENUM_VALUE(ProcessorVendor, Transmeta)
DEF_ENUM_VALUE(ProcessorVendor, UMC)
DEF_ENUM_VALUE(ProcessorVendor, VIA)
DEF_ENUM_VALUE(ProcessorVendor, VMware)
DEF_ENUM_VALUE(ProcessorVendor, Vortex)
DEF_ENUM_VALUE(ProcessorVendor, XenHVM)
DEF_ENUM_VALUE(ProcessorVendor, Zhaoxin)
DEF_ENUM_VALUE(ProcessorVendor, Max)
DEF_ENUM_END(ProcessorVendor)
DEF_ENUM(RendererComparison)
DEF_ENUM_VALUE(RendererComparison, Always)
DEF_ENUM_VALUE(RendererComparison, Equal)
DEF_ENUM_VALUE(RendererComparison, Greater)
DEF_ENUM_VALUE(RendererComparison, GreaterOrEqual)
DEF_ENUM_VALUE(RendererComparison, Less)
DEF_ENUM_VALUE(RendererComparison, LessOrEqual)
DEF_ENUM_VALUE(RendererComparison, Never)
DEF_ENUM_VALUE(RendererComparison, NotEqual)
DEF_ENUM_VALUE(RendererComparison, Max)
DEF_ENUM_END(RendererComparison)
DEF_ENUM(ResourceLoadingError)
DEF_ENUM_VALUE(ResourceLoadingError, DecodingError)
DEF_ENUM_VALUE(ResourceLoadingError, FailedToOpenFile)
DEF_ENUM_VALUE(ResourceLoadingError, Internal)
DEF_ENUM_VALUE(ResourceLoadingError, Unsupported)
DEF_ENUM_VALUE(ResourceLoadingError, Unrecognized)
DEF_ENUM_END(ResourceLoadingError)
DEF_ENUM(SamplerFilter)
DEF_ENUM_VALUE(SamplerFilter, Linear)
DEF_ENUM_VALUE(SamplerFilter, Nearest)
DEF_ENUM_VALUE(SamplerFilter, Max)
DEF_ENUM_END(SamplerFilter)
DEF_ENUM(SamplerMipmapMode)
DEF_ENUM_VALUE(SamplerMipmapMode, Linear)
DEF_ENUM_VALUE(SamplerMipmapMode, Nearest)
DEF_ENUM_VALUE(SamplerMipmapMode, Max)
DEF_ENUM_END(SamplerMipmapMode)
DEF_ENUM(SamplerWrap)
DEF_ENUM_VALUE(SamplerWrap, Clamp)
DEF_ENUM_VALUE(SamplerWrap, MirroredRepeat)
DEF_ENUM_VALUE(SamplerWrap, Repeat)
DEF_ENUM_VALUE(SamplerWrap, Max)
DEF_ENUM_END(SamplerWrap)
DEF_ENUM(SphereType)
DEF_ENUM_VALUE(SphereType, Cubic)
DEF_ENUM_VALUE(SphereType, Ico)
DEF_ENUM_VALUE(SphereType, UV)
DEF_ENUM_VALUE(SphereType, Max)
DEF_ENUM_END(SphereType)
DEF_ENUM(StencilOperation)
DEF_ENUM_VALUE(StencilOperation, Decrement)
DEF_ENUM_VALUE(StencilOperation, DecrementNoClamp)
DEF_ENUM_VALUE(StencilOperation, Increment)
DEF_ENUM_VALUE(StencilOperation, IncrementNoClamp)
DEF_ENUM_VALUE(StencilOperation, Invert)
DEF_ENUM_VALUE(StencilOperation, Keep)
DEF_ENUM_VALUE(StencilOperation, Replace)
DEF_ENUM_VALUE(StencilOperation, Zero)
DEF_ENUM_VALUE(StencilOperation, Max)
DEF_ENUM_END(StencilOperation)
DEF_ENUM(StreamOption)
DEF_ENUM_VALUE(StreamOption, None)
DEF_ENUM_VALUE(StreamOption, MemoryMapped)
DEF_ENUM_VALUE(StreamOption, Sequential)
DEF_ENUM_VALUE(StreamOption, Text)
DEF_ENUM_VALUE(StreamOption, Unbuffered)
DEF_ENUM_VALUE(StreamOption, Max)
DEF_ENUM_END(StreamOption)
DEF_ENUM(TextAlign)
DEF_ENUM_VALUE(TextAlign, Left)
DEF_ENUM_VALUE(TextAlign, Middle)
DEF_ENUM_VALUE(TextAlign, Right)
DEF_ENUM_VALUE(TextAlign, Max)
DEF_ENUM_END(TextAlign)
DEF_ENUM(TextStyle)
DEF_ENUM_VALUE(TextStyle, Bold)
DEF_ENUM_VALUE(TextStyle, Italic)
DEF_ENUM_VALUE(TextStyle, StrikeThrough)
DEF_ENUM_VALUE(TextStyle, Underlined)
DEF_ENUM_VALUE(TextStyle, Max)
DEF_ENUM_END(TextStyle)
DEF_ENUM(VertexComponent)
DEF_ENUM_VALUE(VertexComponent, Unused)
DEF_ENUM_VALUE(VertexComponent, Color)
DEF_ENUM_VALUE(VertexComponent, JointIndices)
DEF_ENUM_VALUE(VertexComponent, JointWeights)
DEF_ENUM_VALUE(VertexComponent, Normal)
DEF_ENUM_VALUE(VertexComponent, Position)
DEF_ENUM_VALUE(VertexComponent, SizeSinCos)
DEF_ENUM_VALUE(VertexComponent, Tangent)
DEF_ENUM_VALUE(VertexComponent, TexCoord)
DEF_ENUM_VALUE(VertexComponent, Userdata)
DEF_ENUM_VALUE(VertexComponent, Max)
DEF_ENUM_END(VertexComponent)
DEF_ENUM(VertexInputRate)
DEF_ENUM_VALUE(VertexInputRate, Instance)
DEF_ENUM_VALUE(VertexInputRate, Vertex)
DEF_ENUM_END(VertexInputRate)
DEF_ENUM(VertexLayout)
DEF_ENUM_VALUE(VertexLayout, UV_SizeSinCos)
DEF_ENUM_VALUE(VertexLayout, XY)
DEF_ENUM_VALUE(VertexLayout, XY_Color)
DEF_ENUM_VALUE(VertexLayout, XY_UV)
DEF_ENUM_VALUE(VertexLayout, XYZ)
DEF_ENUM_VALUE(VertexLayout, XYZ_Color)
DEF_ENUM_VALUE(VertexLayout, XYZ_Color_UV)
DEF_ENUM_VALUE(VertexLayout, XYZ_Normal)
DEF_ENUM_VALUE(VertexLayout, XYZ_Normal_UV)
DEF_ENUM_VALUE(VertexLayout, XYZ_Normal_UV_Tangent)
DEF_ENUM_VALUE(VertexLayout, XYZ_Normal_UV_Tangent_Skinning)
DEF_ENUM_VALUE(VertexLayout, UV_SizeSinCos_Color)
DEF_ENUM_VALUE(VertexLayout, XYZ_UV)
DEF_ENUM_VALUE(VertexLayout, Matrix4)
DEF_ENUM_VALUE(VertexLayout, Max)
DEF_ENUM_END(VertexLayout)
}