#pragma once

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

#ifdef _MSC_VER
#define DEBUG_BREAK __debugbreak();
#else
#include <csignal>
#define DEBUG_BREAK raise(SIGTRAP);
#endif

#define __FILENAME__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)

#define ASSERT(x)                              \
    if (!(x))                                  \
    {                                          \
        std::cout << "[ERROR] " << #x << '\n'; \
        DEBUG_BREAK                            \
    }

#define GLCall(x)                              \
    glClearError();                            \
    x;                                         \
    if (!(glErrorCheck()))                     \
    {                                          \
        std::cout << "[ERROR] " << #x << '\n'; \
        DEBUG_BREAK                            \
    }

void PrintSizeLimits();
bool glErrorCheck();
void glClearError();
float getRand();

bool fileExists(const std::string &name);
