import dlibincludes; // TODO: fix on js side alias PFNGLXCREATECONTEXTATTRIBSARBPROC = extern(C) GLXContext function(Display*, GLXFBConfig, GLXContext, int, const int*); PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB; PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; PFNGLGENBUFFERSPROC glGenBuffers; PFNGLCOMPILESHADERPROC glCompileShader; PFNGLUSEPROGRAMPROC glUseProgram; PFNGLVALIDATEPROGRAMPROC glValidateProgram; PFNGLBINDBUFFERBASEPROC glBindBufferBase; PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex; PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray; PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; PFNGLBINDVERTEXARRAYPROC glBindVertexArray; PFNGLBINDBUFFERPROC glBindBuffer; PFNGLBUFFERDATAPROC glBufferData; PFNGLBUFFERSUBDATAPROC glBufferSubData; PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor; PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced; PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced; PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation; PFNGLUNIFORM1FPROC glUniform1f; PFNGLUNIFORM2FPROC glUniform2f; PFNGLUNIFORM3FPROC glUniform3f; PFNGLUNIFORM4FPROC glUniform4f; PFNGLUNIFORM1IPROC glUniform1i; PFNGLUNIFORM2IPROC glUniform2i; PFNGLUNIFORM3IPROC glUniform3i; PFNGLUNIFORM4IPROC glUniform4i; PFNGLCREATEPROGRAMPROC glCreateProgram; PFNGLCREATESHADERPROC glCreateShader; PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; PFNGLDELETEPROGRAMPROC glDeleteProgram; PFNGLDELETESHADERPROC glDeleteShader; PFNGLSHADERSOURCEPROC glShaderSource; PFNGLGETPROGRAMIVPROC glGetProgramiv; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; PFNGLGETSHADERIVPROC glGetShaderiv; PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; PFNGLATTACHSHADERPROC glAttachShader; PFNGLLINKPROGRAMPROC glLinkProgram; static if(!__traits(compiles, { glActiveTexture(0x84C0); })) { PFNGLACTIVETEXTUREPROC glActiveTexture; } version(linux) { //alias RGFW_getProcAddress_OpenGL = RGFW_getProcAddress_OpenGL_X11; } bool GLLoadFuncs() { glDeleteRenderbuffers = cast(typeof(glDeleteRenderbuffers))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDeleteRenderbuffers".ptr); glGenRenderbuffers = cast(typeof(glGenRenderbuffers))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGenRenderbuffers".ptr); glGenVertexArrays = cast(typeof(glGenVertexArrays))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGenVertexArrays".ptr); glDeleteVertexArrays = cast(typeof(glDeleteVertexArrays))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDeleteVertexArrays".ptr); glGenBuffers = cast(typeof(glGenBuffers))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGenBuffers".ptr); glCompileShader = cast(typeof(glCompileShader))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glCompileShader".ptr); glUseProgram = cast(typeof(glUseProgram))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUseProgram".ptr); glValidateProgram = cast(typeof(glValidateProgram))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glValidateProgram".ptr); glBindBufferBase = cast(typeof(glBindBufferBase))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBindBufferBase".ptr); glGetUniformBlockIndex = cast(typeof(glGetUniformBlockIndex))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetUniformBlockIndex".ptr); glEnableVertexAttribArray = cast(typeof(glEnableVertexAttribArray))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glEnableVertexAttribArray".ptr); glDisableVertexAttribArray = cast(typeof(glDisableVertexAttribArray))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDisableVertexAttribArray".ptr); glBlendFuncSeparate = cast(typeof(glBlendFuncSeparate))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBlendFuncSeparate".ptr); glBindVertexArray = cast(typeof(glBindVertexArray))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBindVertexArray".ptr); glBindBuffer = cast(typeof(glBindBuffer))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBindBuffer".ptr); glBufferData = cast(typeof(glBufferData))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBufferData".ptr); glBufferSubData = cast(typeof(glBufferSubData))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glBufferSubData".ptr); glVertexAttribDivisor = cast(typeof(glVertexAttribDivisor))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glVertexAttribDivisor".ptr); glVertexAttribPointer = cast(typeof(glVertexAttribPointer))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glVertexAttribPointer".ptr); glDrawArraysInstanced = cast(typeof(glDrawArraysInstanced))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDrawArraysInstanced".ptr); glDrawElementsInstanced = cast(typeof(glDrawElementsInstanced))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDrawElementsInstanced".ptr); glGetUniformLocation = cast(typeof(glGetUniformLocation))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetUniformLocation".ptr); glUniform1f = cast(typeof(glUniform1f))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform1f".ptr); glUniform2f = cast(typeof(glUniform2f))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform2f".ptr); glUniform3f = cast(typeof(glUniform3f))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform3f".ptr); glUniform4f = cast(typeof(glUniform4f))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform4f".ptr); glUniform1i = cast(typeof(glUniform1i))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform1i".ptr); glUniform2i = cast(typeof(glUniform2i))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform2i".ptr); glUniform3i = cast(typeof(glUniform3i))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform3i".ptr); glUniform4i = cast(typeof(glUniform4i))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glUniform4i".ptr); glCreateProgram = cast(typeof(glCreateProgram))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glCreateProgram".ptr); glCreateShader = cast(typeof(glCreateShader))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glCreateShader".ptr); glDeleteFramebuffers = cast(typeof(glDeleteFramebuffers))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDeleteFramebuffers".ptr); glDeleteProgram = cast(typeof(glDeleteProgram))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDeleteProgram".ptr); glDeleteShader = cast(typeof(glDeleteShader))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glDeleteShader".ptr); glShaderSource = cast(typeof(glShaderSource))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glShaderSource".ptr); glGetProgramiv = cast(typeof(glGetProgramiv))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetProgramiv".ptr); glGetProgramInfoLog = cast(typeof(glGetProgramInfoLog))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetProgramInfoLog".ptr); glGetShaderiv = cast(typeof(glGetShaderiv))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetShaderiv".ptr); glGetShaderInfoLog = cast(typeof(glGetShaderInfoLog))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glGetShaderInfoLog".ptr); glAttachShader = cast(typeof(glAttachShader))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glAttachShader".ptr); glLinkProgram = cast(typeof(glLinkProgram))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glLinkProgram".ptr); static if(!__traits(compiles, { glActiveTexture(0x84C0); })) { glActiveTexture = cast(typeof(glActiveTexture))RGFW_getProcAddress_OpenGL(cast(const(char)*)"glActiveTexture".ptr); } return glDeleteRenderbuffers != null; }