Mercurial > hg > forks > gldragon
changeset 52:6343c3392a95
After looking at many incorrect examples, the correct method for GL
extension probing is now implemented.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 06 Dec 2019 19:09:47 +0200 |
parents | 9c6654647608 |
children | d871e4b24328 |
files | gldragon.cpp |
diffstat | 1 files changed, 35 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/gldragon.cpp Fri Dec 06 01:30:51 2019 +0200 +++ b/gldragon.cpp Fri Dec 06 19:09:47 2019 +0200 @@ -47,39 +47,41 @@ #undef DM_GLEXT_INIT -void * dmGLExtTry(const std::string &name) +bool dmGLCheckExtension(const std::string &name) { - bool res = SDL_GL_ExtensionSupported(name.c_str()); + bool res = SDL_GL_ExtensionSupported("GL_ARB_shader_objects"); + dmMsg(" - Have '%s'? %s\n", + name.c_str(), + res ? "YES" : "no"); + return res; +} + + +void * dmGLGetProcAddr(const std::string &name) +{ void *ptr = SDL_GL_GetProcAddress(name.c_str()); - dmMsg(" - Checking '%s' : %s : %p\n", + dmMsg(" - Have '%s'? %s\n", name.c_str(), - res ? "YES" : "no", - ptr); + ptr != NULL ? "YES" : "no"); - res = true; + return ptr; +} - if (res && ptr != NULL) - return ptr; - else - return NULL; -} void * dmGLExtInit(const std::string &name, bool &status) { void *ptr; + bool ok = + (ptr = dmGLGetProcAddr(name)) != NULL || + (ptr = dmGLGetProcAddr(name + "EXT")) != NULL || + (ptr = dmGLGetProcAddr(name + "ARB")) != NULL; - if ((ptr = dmGLExtTry(name)) != NULL) - return ptr; - else - if ((ptr = dmGLExtTry(name + "EXT")) != NULL) - return ptr; - else - if ((ptr = dmGLExtTry(name + "ARB")) != NULL) - return ptr; - status = false; - return NULL; + if (!ok) + status = false; + + return ptr; } #endif @@ -90,6 +92,18 @@ return true; #else bool status = true; + + dmMsg("Checking for required OpenGL extensions ..\n"); + + if (!dmGLCheckExtension("GL_ARB_shader_objects") || + !dmGLCheckExtension("GL_ARB_shading_language_100") || + !dmGLCheckExtension("GL_ARB_vertex_shader") || + !dmGLCheckExtension("GL_ARB_fragment_shader")) + { + dmError("Required OpenGL extensions not supported.\n"); + return false; + } + #define DM_GLEXT_INIT(extproctype, extprocname) \ extprocname = (extproctype) dmGLExtInit(#extprocname, status); #include "dmglexts.h"