Fixed building with MSVC. Also fixed a few other smaller issues.

This commit is contained in:
Relintai 2024-01-18 13:26:57 +01:00
parent f015c42b12
commit 57a84028de
9 changed files with 191 additions and 34 deletions

3
.gitignore vendored
View File

@ -27,7 +27,10 @@ libs/
compile_commands.json
*.o
*.obj
game
game.exe
game-vc.*
vc140.pdb

View File

@ -41,7 +41,7 @@ ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/dir_access.cpp -o sfw/core/di
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/pool_vector.cpp -o sfw/core/pool_vector.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/pool_allocator.cpp -o sfw/core/pool_allocator.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/mutex.cpp -o sfw/core/mutex.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/sfw_time.cpp -o sfw/core/SFWTime.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/sfw_time.cpp -o sfw/core/sfw_time.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/sfw_core.cpp -o sfw/core/sfw_core.o
@ -58,7 +58,7 @@ ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/resource.cpp -o sfw/object/
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/application.cpp -o sfw/render_core/application.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/scene.cpp -o sfw/render_core/scene.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/app_window.cpp -o sfw/render_core/window.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/app_window.cpp -o sfw/render_core/app_window.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/shader.cpp -o sfw/render_core/shader.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/material.cpp -o sfw/render_core/material.o
@ -106,7 +106,7 @@ ccache g++ -Wall -lm -ldl -lpthread -lX11 -D_REENTRANT -g sfw/core/aabb.o sfw/c
sfw/core/ustring.o sfw/core/string_name.o \
sfw/core/vector2.o sfw/core/vector2i.o sfw/core/vector3.o \
sfw/core/vector3i.o sfw/core/vector4.o sfw/core/vector4i.o \
sfw/core/pool_vector.o sfw/core/pool_allocator.o sfw/core/mutex.o sfw/core/SFWTime.o \
sfw/core/pool_vector.o sfw/core/pool_allocator.o sfw/core/mutex.o sfw/core/sfw_time.o \
sfw/core/dir_access.o sfw/core/file_access.o \
sfw/core/sfw_core.o \
sfw/object/object.o sfw/object/reference.o sfw/object/core_string_names.o \
@ -114,7 +114,7 @@ ccache g++ -Wall -lm -ldl -lpthread -lX11 -D_REENTRANT -g sfw/core/aabb.o sfw/c
sfw/object/array.o sfw/object/dictionary.o sfw/object/ref_ptr.o \
sfw/object/resource.o \
sfw/render_core/image.o sfw/render_core/render_state.o \
sfw/render_core/application.o sfw/render_core/scene.o sfw/render_core/window.o \
sfw/render_core/application.o sfw/render_core/scene.o sfw/render_core/app_window.o \
sfw/render_core/shader.o sfw/render_core/material.o sfw/render_core/mesh.o \
sfw/render_core/mesh_utils.o sfw/render_core/texture.o \
sfw/render_core/input_event.o sfw/render_core/input_map.o \

151
compile_vs.bat Normal file
View File

@ -0,0 +1,151 @@
@echo off
if not defined DevEnvDir (
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
)
rem debug: /Zi (== -g)
rem TODO reentrant is probably not needed
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/aabb.cpp /Fo:sfw/core/aabb.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/basis.cpp /Fo:sfw/core/basis.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/color.cpp /Fo:sfw/core/color.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/face3.cpp /Fo:sfw/core/face3.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/logger.cpp /Fo:sfw/core/logger.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/math_funcs.cpp /Fo:sfw/core/math_funcs.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/memory.cpp /Fo:sfw/core/memory.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/pcg.cpp /Fo:sfw/core/pcg.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/plane.cpp /Fo:sfw/core/plane.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/projection.cpp /Fo:sfw/core/projection.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/quaternion.cpp /Fo:sfw/core/quaternion.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/random_pcg.cpp /Fo:sfw/core/random_pcg.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/rect2.cpp /Fo:sfw/core/rect2.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/rect2i.cpp /Fo:sfw/core/rect2i.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/safe_refcount.cpp /Fo:sfw/core/safe_refcount.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/transform_2d.cpp /Fo:sfw/core/transform_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/transform.cpp /Fo:sfw/core/transform.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/ustring.cpp /Fo:sfw/core/ustring.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/string_name.cpp /Fo:sfw/core/string_name.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector2.cpp /Fo:sfw/core/vector2.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector2i.cpp /Fo:sfw/core/vector2i.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector3.cpp /Fo:sfw/core/vector3.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector3i.cpp /Fo:sfw/core/vector3i.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector4.cpp /Fo:sfw/core/vector4.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/vector4i.cpp /Fo:sfw/core/vector4i.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/file_access.cpp /Fo:sfw/core/file_access.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/dir_access.cpp /Fo:sfw/core/dir_access.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/pool_vector.cpp /Fo:sfw/core/pool_vector.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/pool_allocator.cpp /Fo:sfw/core/pool_allocator.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/mutex.cpp /Fo:sfw/core/mutex.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/sfw_time.cpp /Fo:sfw/core/sfw_time.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/core/sfw_core.cpp /Fo:sfw/core/sfw_core.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/object.cpp /Fo:sfw/object/object.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/reference.cpp /Fo:sfw/object/reference.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/core_string_names.cpp /Fo:sfw/object/core_string_names.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/variant.cpp /Fo:sfw/object/variant.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/variant_op.cpp /Fo:sfw/object/variant_op.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/psignal.cpp /Fo:sfw/object/psignal.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/array.cpp /Fo:sfw/object/array.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/dictionary.cpp /Fo:sfw/object/dictionary.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/ref_ptr.cpp /Fo:sfw/object/ref_ptr.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/object/resource.cpp /Fo:sfw/object/resource.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/application.cpp /Fo:sfw/render_core/application.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/scene.cpp /Fo:sfw/render_core/scene.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/app_window.cpp /Fo:sfw/render_core/app_window.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/shader.cpp /Fo:sfw/render_core/shader.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/material.cpp /Fo:sfw/render_core/material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/mesh.cpp /Fo:sfw/render_core/mesh.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/mesh_utils.cpp /Fo:sfw/render_core/mesh_utils.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/texture.cpp /Fo:sfw/render_core/texture.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/image.cpp /Fo:sfw/render_core/image.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/render_state.cpp /Fo:sfw/render_core/render_state.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/keyboard.cpp /Fo:sfw/render_core/keyboard.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/input_event.cpp /Fo:sfw/render_core/input_event.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/input_map.cpp /Fo:sfw/render_core/input_map.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/input.cpp /Fo:sfw/render_core/input.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/shortcut.cpp /Fo:sfw/render_core/shortcut.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/font.cpp /Fo:sfw/render_core/font.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/color_material_2d.cpp /Fo:sfw/render_core/color_material_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/color_material.cpp /Fo:sfw/render_core/color_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/colored_material.cpp /Fo:sfw/render_core/colored_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/font_material.cpp /Fo:sfw/render_core/font_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/texture_material_2d.cpp /Fo:sfw/render_core/texture_material_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/texture_material.cpp /Fo:sfw/render_core/texture_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/transparent_texture_material.cpp /Fo:sfw/render_core/transparent_texture_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_immediate/renderer.cpp /Fo:sfw/render_immediate/renderer.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/camera_3d.cpp /Fo:sfw/render_objects/camera_3d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/object_3d.cpp /Fo:sfw/render_objects/object_3d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/mesh_instance_3d.cpp /Fo:sfw/render_objects/mesh_instance_3d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/camera_2d.cpp /Fo:sfw/render_objects/camera_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/mesh_instance_2d.cpp /Fo:sfw/render_objects/mesh_instance_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/object_2d.cpp /Fo:sfw/render_objects/object_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/sprite.cpp /Fo:sfw/render_objects/sprite.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/tile_map.cpp /Fo:sfw/render_objects/tile_map.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_objects/text_2d.cpp /Fo:sfw/render_objects/text_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/game_scene.cpp /Fo:sfw/game_scene.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/main.cpp /Fo:sfw/main.obj
rem cl main.cpp shader.cpp material.cpp mesh.cpp mesh_instance.cpp mesh_utils.cpp texture.cpp camera.cpp application.cpp scene.cpp game_scene.cpp object_2d.cpp tile_map.cpp sprite.cpp ^
rem libs\glad\src\glad.c /Febin/game-vc.exe ^
rem /EHsc ^
rem /Ilibs\SDL2-VC\include ^
rem /Ilibs\glad\include ^
rem /link /LIBPATH:libs\SDL2-VC\lib SDL2.lib SDL2main.lib opengl32.lib ^
rem /SUBSYSTEM:CONSOLE
cl /D_REENTRANT /Zi ^
/EHsc ^
/Fegame-vc.exe ^
sfw/core/aabb.obj sfw/core/basis.obj sfw/core/color.obj ^
sfw/core/face3.obj sfw/core/logger.obj sfw/core/math_funcs.obj ^
sfw/core/memory.obj sfw/core/pcg.obj sfw/core/plane.obj sfw/core/projection.obj sfw/core/quaternion.obj sfw/core/random_pcg.obj ^
sfw/core/rect2.obj sfw/core/rect2i.obj sfw/core/safe_refcount.obj sfw/core/transform_2d.obj sfw/core/transform.obj ^
sfw/core/ustring.obj sfw/core/string_name.obj ^
sfw/core/vector2.obj sfw/core/vector2i.obj sfw/core/vector3.obj ^
sfw/core/vector3i.obj sfw/core/vector4.obj sfw/core/vector4i.obj ^
sfw/core/pool_vector.obj sfw/core/pool_allocator.obj sfw/core/mutex.obj sfw/core/sfw_time.obj ^
sfw/core/dir_access.obj sfw/core/file_access.obj ^
sfw/core/sfw_core.obj ^
sfw/object/object.obj sfw/object/reference.obj sfw/object/core_string_names.obj ^
sfw/object/variant.obj sfw/object/variant_op.obj sfw/object/psignal.obj ^
sfw/object/array.obj sfw/object/dictionary.obj sfw/object/ref_ptr.obj ^
sfw/object/resource.obj ^
sfw/render_core/image.obj sfw/render_core/render_state.obj ^
sfw/render_core/application.obj sfw/render_core/scene.obj sfw/render_core/app_window.obj ^
sfw/render_core/shader.obj sfw/render_core/material.obj sfw/render_core/mesh.obj ^
sfw/render_core/mesh_utils.obj sfw/render_core/texture.obj ^
sfw/render_core/input_event.obj sfw/render_core/input_map.obj ^
sfw/render_core/input.obj sfw/render_core/shortcut.obj ^
sfw/render_core/keyboard.obj sfw/render_core/font.obj ^
sfw/render_core/color_material_2d.obj sfw/render_core/color_material.obj ^
sfw/render_core/colored_material.obj sfw/render_core/font_material.obj ^
sfw/render_core/texture_material_2d.obj sfw/render_core/texture_material.obj ^
sfw/render_core/transparent_texture_material.obj ^
sfw/render_immediate/renderer.obj ^
sfw/render_objects/camera_3d.obj sfw/render_objects/object_3d.obj sfw/render_objects/mesh_instance_3d.obj ^
sfw/render_objects/object_2d.obj ^
sfw/render_objects/sprite.obj sfw/render_objects/tile_map.obj ^
sfw/render_objects/camera_2d.obj sfw/render_objects/mesh_instance_2d.obj ^
sfw/render_objects/text_2d.obj ^
sfw/game_scene.obj sfw/main.obj ^
/SUBSYSTEM:CONSOLE

View File

@ -45,6 +45,10 @@
#endif
#ifdef _MSC_VER
#pragma comment(lib, "Shlwapi")
#endif
#if defined(_WIN64) || defined(_WIN32)
bool DirAccess::is_link(String p_file) {

View File

@ -249,7 +249,7 @@ _FORCE_INLINE_ void _RLOG_MACRO_TEMPLATE_FUNC(STR str, A p0, B p1, C p2, D p3, E
RLogger::log_error(__FUNCTION__, __FILE__, __LINE__, msg); \
GENERATE_TRAP
#define CRASH_NOW(msg) \
#define CRASH_NOW() \
RLogger::log_error(__FUNCTION__, __FILE__, __LINE__, "CRASH!"); \
GENERATE_TRAP

View File

@ -23,15 +23,15 @@ void *operator new(size_t p_size, void *(*p_allocfunc)(size_t p_size)) {
#ifdef _MSC_VER
void operator delete(void *p_mem, const char *p_description) {
CRASH_NOW_MSG("Call to placement delete should not happen.");
CRASH_MSG("Call to placement delete should not happen.");
}
void operator delete(void *p_mem, void *(*p_allocfunc)(size_t p_size)) {
CRASH_NOW_MSG("Call to placement delete should not happen.");
CRASH_MSG("Call to placement delete should not happen.");
}
void operator delete(void *p_mem, void *p_pointer, size_t check, const char *p_description) {
CRASH_NOW_MSG("Call to placement delete should not happen.");
CRASH_MSG("Call to placement delete should not happen.");
}
#endif

View File

@ -4,9 +4,7 @@
//--STRIP
#include "core/sfw_time.h"
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <ctime>
//--STRIP
@ -14,6 +12,9 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winnt.h>
#else
#include <sys/time.h>
#include <unistd.h>
#endif
#if 0
@ -120,8 +121,8 @@ static uint64_t nanotimer(uint64_t *out_freq) {
}
uint64_t SFWTime::time_ns() {
static __thread uint64_t epoch = 0;
static __thread uint64_t freq = 0;
static thread_local uint64_t epoch = 0;
static thread_local uint64_t freq = 0;
if (!freq) {
epoch = nanotimer(&freq);
}

View File

@ -13574,7 +13574,7 @@ static _GLFWinitconfig _glfwInitHints =
// Terminate the library
//
static void terminate(void)
static void _glfw_terminate_(void)
{
int i;
@ -13775,7 +13775,7 @@ GLFWAPI int glfwInit(void)
if (!_glfwPlatformInit())
{
terminate();
_glfw_terminate_();
return GLFW_FALSE;
}
@ -13783,7 +13783,7 @@ GLFWAPI int glfwInit(void)
!_glfwPlatformCreateTls(&_glfw.errorSlot) ||
!_glfwPlatformCreateTls(&_glfw.contextSlot))
{
terminate();
_glfw_terminate_();
return GLFW_FALSE;
}
@ -13803,7 +13803,7 @@ GLFWAPI void glfwTerminate(void)
if (!_glfw.initialized)
return;
terminate();
_glfw_terminate_();
}
GLFWAPI void glfwInitHint(int hint, int value)

View File

@ -169,39 +169,37 @@ void AppWindow::window_hints(unsigned flags) {
//glfwWindowHint( GLFW_COCOA_MENUBAR, GLFW_FALSE );
#endif
#ifdef __APPLE__
#if defined(__APPLE__)
/* We need to explicitly ask for a 3.2 context on OS X */
//glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // osx
//glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); // osx, 2:#version150,3:330
#else
//according to the documentation, it must be GLFW_OPENGL_ANY_PROFILE.
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
#elif defined(_WIN64) || defined(_WIN32)
// Compute shaders need 4.5 otherwise. But...
// According to the GLFW docs, the context version hint acts as a minimum version.
// i.e, the context you actually get may be a higher or highest version (which is usually the case)
//glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
//glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
//according to the documentation, it must be GLFW_OPENGL_ANY_PROFILE.
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
#else
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
#endif
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //osx
#endif
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //osx+ems
glfwWindowHint(GLFW_STENCIL_BITS, 8); //osx
glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
//according to the documentation, it must be GLFW_OPENGL_ANY_PROFILE.
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
/*
#if defined(_WIN64) || defined(_WIN32)
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
#else
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#endif
*/
//glfwWindowHint( GLFW_RED_BITS, 8 );
//glfwWindowHint( GLFW_GREEN_BITS, 8 );
//glfwWindowHint( GLFW_BLUE_BITS, 8 );