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.
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.
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.
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()
}