added glad generator and a glad runtime
This commit is contained in:
parent
2017f6195e
commit
ac18a84a9c
62 changed files with 32373 additions and 10 deletions
90
tools/glad-0.1.14a0/glad/lang/d/loader/__init__.py
Normal file
90
tools/glad-0.1.14a0/glad/lang/d/loader/__init__.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
|
||||
LOAD_OPENGL_DLL = '''
|
||||
version(Windows) {
|
||||
private import core.sys.windows.windows;
|
||||
} else {
|
||||
private import core.sys.posix.dlfcn;
|
||||
}
|
||||
|
||||
version(Windows) {
|
||||
private __gshared HMODULE libGL;
|
||||
} else {
|
||||
private __gshared void* libGL;
|
||||
}
|
||||
extern(System) private @nogc alias gladGetProcAddressPtrType = void* function(const(char)*);
|
||||
private __gshared gladGetProcAddressPtrType gladGetProcAddressPtr;
|
||||
|
||||
%(pre)s
|
||||
bool %(init)s() @nogc {
|
||||
version(Windows) {
|
||||
libGL = LoadLibraryA("opengl32.dll");
|
||||
if(libGL !is null) {
|
||||
gladGetProcAddressPtr = cast(typeof(gladGetProcAddressPtr))GetProcAddress(
|
||||
libGL, "wglGetProcAddress");
|
||||
return gladGetProcAddressPtr !is null;
|
||||
}
|
||||
|
||||
return false;
|
||||
} else {
|
||||
version(OSX) {
|
||||
enum const(char)*[] NAMES = [
|
||||
"../Frameworks/OpenGL.framework/OpenGL",
|
||||
"/Library/Frameworks/OpenGL.framework/OpenGL",
|
||||
"/System/Library/Frameworks/OpenGL.framework/OpenGL",
|
||||
"/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
|
||||
];
|
||||
} else {
|
||||
enum const(char)*[] NAMES = ["libGL.so.1", "libGL.so"];
|
||||
}
|
||||
|
||||
foreach(name; NAMES) {
|
||||
libGL = dlopen(name, RTLD_NOW | RTLD_GLOBAL);
|
||||
if(libGL !is null) {
|
||||
version(OSX) {
|
||||
return true;
|
||||
} else {
|
||||
gladGetProcAddressPtr = cast(typeof(gladGetProcAddressPtr))dlsym(libGL,
|
||||
"glXGetProcAddressARB");
|
||||
return gladGetProcAddressPtr !is null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
%(pre)s
|
||||
void* %(proc)s(const(char)* namez) @nogc {
|
||||
if(libGL is null) return null;
|
||||
void* result;
|
||||
|
||||
if(gladGetProcAddressPtr !is null) {
|
||||
result = gladGetProcAddressPtr(namez);
|
||||
}
|
||||
if(result is null) {
|
||||
version(Windows) {
|
||||
result = GetProcAddress(libGL, namez);
|
||||
} else {
|
||||
result = dlsym(libGL, namez);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
%(pre)s
|
||||
void %(terminate)s() @nogc {
|
||||
version(Windows) {
|
||||
if(libGL !is null) {
|
||||
FreeLibrary(libGL);
|
||||
libGL = null;
|
||||
}
|
||||
} else {
|
||||
if(libGL !is null) {
|
||||
dlclose(libGL);
|
||||
libGL = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
'''
|
Loading…
Add table
Add a link
Reference in a new issue