__noinline void hal::ogl::Core::init_program_binary() { program_binary = false; { GetProgramBinary = NULL; ProgramBinary = NULL; ProgramParameteri = NULL; } if (__GLEW_ARB_get_program_binary) { program_binary = true; LOAD_FUNC1(GetProgramBinary); LOAD_FUNC1(ProgramBinary); LOAD_FUNC1(ProgramParameteri); } }
__noinline void hal::ogl::Core::init_shader_image_load_store() { shader_image_load_store = false; { BindImageTexture = NULL; MemoryBarrier = NULL; } if (__GLEW_ARB_shader_image_load_store) { shader_image_load_store = true; LOAD_FUNC1(BindImageTexture); LOAD_FUNC1(MemoryBarrier); } else if (__GLEW_EXT_shader_image_load_store) { shader_image_load_store = true; LOAD_FUNC2(BindImageTexture, glBindImageTextureEXT); LOAD_FUNC2(MemoryBarrier, glMemoryBarrierEXT); } }
void wgl_features() { #ifdef GLLOADER_WGL std::string exts_str; LOAD_FUNC1(wglGetExtensionsStringARB); if (wglGetExtensionsStringARB != NULL) { exts_str = wglGetExtensionsStringARB(::wglGetCurrentDC()); } else { LOAD_FUNC1(wglGetExtensionsStringEXT); if (wglGetExtensionsStringEXT != NULL) { exts_str = wglGetExtensionsStringEXT(); } } std::vector<std::string> wgl_exts = split(exts_str); wgl_exts.erase(std::remove(wgl_exts.begin(), wgl_exts.end(), ""), wgl_exts.end()); features_.insert(features_.end(), wgl_exts.begin(), wgl_exts.end()); #endif // GLLOADER_WGL }
void gl_features() { int major, minor; gl_version(major, minor); if (major > 0) { std::vector<std::string> gl_exts; if (major >= 3) { LOAD_FUNC1(glGetStringi); GLint num_exts; glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts); gl_exts.resize(num_exts); for (GLint i = 0; i < num_exts; ++ i) { gl_exts[i] = reinterpret_cast<char const *>(glGetStringi(GL_EXTENSIONS, i)); } } else { GLubyte const * str = glGetString(GL_EXTENSIONS); if (str != NULL) { gl_exts = split(reinterpret_cast<char const *>(str)); } } gl_exts.erase(std::remove(gl_exts.begin(), gl_exts.end(), ""), gl_exts.end()); #ifdef GLLOADER_GLES for (std::vector<std::string>::iterator iter = gl_exts.begin(); iter != gl_exts.end(); ++ iter) { if (0 == iter->find("GL_")) { *iter = "GLES_" + iter->substr(3); } } #endif features_.insert(features_.end(), gl_exts.begin(), gl_exts.end()); int const ver_code = major * 10 + minor; #ifndef GLLOADER_GLES if (ver_code >= 10) { features_.push_back("GL_VERSION_1_0"); } if (ver_code >= 11) { features_.push_back("GL_VERSION_1_1"); } if (ver_code >= 12) { features_.push_back("GL_VERSION_1_2"); } if (ver_code >= 13) { features_.push_back("GL_VERSION_1_3"); } if (ver_code >= 14) { features_.push_back("GL_VERSION_1_4"); } if (ver_code >= 15) { features_.push_back("GL_VERSION_1_5"); } if (ver_code >= 20) { features_.push_back("GL_VERSION_2_0"); } if (ver_code >= 21) { features_.push_back("GL_VERSION_2_1"); } if (ver_code >= 30) { features_.push_back("GL_VERSION_3_0"); } if (ver_code >= 31) { features_.push_back("GL_VERSION_3_1"); } if (ver_code >= 32) { features_.push_back("GL_VERSION_3_2"); } if (ver_code >= 33) { features_.push_back("GL_VERSION_3_3"); } if (ver_code >= 40) { features_.push_back("GL_VERSION_4_0"); } if (ver_code >= 41) { features_.push_back("GL_VERSION_4_1"); } if (ver_code >= 42) { features_.push_back("GL_VERSION_4_2"); } if (ver_code >= 43) { features_.push_back("GL_VERSION_4_3"); } if (ver_code >= 44) { features_.push_back("GL_VERSION_4_4"); } #else if (ver_code >= 10) { features_.push_back("GLES_VERSION_1_0"); } if (ver_code >= 11) { features_.push_back("GLES_VERSION_1_1"); } if (ver_code >= 20) { features_.push_back("GLES_VERSION_2_0"); } if (ver_code >= 30) { features_.push_back("GLES_VERSION_3_0"); } #endif } }
__noinline void hal::ogl::Core::init_framebuffer_object() { framebuffer_object = false; { IsRenderbuffer = NULL; BindRenderbuffer = NULL; DeleteRenderbuffers = NULL; GenRenderbuffers = NULL; RenderbufferStorage = NULL; RenderbufferStorageMultisample = NULL; GetRenderbufferParameteriv = NULL; IsFramebuffer = NULL; BindFramebuffer = NULL; DeleteFramebuffers = NULL; GenFramebuffers = NULL; CheckFramebufferStatus = NULL; FramebufferTexture1D = NULL; FramebufferTexture2D = NULL; FramebufferTexture3D = NULL; FramebufferTextureLayer = NULL; FramebufferRenderbuffer = NULL; GetFramebufferAttachmentParameteriv = NULL; BlitFramebuffer = NULL; GenerateMipmap = NULL; } if (__GLEW_ARB_framebuffer_object) { framebuffer_object = true; LOAD_FUNC1(IsRenderbuffer); LOAD_FUNC1(BindRenderbuffer); LOAD_FUNC1(DeleteRenderbuffers); LOAD_FUNC1(GenRenderbuffers); LOAD_FUNC1(RenderbufferStorage); LOAD_FUNC1(RenderbufferStorageMultisample); LOAD_FUNC1(GetRenderbufferParameteriv); LOAD_FUNC1(IsFramebuffer); LOAD_FUNC1(BindFramebuffer); LOAD_FUNC1(DeleteFramebuffers); LOAD_FUNC1(GenFramebuffers); LOAD_FUNC1(CheckFramebufferStatus); LOAD_FUNC1(FramebufferTexture1D); LOAD_FUNC1(FramebufferTexture2D); LOAD_FUNC1(FramebufferTexture3D); LOAD_FUNC1(FramebufferTextureLayer); LOAD_FUNC1(FramebufferRenderbuffer); LOAD_FUNC1(GetFramebufferAttachmentParameteriv); LOAD_FUNC1(BlitFramebuffer); LOAD_FUNC1(GenerateMipmap); } else { int extensions = 0; if (__GLEW_EXT_framebuffer_object) { extensions++; LOAD_FUNC2(IsRenderbuffer, glIsRenderbufferEXT); LOAD_FUNC2(BindRenderbuffer, glBindRenderbufferEXT); LOAD_FUNC2(DeleteRenderbuffers, glDeleteRenderbuffersEXT); LOAD_FUNC2(GenRenderbuffers, glGenRenderbuffersEXT); LOAD_FUNC2(RenderbufferStorage, glRenderbufferStorageEXT); LOAD_FUNC2(GetRenderbufferParameteriv, glGetRenderbufferParameterivEXT); LOAD_FUNC2(IsFramebuffer, glIsFramebufferEXT); LOAD_FUNC2(BindFramebuffer, glBindFramebufferEXT); LOAD_FUNC2(DeleteFramebuffers, glDeleteFramebuffersEXT); LOAD_FUNC2(GenFramebuffers, glGenFramebuffersEXT); LOAD_FUNC2(CheckFramebufferStatus, glCheckFramebufferStatusEXT); LOAD_FUNC2(FramebufferTexture1D, glFramebufferTexture1DEXT); LOAD_FUNC2(FramebufferTexture2D, glFramebufferTexture2DEXT); LOAD_FUNC2(FramebufferTexture3D, glFramebufferTexture3DEXT); LOAD_FUNC2(FramebufferRenderbuffer, glFramebufferRenderbufferEXT); LOAD_FUNC2(GetFramebufferAttachmentParameteriv, glGetFramebufferAttachmentParameterivEXT); LOAD_FUNC2(GenerateMipmap, glGenerateMipmapEXT); } if (__GLEW_EXT_framebuffer_multisample) { extensions++; LOAD_FUNC2(RenderbufferStorageMultisample, glRenderbufferStorageMultisampleEXT); } if (__GLEW_ARB_geometry_shader4) { extensions++; LOAD_FUNC2(FramebufferTextureLayer, glFramebufferTextureLayerARB); } else if (__GLEW_EXT_geometry_shader4) { extensions++; LOAD_FUNC2(FramebufferTextureLayer, glFramebufferTextureLayerEXT); } if (__GLEW_EXT_framebuffer_blit) { extensions++; LOAD_FUNC2(BlitFramebuffer, glBlitFramebufferEXT); } framebuffer_object = (extensions == 5); } }
__noinline void hal::ogl::Core::init_transform_feedback() { transform_feedback = false; { BindTransformFeedback = NULL; DeleteTransformFeedbacks = NULL; DrawTransformFeedback = NULL; GenTransformFeedbacks = NULL; IsTransformFeedback = NULL; PauseTransformFeedback = NULL; ResumeTransformFeedback = NULL; BeginQueryIndexed = NULL; DrawTransformFeedbackStream = NULL; EndQueryIndexed = NULL; GetQueryIndexediv = NULL; } if (__GLEW_ARB_transform_feedback2) { LOAD_FUNC1(BindTransformFeedback); LOAD_FUNC1(DeleteTransformFeedbacks); LOAD_FUNC1(DrawTransformFeedback); LOAD_FUNC1(GenTransformFeedbacks); LOAD_FUNC1(IsTransformFeedback); LOAD_FUNC1(PauseTransformFeedback); LOAD_FUNC1(ResumeTransformFeedback); if (__GLEW_ARB_transform_feedback3) { transform_feedback = true; LOAD_FUNC1(BeginQueryIndexed); LOAD_FUNC1(DrawTransformFeedbackStream); LOAD_FUNC1(EndQueryIndexed); LOAD_FUNC1(GetQueryIndexediv); } } }
__noinline void hal::ogl::Core::init_sampler_objects() { sampler_objects = false; { BindSampler = NULL; DeleteSamplers = NULL; GenSamplers = NULL; GetSamplerParameterIiv = NULL; GetSamplerParameterIuiv = NULL; GetSamplerParameterfv = NULL; GetSamplerParameteriv = NULL; IsSampler = NULL; SamplerParameterIiv = NULL; SamplerParameterIuiv = NULL; SamplerParameterf = NULL; SamplerParameterfv = NULL; SamplerParameteri = NULL; SamplerParameteriv = NULL; } if (__GLEW_ARB_sampler_objects) { sampler_objects = true; LOAD_FUNC1(BindSampler); LOAD_FUNC1(DeleteSamplers); LOAD_FUNC1(GenSamplers); LOAD_FUNC1(GetSamplerParameterIiv); LOAD_FUNC1(GetSamplerParameterIuiv); LOAD_FUNC1(GetSamplerParameterfv); LOAD_FUNC1(GetSamplerParameteriv); LOAD_FUNC1(IsSampler); LOAD_FUNC1(SamplerParameterIiv); LOAD_FUNC1(SamplerParameterIuiv); LOAD_FUNC1(SamplerParameterf); LOAD_FUNC1(SamplerParameterfv); LOAD_FUNC1(SamplerParameteri); LOAD_FUNC1(SamplerParameteriv); } }