#include "gl_loader.h" #ifdef _WIN32 PFNGLATTACHSHADERPROC fn_glAttachShader = nullptr; PFNGLBINDBUFFERPROC fn_glBindBuffer = nullptr; PFNGLBINDFRAMEBUFFERPROC fn_glBindFramebuffer = nullptr; PFNGLBINDVERTEXARRAYPROC fn_glBindVertexArray = nullptr; PFNGLCOMPILESHADERPROC fn_glCompileShader = nullptr; PFNGLCREATEPROGRAMPROC fn_glCreateProgram = nullptr; PFNGLCREATESHADERPROC fn_glCreateShader = nullptr; PFNGLDELETEBUFFERSPROC fn_glDeleteBuffers = nullptr; PFNGLDELETEFRAMEBUFFERSPROC fn_glDeleteFramebuffers = nullptr; PFNGLDELETEPROGRAMPROC fn_glDeleteProgram = nullptr; PFNGLDELETESHADERPROC fn_glDeleteShader = nullptr; PFNGLDELETEVERTEXARRAYSPROC fn_glDeleteVertexArrays = nullptr; PFNGLFRAMEBUFFERTEXTURE2DPROC fn_glFramebufferTexture2D = nullptr; PFNGLGENBUFFERSPROC fn_glGenBuffers = nullptr; PFNGLGENFRAMEBUFFERSPROC fn_glGenFramebuffers = nullptr; PFNGLGENVERTEXARRAYSPROC fn_glGenVertexArrays = nullptr; PFNGLGETPROGRAMINFOLOGPROC fn_glGetProgramInfoLog = nullptr; PFNGLGETPROGRAMIVPROC fn_glGetProgramiv = nullptr; PFNGLGETSHADERINFOLOGPROC fn_glGetShaderInfoLog = nullptr; PFNGLGETSHADERIVPROC fn_glGetShaderiv = nullptr; PFNGLGETUNIFORMLOCATIONPROC fn_glGetUniformLocation = nullptr; PFNGLLINKPROGRAMPROC fn_glLinkProgram = nullptr; PFNGLSHADERSOURCEPROC fn_glShaderSource = nullptr; PFNGLUNIFORM1FPROC fn_glUniform1f = nullptr; PFNGLUNIFORM2FPROC fn_glUniform2f = nullptr; PFNGLUSEPROGRAMPROC fn_glUseProgram = nullptr; namespace fn::gfx { bool gl_loader_init() { #define LOAD(name) \ fn_##name = (decltype(fn_##name))wglGetProcAddress(#name); \ if (!fn_##name) return false LOAD(glAttachShader); LOAD(glBindBuffer); LOAD(glBindFramebuffer); LOAD(glBindVertexArray); LOAD(glCompileShader); LOAD(glCreateProgram); LOAD(glCreateShader); LOAD(glDeleteBuffers); LOAD(glDeleteFramebuffers); LOAD(glDeleteProgram); LOAD(glDeleteShader); LOAD(glDeleteVertexArrays); LOAD(glFramebufferTexture2D); LOAD(glGenBuffers); LOAD(glGenFramebuffers); LOAD(glGenVertexArrays); LOAD(glGetProgramInfoLog); LOAD(glGetProgramiv); LOAD(glGetShaderInfoLog); LOAD(glGetShaderiv); LOAD(glGetUniformLocation); LOAD(glLinkProgram); LOAD(glShaderSource); LOAD(glUniform1f); LOAD(glUniform2f); LOAD(glUseProgram); #undef LOAD return true; } } // namespace fn::gfx #else namespace fn::gfx { bool gl_loader_init() { return true; } } // namespace fn::gfx #endif