medfall

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

__init__.py (1540B)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

LOAD_OPENGL_DLL = '''
private global Library libGL;
extern(System) private alias gladGetProcAddressPtrType = void* function(const(char)*);
private global gladGetProcAddressPtrType gladGetProcAddressPtr;

%(pre)s
bool %(init)s() {
    version(Windows) {
        libGL = Library.load("opengl32.dll");
    } else version(OSX) {
        libGL = Library.loads([
            "../Frameworks/OpenGL.framework/OpenGL",
            "/Library/Frameworks/OpenGL.framework/OpenGL",
            "/System/Library/Frameworks/OpenGL.framework/OpenGL",
            "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"
        ]);
    } else {
        libGL = Library.loads(["libGL.so.1", "libGL.so"]);
    }

    if(libGL !is null) {
        version(Windows) {
            string sym = "wglGetProcAddress";
        } else {
            string sym = "glXGetProcAddressARB";
        }
        // returns null on OSX, but that's fine
        gladGetProcAddressPtr = cast(typeof(gladGetProcAddressPtr))libGL.symbol(sym);
        return true;
    }

    return false;
}

private struct StructToDg {
    void* instance;
    void* func;
}

%(pre)s
void* %(proc)s(string name) {
    if(libGL is null) return null;
    void* result;

    if(gladGetProcAddressPtr !is null) {
        // TODO: name.ptr
        result = gladGetProcAddressPtr(name.ptr);
    }
    if(result is null) {
        result = libGL.symbol(name);
    }

    return result;
}

%(pre)s
void %(terminate)s() {
    if(libGL !is null) {
        libGL.free();
    }
    return;
}
'''