diff --git a/opengl/opengl.d b/opengl/opengl.d index 29b56dd..3da2223 100644 --- a/opengl/opengl.d +++ b/opengl/opengl.d @@ -14,68 +14,6 @@ else public import glenum; -__gshared bool FUNCS_LOADED = false; - -version(linux) -{ - alias GLLoadFunc = glXGetProcAddressARB; -} -else static assert(false, "GL function loader alias not set for platform"); - -bool -GLLoadFuncs() -{ - glDeleteRenderbuffers = cast(typeof(glDeleteRenderbuffers))GLLoadFunc(cast(u8*)"glDeleteRenderbuffers".ptr); - glGenRenderbuffers = cast(typeof(glGenRenderbuffers))GLLoadFunc(cast(u8*)"glGenRenderbuffers".ptr); - glGenVertexArrays = cast(typeof(glGenVertexArrays))GLLoadFunc(cast(u8*)"glGenVertexArrays".ptr); - glDeleteVertexArrays = cast(typeof(glDeleteVertexArrays))GLLoadFunc(cast(u8*)"glDeleteVertexArrays".ptr); - glGenBuffers = cast(typeof(glGenBuffers))GLLoadFunc(cast(u8*)"glGenBuffers".ptr); - glCompileShader = cast(typeof(glCompileShader))GLLoadFunc(cast(u8*)"glCompileShader".ptr); - glUseProgram = cast(typeof(glUseProgram))GLLoadFunc(cast(u8*)"glUseProgram".ptr); - glValidateProgram = cast(typeof(glValidateProgram))GLLoadFunc(cast(u8*)"glValidateProgram".ptr); - glBindBufferBase = cast(typeof(glBindBufferBase))GLLoadFunc(cast(u8*)"glBindBufferBase".ptr); - glGetUniformBlockIndex = cast(typeof(glGetUniformBlockIndex))GLLoadFunc(cast(u8*)"glGetUniformBlockIndex".ptr); - glEnableVertexAttribArray = cast(typeof(glEnableVertexAttribArray))GLLoadFunc(cast(u8*)"glEnableVertexAttribArray".ptr); - glDisableVertexAttribArray = cast(typeof(glDisableVertexAttribArray))GLLoadFunc(cast(u8*)"glDisableVertexAttribArray".ptr); - glBlendFuncSeparate = cast(typeof(glBlendFuncSeparate))GLLoadFunc(cast(u8*)"glBlendFuncSeparate".ptr); - glBindVertexArray = cast(typeof(glBindVertexArray))GLLoadFunc(cast(u8*)"glBindVertexArray".ptr); - glBindBuffer = cast(typeof(glBindBuffer))GLLoadFunc(cast(u8*)"glBindBuffer".ptr); - glBufferData = cast(typeof(glBufferData))GLLoadFunc(cast(u8*)"glBufferData".ptr); - glBufferSubData = cast(typeof(glBufferSubData))GLLoadFunc(cast(u8*)"glBufferSubData".ptr); - glVertexAttribDivisor = cast(typeof(glVertexAttribDivisor))GLLoadFunc(cast(u8*)"glVertexAttribDivisor".ptr); - glVertexAttribPointer = cast(typeof(glVertexAttribPointer))GLLoadFunc(cast(u8*)"glVertexAttribPointer".ptr); - glDrawArraysInstanced = cast(typeof(glDrawArraysInstanced))GLLoadFunc(cast(u8*)"glDrawArraysInstanced".ptr); - glDrawElementsInstanced = cast(typeof(glDrawElementsInstanced))GLLoadFunc(cast(u8*)"glDrawElementsInstanced".ptr); - glGetUniformLocation = cast(typeof(glGetUniformLocation))GLLoadFunc(cast(u8*)"glGetUniformLocation".ptr); - glUniform1f = cast(typeof(glUniform1f))GLLoadFunc(cast(u8*)"glUniform1f".ptr); - glUniform2f = cast(typeof(glUniform2f))GLLoadFunc(cast(u8*)"glUniform2f".ptr); - glUniform3f = cast(typeof(glUniform3f))GLLoadFunc(cast(u8*)"glUniform3f".ptr); - glUniform4f = cast(typeof(glUniform4f))GLLoadFunc(cast(u8*)"glUniform4f".ptr); - glUniform1i = cast(typeof(glUniform1i))GLLoadFunc(cast(u8*)"glUniform1i".ptr); - glUniform2i = cast(typeof(glUniform2i))GLLoadFunc(cast(u8*)"glUniform2i".ptr); - glUniform3i = cast(typeof(glUniform3i))GLLoadFunc(cast(u8*)"glUniform3i".ptr); - glUniform4i = cast(typeof(glUniform4i))GLLoadFunc(cast(u8*)"glUniform4i".ptr); - glCreateProgram = cast(typeof(glCreateProgram))GLLoadFunc(cast(u8*)"glCreateProgram".ptr); - glCreateShader = cast(typeof(glCreateShader))GLLoadFunc(cast(u8*)"glCreateShader".ptr); - glDeleteFramebuffers = cast(typeof(glDeleteFramebuffers))GLLoadFunc(cast(u8*)"glDeleteFramebuffers".ptr); - glDeleteProgram = cast(typeof(glDeleteProgram))GLLoadFunc(cast(u8*)"glDeleteProgram".ptr); - glDeleteShader = cast(typeof(glDeleteShader))GLLoadFunc(cast(u8*)"glDeleteShader".ptr); - glShaderSource = cast(typeof(glShaderSource))GLLoadFunc(cast(u8*)"glShaderSource".ptr); - glGetProgramiv = cast(typeof(glGetProgramiv))GLLoadFunc(cast(u8*)"glGetProgramiv".ptr); - glGetProgramInfoLog = cast(typeof(glGetProgramInfoLog))GLLoadFunc(cast(u8*)"glGetProgramInfoLog".ptr); - glGetShaderiv = cast(typeof(glGetShaderiv))GLLoadFunc(cast(u8*)"glGetShaderiv".ptr); - glGetShaderInfoLog = cast(typeof(glGetShaderInfoLog))GLLoadFunc(cast(u8*)"glGetShaderInfoLog".ptr); - glAttachShader = cast(typeof(glAttachShader))GLLoadFunc(cast(u8*)"glAttachShader".ptr); - glLinkProgram = cast(typeof(glLinkProgram))GLLoadFunc(cast(u8*)"glLinkProgram".ptr); - - static if(!__traits(compiles, { glActiveTexture(0x84C0); })) - { - glActiveTexture = cast(typeof(glActiveTexture))GLLoadFunc(cast(u8*)"glActiveTexture".ptr); - } - - return glDeleteRenderbuffers != null; -} - u32 GLCreateShader(GLEnum shader_type, string[] shader_src) { diff --git a/opengl/opengl_native.d b/opengl/opengl_native.d index dcdb48f..58db987 100644 --- a/opengl/opengl_native.d +++ b/opengl/opengl_native.d @@ -52,3 +52,57 @@ static if(!__traits(compiles, { glActiveTexture(0x84C0); })) { PFNGLACTIVETEXTUREPROC glActiveTexture; } + +bool +GLLoadFuncs() +{ + glDeleteRenderbuffers = cast(typeof(glDeleteRenderbuffers))RGFW_getProcAddress_OpenGL(cast(u8*)"glDeleteRenderbuffers".ptr); + glGenRenderbuffers = cast(typeof(glGenRenderbuffers))RGFW_getProcAddress_OpenGL(cast(u8*)"glGenRenderbuffers".ptr); + glGenVertexArrays = cast(typeof(glGenVertexArrays))RGFW_getProcAddress_OpenGL(cast(u8*)"glGenVertexArrays".ptr); + glDeleteVertexArrays = cast(typeof(glDeleteVertexArrays))RGFW_getProcAddress_OpenGL(cast(u8*)"glDeleteVertexArrays".ptr); + glGenBuffers = cast(typeof(glGenBuffers))RGFW_getProcAddress_OpenGL(cast(u8*)"glGenBuffers".ptr); + glCompileShader = cast(typeof(glCompileShader))RGFW_getProcAddress_OpenGL(cast(u8*)"glCompileShader".ptr); + glUseProgram = cast(typeof(glUseProgram))RGFW_getProcAddress_OpenGL(cast(u8*)"glUseProgram".ptr); + glValidateProgram = cast(typeof(glValidateProgram))RGFW_getProcAddress_OpenGL(cast(u8*)"glValidateProgram".ptr); + glBindBufferBase = cast(typeof(glBindBufferBase))RGFW_getProcAddress_OpenGL(cast(u8*)"glBindBufferBase".ptr); + glGetUniformBlockIndex = cast(typeof(glGetUniformBlockIndex))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetUniformBlockIndex".ptr); + glEnableVertexAttribArray = cast(typeof(glEnableVertexAttribArray))RGFW_getProcAddress_OpenGL(cast(u8*)"glEnableVertexAttribArray".ptr); + glDisableVertexAttribArray = cast(typeof(glDisableVertexAttribArray))RGFW_getProcAddress_OpenGL(cast(u8*)"glDisableVertexAttribArray".ptr); + glBlendFuncSeparate = cast(typeof(glBlendFuncSeparate))RGFW_getProcAddress_OpenGL(cast(u8*)"glBlendFuncSeparate".ptr); + glBindVertexArray = cast(typeof(glBindVertexArray))RGFW_getProcAddress_OpenGL(cast(u8*)"glBindVertexArray".ptr); + glBindBuffer = cast(typeof(glBindBuffer))RGFW_getProcAddress_OpenGL(cast(u8*)"glBindBuffer".ptr); + glBufferData = cast(typeof(glBufferData))RGFW_getProcAddress_OpenGL(cast(u8*)"glBufferData".ptr); + glBufferSubData = cast(typeof(glBufferSubData))RGFW_getProcAddress_OpenGL(cast(u8*)"glBufferSubData".ptr); + glVertexAttribDivisor = cast(typeof(glVertexAttribDivisor))RGFW_getProcAddress_OpenGL(cast(u8*)"glVertexAttribDivisor".ptr); + glVertexAttribPointer = cast(typeof(glVertexAttribPointer))RGFW_getProcAddress_OpenGL(cast(u8*)"glVertexAttribPointer".ptr); + glDrawArraysInstanced = cast(typeof(glDrawArraysInstanced))RGFW_getProcAddress_OpenGL(cast(u8*)"glDrawArraysInstanced".ptr); + glDrawElementsInstanced = cast(typeof(glDrawElementsInstanced))RGFW_getProcAddress_OpenGL(cast(u8*)"glDrawElementsInstanced".ptr); + glGetUniformLocation = cast(typeof(glGetUniformLocation))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetUniformLocation".ptr); + glUniform1f = cast(typeof(glUniform1f))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform1f".ptr); + glUniform2f = cast(typeof(glUniform2f))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform2f".ptr); + glUniform3f = cast(typeof(glUniform3f))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform3f".ptr); + glUniform4f = cast(typeof(glUniform4f))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform4f".ptr); + glUniform1i = cast(typeof(glUniform1i))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform1i".ptr); + glUniform2i = cast(typeof(glUniform2i))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform2i".ptr); + glUniform3i = cast(typeof(glUniform3i))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform3i".ptr); + glUniform4i = cast(typeof(glUniform4i))RGFW_getProcAddress_OpenGL(cast(u8*)"glUniform4i".ptr); + glCreateProgram = cast(typeof(glCreateProgram))RGFW_getProcAddress_OpenGL(cast(u8*)"glCreateProgram".ptr); + glCreateShader = cast(typeof(glCreateShader))RGFW_getProcAddress_OpenGL(cast(u8*)"glCreateShader".ptr); + glDeleteFramebuffers = cast(typeof(glDeleteFramebuffers))RGFW_getProcAddress_OpenGL(cast(u8*)"glDeleteFramebuffers".ptr); + glDeleteProgram = cast(typeof(glDeleteProgram))RGFW_getProcAddress_OpenGL(cast(u8*)"glDeleteProgram".ptr); + glDeleteShader = cast(typeof(glDeleteShader))RGFW_getProcAddress_OpenGL(cast(u8*)"glDeleteShader".ptr); + glShaderSource = cast(typeof(glShaderSource))RGFW_getProcAddress_OpenGL(cast(u8*)"glShaderSource".ptr); + glGetProgramiv = cast(typeof(glGetProgramiv))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetProgramiv".ptr); + glGetProgramInfoLog = cast(typeof(glGetProgramInfoLog))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetProgramInfoLog".ptr); + glGetShaderiv = cast(typeof(glGetShaderiv))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetShaderiv".ptr); + glGetShaderInfoLog = cast(typeof(glGetShaderInfoLog))RGFW_getProcAddress_OpenGL(cast(u8*)"glGetShaderInfoLog".ptr); + glAttachShader = cast(typeof(glAttachShader))RGFW_getProcAddress_OpenGL(cast(u8*)"glAttachShader".ptr); + glLinkProgram = cast(typeof(glLinkProgram))RGFW_getProcAddress_OpenGL(cast(u8*)"glLinkProgram".ptr); + + static if(!__traits(compiles, { glActiveTexture(0x84C0); })) + { + glActiveTexture = cast(typeof(glActiveTexture))RGFW_getProcAddress_OpenGL(cast(u8*)"glActiveTexture".ptr); + } + + return glDeleteRenderbuffers != null; +}