Skip to content

incognitojam/CGLFW3

 
 

Repository files navigation

CGLFW3

Builds GLFW as a library to add to your Swift Package. As of writing, it's currently updated to the latest commit for GLFW 3.4.

This package can work on its own, but it was created as a base for SwiftGLFW.

Getting Started

SwiftPM doesn't support unsafe flags with semantic versioned packages, so add this to your dependecies in Package.swift:

.package(url: "https://github.com/thepotatoking55/CGLFW3.git", branch: "main")

From there, you can just import it with import CGLFW3 and use it like normal.

Cross-Platform Support

To expose platform-native functions such as glfwGetCocoaWindow, add the following C settings to your target:

.target(
    name: "ExampleTarget",
    dependencies: ["CGLFW3"],
    cSettings: [
        .define("GLFW_EXPOSE_NATIVE_WIN32", .when(platforms: [.windows])),
        .define("GLFW_EXPOSE_NATIVE_WGL", .when(platforms: [.windows])),
        .define("GLFW_EXPOSE_NATIVE_COCOA", .when(platforms: [.macOS])),
        .define("GLFW_EXPOSE_NATIVE_NSGL", .when(platforms: [.macOS])),
        .define("GLFW_EXPOSE_NATIVE_X11", .when(platforms: [.linux]))
    ]
)

I don't have a computer running Linux and Windows support for SwiftPM is rudimentary, so this will probably still take some work to get ported to non-Mac platforms.

Hello World

A Swift translation of the "hello world" program in GLFW's documentation:

import CGLFW3

func main() {
    glfwInit()
    
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4)
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1)
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE)
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE)
    
    guard let window = glfwCreateWindow(800, 600, "Hello World", nil, nil) else {
        let error = glfwGetError(nil)
        print(error)
        return
    }

    glfwMakeContextCurrent(window)
    while glfwWindowShouldClose(window) == GLFW_FALSE {
        glfwSwapBuffers(window)
        glfwPollEvents()
    }
    
    glfwTerminate()
}

About

Swift bindings for GLFW.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 99.7%
  • C 0.3%