MBuhot の優れた回答に続き、いくつかの Linux システムで Swift OpenGL の「hello world」を実行するためにこれを行いました。もう少し詳細を追加できます。
私の場合、OpenGL と GLUT 関数の両方が必要だったので、最初に COpenGL システム モジュールを作成しました。このモジュールのソースは GitHub にありますが、基本的には空の Package.swift と次の module.modulemap の 2 つのファイルを含むディレクトリです:
module COpenGL [system] {
header "/usr/include/GL/gl.h"
link "GL"
export *
}
Mesa のヘッダーとライブラリを一致させるために必要だった、ヘッダーとリンク オプションの大文字の GL に注意してください。
GLUT 関数については、次の module.modulemap を使用して同様の CFreeGLUT モジュールを作成しました (これも GitHub にあります)。
module CFreeGLUT [system] {
header "/usr/include/GL/freeglut.h"
link "glut"
export *
}
アプリケーションで Swift Package Manager を使用する場合は、メイン ディレクトリに Package.swift を次のように作成する必要があります。
import PackageDescription
let package = Package(
dependencies: [
.package(url: "https://github.com/BradLarson/COpenGL.git", from: "1.0.0"),
.package(url: "https://github.com/BradLarson/CFreeGLUT.git", from: "1.0.0")
]
)
上記は、私の GitHub バージョンのシステム モジュールから取得したものですが、必要に応じてパスを編集してローカル コピーを指すようにすることもできます。
Red Book の「hello world」アプリケーションをベースとして使用しました。これを Swift に変換すると次のようになります。
import COpenGL
import CFreeGLUT
func renderFunction() {
glClearColor(0.0, 0.0, 0.0, 0.0)
glClear(UInt32(GL_COLOR_BUFFER_BIT))
glColor3f(1.0, 0.0, 0.0)
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0)
glBegin(UInt32(GL_POLYGON))
glVertex2f(-0.5, -0.5)
glVertex2f(-0.5, 0.5)
glVertex2f(0.5, 0.5)
glVertex2f(0.5, -0.5)
glEnd()
glFlush()
}
var localArgc = CommandLine.argc
glutInit(&localArgc, CommandLine.unsafeArgv)
glutInitDisplayMode(UInt32(GLUT_SINGLE))
glutInitWindowSize(500,500)
glutInitWindowPosition(100,100)
glutCreateWindow("OpenGL - First window demo")
glutDisplayFunc(renderFunction)
glutMainLoop()
それを main.swift
に入れます Sources サブディレクトリ内のファイル。 swift build
を実行 Swift Package Manager が起動し、システム モジュールをダウンロードし、アプリケーションをビルドして、モジュールをリンクします。
Swift Package Manager を使用したくない場合でも、これらのシステム モジュールをコマンド ラインから手動で使用できます。これを行うには、それらをローカル ディレクトリにダウンロードし、コンパイル時に明示的に参照します。
swiftc -I ./COpenGL -I ./CFreeGLUT main.swift
モジュール マップが読み込まれ、Linux 上の Swift アプリケーション内から OpenGL と GLUT 関数にアクセスできるようになります。
システム モジュールを使用して OpenGL ヘッダー ファイルをインポートします:https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md
次のようなディレクトリ レイアウトがあるとします:
COpenGL/
Package.swift
module.modulemap
.git/
YourApp/
Package.swift
main.swift
.git/
COpenGL/module.modulemap ファイルは次のようになります:
module COpenGL [system] {
header "/usr/include/gl/gl.h"
link "gl"
export *
}
これは、バージョン タグを使用して別の git リポジトリに作成する必要があります:
touch Package.swift
git init
git add .
git commit -m "Initial Commit"
git tag 1.0.0
次に、YourApp/Package.swift ファイルで依存関係として宣言します
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "../COpenGL", majorVersion: 1)
]
)
次に、main.swift ファイルにインポートできます:
import COpenGL
// use opengl calls here...