1
0
Fork 0

Merge branch '2-replace-glew' into dev

This commit is contained in:
Henrik Hautakoski 2018-05-14 21:05:37 +02:00
commit d65e31f4f7
20 changed files with 3470 additions and 45240 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,14 +2,6 @@
#ifndef SPECTRE_OPENGL_H
#define SPECTRE_OPENGL_H
#ifdef _WIN32
#ifdef _MSC_VER
#include <Windows.h>
#endif /* !_MSC_VER */
#include "GL/glew.h"
#include "GL/wglew.h"
#endif /* !_WIN32 */
#include <Spectre/Graphics/GL/glad.h>
#endif /* SPECTRE_OPENGL_H */

1017
source/Graphics/GL/glad.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,5 @@
#include <GL/glew.h>
#include <GL/wglew.h>
#include "glad_wgl.h"
#include <Platform/PlatformDisplay.h>
#include <Spectre/System/Log.h>
@ -9,14 +8,20 @@
#include "Win32GLContext.h"
// Ensure that OpenGL extensions are loaded.
static void ensureExtensionsLoaded()
static void ensureExtensionsLoaded(HDC dc)
{
glewExperimental = GL_TRUE;
GLenum ret = glewInit();
if (ret != GLEW_OK) {
log("Win32: Could not initialize GLEW %s\n",
glewGetErrorString(ret));
return;
static bool init = false;
if (!init) {
init = true;
if (!gladLoadWGL(dc)) {
log("Win32: Could not load WGL extensions\n");
}
if (!gladLoadGL()) {
log("Win32: Could not load OpenGL extensions\n");
}
}
}
@ -89,42 +94,31 @@ void Win32GLContext::createGLContext()
tmpDC = ::wglCreateContext(m_deviceContext);
::wglMakeCurrent(m_deviceContext, tmpDC);
ensureExtensionsLoaded();
ensureExtensionsLoaded(m_deviceContext);
// Dont need to old one anymore.
wglMakeCurrent(m_deviceContext, NULL);
::wglDeleteContext(tmpDC);
// Have new CreateContextAttribs function.
if (WGLEW_ARB_create_context_profile) {
// TODO: For now.. We force 3.2 Core but this should not be implementation specific.
// The Display class should force that for all GLContext Implementations.
// TODO: For now.. We force 3.2 Core but this should not be implementation specific.
// The Display class should force that for all GLContext Implementations.
int attriblist[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0, 0
};
int attriblist[] = {
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 2,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0, 0
};
// Create real context.
m_renderContext = ::wglCreateContextAttribsARB(m_deviceContext, 0, attriblist);
}
// Could create a old context, but anything below 3.2 is so so old.
else {
log("Win32 - OpenGL 3.2 is not available!\n");
}
// Create real context.
m_renderContext = ::wglCreateContextAttribsARB(m_deviceContext, 0, attriblist);
}
bool Win32GLContext::activate()
{
// Make sure we have dc and rc before calling MakeCurrent.
if (m_deviceContext && m_renderContext) {
bool ret = ::wglMakeCurrent(m_deviceContext, m_renderContext);
ensureExtensionsLoaded();
return ret;
return ::wglMakeCurrent(m_deviceContext, m_renderContext);
}
return false;
}
@ -141,13 +135,9 @@ bool Win32GLContext::isActive() const
bool Win32GLContext::setSwapInterval(int interval)
{
ensureExtensionsLoaded();
ensureExtensionsLoaded(m_deviceContext);
if (WGLEW_EXT_swap_control) {
return wglSwapIntervalEXT(interval);
}
log("wglSwapInterval: function is not supported\n");
return false;
return wglSwapIntervalEXT(interval);
}
void Win32GLContext::setSize(unsigned int width, unsigned int height)

View file

@ -0,0 +1,256 @@
/*
WGL loader generated by glad 0.1.20a0 on Mon May 14 10:58:11 2018.
Language/Generator: C/C++
Specification: wgl
APIs: wgl=1.0
Profile: -
Extensions:
WGL_ARB_create_context,
WGL_ARB_create_context_profile,
WGL_ARB_extensions_string,
WGL_EXT_extensions_string,
WGL_EXT_swap_control
Loader: True
Local files: True
Omit khrplatform: True
Commandline:
--api="wgl=1.0" --generator="c" --spec="wgl" --local-files --omit-khrplatform --extensions="WGL_ARB_create_context,WGL_ARB_create_context_profile,WGL_ARB_extensions_string,WGL_EXT_extensions_string,WGL_EXT_swap_control"
Online:
http://glad.dav1d.de/#language=c&specification=wgl&loader=on&api=wgl%3D1.0&extensions=WGL_ARB_create_context&extensions=WGL_ARB_create_context_profile&extensions=WGL_ARB_extensions_string&extensions=WGL_EXT_extensions_string&extensions=WGL_EXT_swap_control
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "glad_wgl.h"
static void* get_proc(const char *namez);
#if defined(_WIN32) || defined(__CYGWIN__)
#include <windows.h>
static HMODULE libGL;
typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*);
static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
#ifdef _MSC_VER
#ifdef __has_include
#if __has_include(<winapifamily.h>)
#define HAVE_WINAPIFAMILY 1
#endif
#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_
#define HAVE_WINAPIFAMILY 1
#endif
#endif
#ifdef HAVE_WINAPIFAMILY
#include <winapifamily.h>
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#define IS_UWP 1
#endif
#endif
static
int open_gl(void) {
#ifndef IS_UWP
libGL = LoadLibraryW(L"opengl32.dll");
if(libGL != NULL) {
gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE)GetProcAddress(
libGL, "wglGetProcAddress");
return gladGetProcAddressPtr != NULL;
}
#endif
return 0;
}
static
void close_gl(void) {
if(libGL != NULL) {
FreeLibrary((HMODULE) libGL);
libGL = NULL;
}
}
#else
#include <dlfcn.h>
static void* libGL;
#ifndef __APPLE__
typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*);
static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
#endif
static
int open_gl(void) {
#ifdef __APPLE__
static const char *NAMES[] = {
"../Frameworks/OpenGL.framework/OpenGL",
"/Library/Frameworks/OpenGL.framework/OpenGL",
"/System/Library/Frameworks/OpenGL.framework/OpenGL",
"/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
};
#else
static const char *NAMES[] = {"libGL.so.1", "libGL.so"};
#endif
unsigned int index = 0;
for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) {
libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL);
if(libGL != NULL) {
#ifdef __APPLE__
return 1;
#else
gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL,
"glXGetProcAddressARB");
return gladGetProcAddressPtr != NULL;
#endif
}
}
return 0;
}
static
void close_gl(void) {
if(libGL != NULL) {
dlclose(libGL);
libGL = NULL;
}
}
#endif
static
void* get_proc(const char *namez) {
void* result = NULL;
if(libGL == NULL) return NULL;
#ifndef __APPLE__
if(gladGetProcAddressPtr != NULL) {
result = gladGetProcAddressPtr(namez);
}
#endif
if(result == NULL) {
#if defined(_WIN32) || defined(__CYGWIN__)
result = (void*)GetProcAddress((HMODULE) libGL, namez);
#else
result = dlsym(libGL, namez);
#endif
}
return result;
}
int gladLoadWGL(HDC hdc) {
int status = 0;
if(open_gl()) {
status = gladLoadWGLLoader((GLADloadproc)get_proc, hdc);
close_gl();
}
return status;
}
static HDC GLADWGLhdc = (HDC)INVALID_HANDLE_VALUE;
static int get_exts(void) {
return 1;
}
static void free_exts(void) {
return;
}
static int has_ext(const char *ext) {
const char *terminator;
const char *loc;
const char *extensions;
if(wglGetExtensionsStringEXT == NULL && wglGetExtensionsStringARB == NULL)
return 0;
if(wglGetExtensionsStringARB == NULL || GLADWGLhdc == INVALID_HANDLE_VALUE)
extensions = wglGetExtensionsStringEXT();
else
extensions = wglGetExtensionsStringARB(GLADWGLhdc);
if(extensions == NULL || ext == NULL)
return 0;
while(1) {
loc = strstr(extensions, ext);
if(loc == NULL)
break;
terminator = loc + strlen(ext);
if((loc == extensions || *(loc - 1) == ' ') &&
(*terminator == ' ' || *terminator == '\0'))
{
return 1;
}
extensions = terminator;
}
return 0;
}
int GLAD_WGL_VERSION_1_0;
int GLAD_WGL_ARB_extensions_string;
int GLAD_WGL_EXT_swap_control;
int GLAD_WGL_EXT_extensions_string;
int GLAD_WGL_ARB_create_context_profile;
int GLAD_WGL_ARB_create_context;
PFNWGLCREATECONTEXTATTRIBSARBPROC glad_wglCreateContextAttribsARB;
PFNWGLGETEXTENSIONSSTRINGARBPROC glad_wglGetExtensionsStringARB;
PFNWGLGETEXTENSIONSSTRINGEXTPROC glad_wglGetExtensionsStringEXT;
PFNWGLSWAPINTERVALEXTPROC glad_wglSwapIntervalEXT;
PFNWGLGETSWAPINTERVALEXTPROC glad_wglGetSwapIntervalEXT;
static void load_WGL_ARB_create_context(GLADloadproc load) {
if(!GLAD_WGL_ARB_create_context) return;
glad_wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)load("wglCreateContextAttribsARB");
}
static void load_WGL_ARB_extensions_string(GLADloadproc load) {
if(!GLAD_WGL_ARB_extensions_string) return;
glad_wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)load("wglGetExtensionsStringARB");
}
static void load_WGL_EXT_extensions_string(GLADloadproc load) {
if(!GLAD_WGL_EXT_extensions_string) return;
glad_wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)load("wglGetExtensionsStringEXT");
}
static void load_WGL_EXT_swap_control(GLADloadproc load) {
if(!GLAD_WGL_EXT_swap_control) return;
glad_wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)load("wglSwapIntervalEXT");
glad_wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)load("wglGetSwapIntervalEXT");
}
static int find_extensionsWGL(void) {
if (!get_exts()) return 0;
GLAD_WGL_ARB_create_context = has_ext("WGL_ARB_create_context");
GLAD_WGL_ARB_create_context_profile = has_ext("WGL_ARB_create_context_profile");
GLAD_WGL_ARB_extensions_string = has_ext("WGL_ARB_extensions_string");
GLAD_WGL_EXT_extensions_string = has_ext("WGL_EXT_extensions_string");
GLAD_WGL_EXT_swap_control = has_ext("WGL_EXT_swap_control");
free_exts();
return 1;
}
static void find_coreWGL(HDC hdc) {
GLADWGLhdc = hdc;
}
int gladLoadWGLLoader(GLADloadproc load, HDC hdc) {
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)load("wglGetExtensionsStringARB");
wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)load("wglGetExtensionsStringEXT");
if(wglGetExtensionsStringARB == NULL && wglGetExtensionsStringEXT == NULL) return 0;
find_coreWGL(hdc);
if (!find_extensionsWGL()) return 0;
load_WGL_ARB_create_context(load);
load_WGL_ARB_extensions_string(load);
load_WGL_EXT_extensions_string(load);
load_WGL_EXT_swap_control(load);
return 1;
}

View file

@ -0,0 +1,157 @@
/*
WGL loader generated by glad 0.1.20a0 on Mon May 14 10:58:11 2018.
Language/Generator: C/C++
Specification: wgl
APIs: wgl=1.0
Profile: -
Extensions:
WGL_ARB_create_context,
WGL_ARB_create_context_profile,
WGL_ARB_extensions_string,
WGL_EXT_extensions_string,
WGL_EXT_swap_control
Loader: True
Local files: True
Omit khrplatform: True
Commandline:
--api="wgl=1.0" --generator="c" --spec="wgl" --local-files --omit-khrplatform --extensions="WGL_ARB_create_context,WGL_ARB_create_context_profile,WGL_ARB_extensions_string,WGL_EXT_extensions_string,WGL_EXT_swap_control"
Online:
http://glad.dav1d.de/#language=c&specification=wgl&loader=on&api=wgl%3D1.0&extensions=WGL_ARB_create_context&extensions=WGL_ARB_create_context_profile&extensions=WGL_ARB_extensions_string&extensions=WGL_EXT_extensions_string&extensions=WGL_EXT_swap_control
*/
#ifndef WINAPI
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
#ifndef NOMINMAX
#define NOMINMAX 1
#endif
#include <windows.h>
#endif
#include <Spectre/Graphics/GL/glad.h>
#ifndef __glad_wglext_h_
#ifdef __wglext_h_
#error WGL header already included, remove this include, glad already provides it
#endif
#define __glad_wglext_h_
#define __wglext_h_
#ifndef APIENTRY
#define APIENTRY
#endif
#ifndef APIENTRYP
#define APIENTRYP APIENTRY *
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef void* (* GLADloadproc)(const char *name);
#ifndef GLAPI
# if defined(GLAD_GLAPI_EXPORT)
# if defined(_WIN32) || defined(__CYGWIN__)
# if defined(GLAD_GLAPI_EXPORT_BUILD)
# if defined(__GNUC__)
# define GLAPI __attribute__ ((dllexport)) extern
# else
# define GLAPI __declspec(dllexport) extern
# endif
# else
# if defined(__GNUC__)
# define GLAPI __attribute__ ((dllimport)) extern
# else
# define GLAPI __declspec(dllimport) extern
# endif
# endif
# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD)
# define GLAPI __attribute__ ((visibility ("default"))) extern
# else
# define GLAPI extern
# endif
# else
# define GLAPI extern
# endif
#endif
GLAPI int gladLoadWGL(HDC hdc);
GLAPI int gladLoadWGLLoader(GLADloadproc, HDC hdc);
struct _GPU_DEVICE {
DWORD cb;
CHAR DeviceName[32];
CHAR DeviceString[128];
DWORD Flags;
RECT rcVirtualScreen;
};
DECLARE_HANDLE(HPBUFFERARB);
DECLARE_HANDLE(HPBUFFEREXT);
DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
DECLARE_HANDLE(HPVIDEODEV);
DECLARE_HANDLE(HPGPUNV);
DECLARE_HANDLE(HGPUNV);
DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
typedef struct _GPU_DEVICE GPU_DEVICE;
typedef struct _GPU_DEVICE *PGPU_DEVICE;
#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
#define WGL_CONTEXT_FLAGS_ARB 0x2094
#define ERROR_INVALID_VERSION_ARB 0x2095
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
#define ERROR_INVALID_PROFILE_ARB 0x2096
#ifndef WGL_ARB_create_context
#define WGL_ARB_create_context 1
GLAPI int GLAD_WGL_ARB_create_context;
typedef HGLRC (APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int *attribList);
GLAPI PFNWGLCREATECONTEXTATTRIBSARBPROC glad_wglCreateContextAttribsARB;
#define wglCreateContextAttribsARB glad_wglCreateContextAttribsARB
#endif
#ifndef WGL_ARB_create_context_profile
#define WGL_ARB_create_context_profile 1
GLAPI int GLAD_WGL_ARB_create_context_profile;
#endif
#ifndef WGL_ARB_extensions_string
#define WGL_ARB_extensions_string 1
GLAPI int GLAD_WGL_ARB_extensions_string;
typedef const char * (APIENTRYP PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
GLAPI PFNWGLGETEXTENSIONSSTRINGARBPROC glad_wglGetExtensionsStringARB;
#define wglGetExtensionsStringARB glad_wglGetExtensionsStringARB
#endif
#ifndef WGL_EXT_extensions_string
#define WGL_EXT_extensions_string 1
GLAPI int GLAD_WGL_EXT_extensions_string;
typedef const char * (APIENTRYP PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void);
GLAPI PFNWGLGETEXTENSIONSSTRINGEXTPROC glad_wglGetExtensionsStringEXT;
#define wglGetExtensionsStringEXT glad_wglGetExtensionsStringEXT
#endif
#ifndef WGL_EXT_swap_control
#define WGL_EXT_swap_control 1
GLAPI int GLAD_WGL_EXT_swap_control;
typedef BOOL (APIENTRYP PFNWGLSWAPINTERVALEXTPROC)(int interval);
GLAPI PFNWGLSWAPINTERVALEXTPROC glad_wglSwapIntervalEXT;
#define wglSwapIntervalEXT glad_wglSwapIntervalEXT
typedef int (APIENTRYP PFNWGLGETSWAPINTERVALEXTPROC)(void);
GLAPI PFNWGLGETSWAPINTERVALEXTPROC glad_wglGetSwapIntervalEXT;
#define wglGetSwapIntervalEXT glad_wglGetSwapIntervalEXT
#endif
#ifdef __cplusplus
}
#endif
#endif

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -37,9 +37,8 @@
<ClInclude Include="include\Spectre\Graphics\BatchRenderer2D.h" />
<ClInclude Include="include\Spectre\Graphics\DefaultRenderer2D.h" />
<ClInclude Include="include\Spectre\Graphics\Font.h" />
<ClInclude Include="include\Spectre\Graphics\GL\glew.h" />
<ClInclude Include="include\Spectre\Graphics\GL\glxew.h" />
<ClInclude Include="include\Spectre\Graphics\GL\wglew.h" />
<ClInclude Include="include\Spectre\Graphics\GLLoader.h" />
<ClInclude Include="include\Spectre\Graphics\GL\glad.h" />
<ClInclude Include="include\Spectre\Graphics\Image.h" />
<ClInclude Include="include\Spectre\Graphics\OpenGL.h" />
<ClInclude Include="include\Spectre\Graphics\PixelFormat.h" />
@ -84,6 +83,7 @@
<ClInclude Include="source\Platform\PlatformDisplay.h" />
<ClInclude Include="source\Platform\PlatformInput.h" />
<ClInclude Include="source\Platform\PlatformMisc.h" />
<ClInclude Include="source\Platform\Win32\glad_wgl.h" />
<ClInclude Include="source\Platform\Win32\Win32Application.h" />
<ClInclude Include="source\Platform\Win32\Win32Display.h" />
<ClInclude Include="source\Platform\Win32\Win32GLContext.h" />
@ -110,6 +110,7 @@
<ClCompile Include="source\Graphics\Font\FreeTypeDriver.cpp" />
<ClCompile Include="source\Graphics\Font\FreeTypeError.cpp" />
<ClCompile Include="source\Graphics\GL\CheckError.cpp" />
<ClCompile Include="source\Graphics\GL\glad.c" />
<ClCompile Include="source\Graphics\Image.cpp" />
<ClCompile Include="source\Graphics\ImageLoader.cpp" />
<ClCompile Include="source\Graphics\Renderable2D.cpp" />
@ -133,6 +134,7 @@
<ClCompile Include="source\Math\Math.cpp" />
<ClCompile Include="source\Math\Transform.cpp" />
<ClCompile Include="source\Platform\PlatformDisplay.cpp" />
<ClCompile Include="source\Platform\Win32\glad_wgl.c" />
<ClCompile Include="source\Platform\Win32\Win32Application.cpp" />
<ClCompile Include="source\Platform\Win32\Win32Display.cpp" />
<ClCompile Include="source\Platform\Win32\Win32GLContext.cpp" />
@ -206,7 +208,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib>
<AdditionalDependencies>glew32s.lib;freetype-d-s.lib</AdditionalDependencies>
<AdditionalDependencies>freetype-d-s.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>
</Lib>
<ProjectReference>

View file

@ -121,15 +121,6 @@
<ClInclude Include="include\Spectre\Game\GameTime.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\GL\glew.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\GL\glxew.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\GL\wglew.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\BatchRenderer2D.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -250,6 +241,15 @@
<ClInclude Include="include\Spectre\Display\GLContextSettings.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\GLLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="source\Platform\Win32\glad_wgl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Spectre\Graphics\GL\glad.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="source\Core\String.cpp">
@ -417,5 +417,11 @@
<ClCompile Include="source\GraphicsOpenGL.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="source\Platform\Win32\glad_wgl.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="source\Graphics\GL\glad.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>