[swift-users] Here's a multi-platform OpenGL loader for Swift.

David Turnbull dturnbull at gmail.com
Sat Dec 12 15:39:15 CST 2015


It's looking like the Epoxy requirement for SwiftGL is going away real soon
now. I was able to lookup the OpenGL symbols from pure Swift code. No
compiled C code is needed at all. What follows is roughly how I will do it.
It lazily loads the pointer the first time you use it. The Linux version is
only slightly different.

Does anyone know a way to do this without the unsafeBitCast?

import Darwin


let handle = dlopen(
"/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL",
RTLD_LAZY)


func DLOADglGetIntegerv(a:GLenum, _ b:UnsafeMutablePointer<GLint>) -> Void {

    glGetIntegerv = unsafeBitCast(dlsym(handle, "glGetIntegerv"),
glGetIntegerv.dynamicType)

    glGetIntegerv(a,b)

}


public var glGetIntegerv:@convention(c) (GLenum, UnsafeMutablePointer<GLint>)
-> Void = { DLOADglGetIntegerv($0,$1) }


On Thu, Dec 10, 2015 at 9:22 PM, David Turnbull <dturnbull at gmail.com> wrote:

> If you tried using OpenGL with something other than Apple's framework then
> you probably didn't get very far. The header files of GLEW and Epoxy aren't
> fully understood by Swift. So I wrote some Swift code that generates some
> Swift code using the XML file from Khronos. Now everything you usually get
> from the headers is Swift code.
>
> https://github.com/AE9RB/SwiftGL
>
> The Demo folder contains an OpenGL equivalent of hello world. This is also
> a good example to look at if you want to learn more about C bindings.
>
> https://github.com/AE9RB/SwiftGL/tree/master/Demo
>
> -david
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20151212/d1c25416/attachment.html>


More information about the swift-users mailing list