Swiftpack.co - ThePotatoKing55/CGLFW3 as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ThePotatoKing55.
ThePotatoKing55/CGLFW3 3.4.0
Swift bindings for GLFW.
⭐️ 4
🕓 2 years ago
linux windows
.package(url: "https://github.com/ThePotatoKing55/CGLFW3.git", from: "3.4.0")

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
    }

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

GitHub

link
Stars: 4
Last commit: 2 years ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

3.4.0
2 years ago

Updated to GLFW 3.4

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics