12#define EENG_NULL_INDEX -1 
   16#define EENG_MSAA_SAMPLES 4 
   18#define EENG_ANISO_SAMPLES 8 
   22#define EENG_PLATFORM_WINDOWS 
   24#define EENG_PLATFORM_UNIX 
   25#define EENG_PLATFORM_LINUX 
   26#define EENG_PLATFORM_APPLE 
   30#if __cplusplus >= 201103L 
   31#define CPP11_SUPPORTED 
   33#if __cplusplus >= 201402L 
   34#define CPP14_SUPPORTED 
   36#if __cplusplus >= 201703L 
   37#define CPP17_SUPPORTED 
   39#if __cplusplus >= 202002L 
   40#define CPP20_SUPPORTED 
   45#define EENG_COMPILER_MSVC 
   48#define EENG_COMPILER_CLANG 
   51#define EENG_COMPILER_GCC 
   55#if !defined(NDEBUG) || defined(_DEBUG) 
   57#define EENG_ENABLE_ASSERTS 
   61#ifdef EENG_PLATFORM_WINDOWS 
   62#define EENG_DEBUG_BREAK() __debugbreak() 
   64#if defined(__ARM_ARCH) || defined(__aarch64__) 
   65#define EENG_DEBUG_BREAK() __asm__ volatile("svc #0") 
   66#elif defined(__x86_64__) || defined(__i386__) 
   67#define EENG_DEBUG_BREAK() __asm__ volatile("int $0x03") 
   69#error "Unsupported architecture" 
   74#if defined(EENG_ENABLE_ASSERTS) && defined(CPP20_SUPPORTED) 
   75template <
class... Args>
 
   76static void EENG_ERROR(std::string_view fmt, Args &&...args)
 
   78    auto msg = std::vformat(fmt, std::make_format_args(args...));
 
   79    std::cerr << 
"Error: " << msg << std::endl;
 
   81#define EENG_ASSERT(x, ...)          \ 
   85            EENG_ERROR(__VA_ARGS__); \ 
   89#elif defined(EENG_ENABLE_ASSERTS) 
   91#define EENG_ASSERT(x, ...) assert(x); 
   93#define EENG_ASSERT(x, ...) 
   97#ifdef EENG_PLATFORM_APPLE 
   98#define EENG_GLVERSION_MAJOR 4 
   99#define EENG_GLVERSION_MINOR 1 
  101#define EENG_GLVERSION_MAJOR 4 
  102#define EENG_GLVERSION_MINOR 3 
  105#if EENG_GLVERSION_MAJOR >= 4 
  106#if EENG_GLVERSION_MINOR >= 1 
  107#define EENG_GLVERSION_41 
  109#if EENG_GLVERSION_MINOR >= 3 
  110#define EENG_GLVERSION_43 
  113#ifndef EENG_GLVERSION_41 
  114static_assert(
false, 
"OpenGL 4.1 is required");
 
  118static void LOG_DEFINES(
auto& LogFunc)
 
  121    LogFunc(
"Mode DEBUG");
 
  123    LogFunc(
"Mode RELEASE");
 
  126#ifdef EENG_COMPILER_MSVC 
  127    LogFunc(
"Compiler MSVC");
 
  128#elif defined(EENG_COMPILER_CLANG) 
  129    LogFunc(
"Compiler Clang");
 
  130#elif defined(EENG_COMPILER_GCC) 
  131    LogFunc(
"Compiler GCC");
 
  134#ifdef CPP20_SUPPORTED 
  135    LogFunc(
"C++ version 20");
 
  136#elif defined(CPP17_SUPPORTED) 
  137    LogFunc(
"C++ version 17");
 
  138#elif defined(CPP14_SUPPORTED) 
  139    LogFunc(
"C++ version: 14");
 
  140#elif defined(CPP11_SUPPORTED) 
  141    LogFunc(
"C++ version 11");
 
  147constexpr auto to_integral(E e) -> 
typename std::underlying_type<E>::type
 
  149    return static_cast<typename std::underlying_type<E>::type
>(e);