diff options
author | David Robillard <d@drobilla.net> | 2019-02-17 21:09:23 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-02-17 21:43:06 +0100 |
commit | ee834a83860e614d565f5bb38cdfb8681ffa5f16 (patch) | |
tree | f8ef6ce44613f29e28b18698f9477d82e9af344c /pugl | |
parent | 982c89102967169854208608874659a03998dd7e (diff) | |
download | pugl-ee834a83860e614d565f5bb38cdfb8681ffa5f16.tar.gz pugl-ee834a83860e614d565f5bb38cdfb8681ffa5f16.tar.bz2 pugl-ee834a83860e614d565f5bb38cdfb8681ffa5f16.zip |
Add puglGetProcAddress for using OpenGL extensions
Diffstat (limited to 'pugl')
-rw-r--r-- | pugl/pugl.h | 11 | ||||
-rw-r--r-- | pugl/pugl_osx.m | 16 | ||||
-rw-r--r-- | pugl/pugl_win.cpp | 6 | ||||
-rw-r--r-- | pugl/pugl_x11_gl.c | 6 |
4 files changed, 39 insertions, 0 deletions
diff --git a/pugl/pugl.h b/pugl/pugl.h index b2937e2..9e70100 100644 --- a/pugl/pugl.h +++ b/pugl/pugl.h @@ -630,6 +630,17 @@ puglProcessEvents(PuglView* view); */ /** + OpenGL extension function. +*/ +typedef void (*PuglGlFunc)(); + +/** + Return the address of an OpenGL extension function. +*/ +PUGL_API PuglGlFunc +puglGetProcAddress(const char* name); + +/** Request a redisplay on the next call to puglProcessEvents(). */ PUGL_API void diff --git a/pugl/pugl_osx.m b/pugl/pugl_osx.m index 8e40907..e56a1a7 100644 --- a/pugl/pugl_osx.m +++ b/pugl/pugl_osx.m @@ -702,6 +702,22 @@ puglProcessEvents(PuglView* view) return PUGL_SUCCESS; } +PuglGlFunc +puglGetProcAddress(const char *name) +{ + CFBundleRef framework = + CFBundleGetBundleWithIdentifier(CFSTR("com.apple.opengl")); + + CFStringRef symbol = CFStringCreateWithCString( + kCFAllocatorDefault, name, kCFStringEncodingASCII); + + PuglGlFunc func = CFBundleGetFunctionPointerForName(framework, symbol); + + CFRelease(symbol); + + return func; +} + void puglPostRedisplay(PuglView* view) { diff --git a/pugl/pugl_win.cpp b/pugl/pugl_win.cpp index 2c092eb..048c0c3 100644 --- a/pugl/pugl_win.cpp +++ b/pugl/pugl_win.cpp @@ -631,6 +631,12 @@ wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } } +PuglGlFunc +puglGetProcAddress(const char* name) +{ + return (PuglGlFunc)wglGetProcAddress(name); +} + void puglPostRedisplay(PuglView* view) { diff --git a/pugl/pugl_x11_gl.c b/pugl/pugl_x11_gl.c index 6c007b1..f9e3ce2 100644 --- a/pugl/pugl_x11_gl.c +++ b/pugl/pugl_x11_gl.c @@ -186,6 +186,12 @@ puglX11GlGetHandle(PuglView* view) return NULL; } +PuglGlFunc +puglGetProcAddress(const char* name) +{ + return glXGetProcAddress((const GLubyte*)name); +} + PuglDrawContext puglGetX11GlDrawContext(void) { static const PuglDrawContext puglX11GlDrawContext = { |