Skip to content

Commit 2a913ca

Browse files
committed
qemu: enable support for CGL backend
Thanks to @startergo for the changes. This should enable OpenGL 4.1 on Linux Resolves #4285
1 parent 7995992 commit 2a913ca

File tree

6 files changed

+2745
-6
lines changed

6 files changed

+2745
-6
lines changed

Configuration/UTMQemuConfiguration+Arguments.swift

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ import Virtualization // for getting network interfaces
201201
} else {
202202
"streaming-video=filter"
203203
}
204-
"gl=\(isGLSupported && !isRemoteSpice ? "on" : "off")"
204+
"gl=\(glBackend)"
205205
f()
206206
f("-chardev")
207207
if isRemoteSpice {
@@ -281,7 +281,28 @@ import Virtualization // for getting network interfaces
281281
display.hardware.rawValue.contains("-gl-") || display.hardware.rawValue.hasSuffix("-gl")
282282
}
283283
}
284-
284+
285+
private var rendererBackend: UTMQEMURendererBackend {
286+
let rawValue = UserDefaults.standard.integer(forKey: "QEMURendererBackend")
287+
return UTMQEMURendererBackend(rawValue: rawValue) ?? .qemuRendererBackendDefault
288+
}
289+
290+
private var glBackend: String {
291+
if isGLSupported && !isRemoteSpice {
292+
#if os(macOS)
293+
if rendererBackend == .qemuRendererBackendCGL {
294+
return "core"
295+
} else {
296+
return "es"
297+
}
298+
#else
299+
return "on"
300+
#endif
301+
} else {
302+
return "off"
303+
}
304+
}
305+
285306
private var isSparc: Bool {
286307
system.architecture == .sparc || system.architecture == .sparc64
287308
}

Platform/macOS/SettingsView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ struct DisplaySettingsView: View {
232232
Text("Default").tag(UTMQEMURendererBackend.qemuRendererBackendDefault)
233233
Text("ANGLE (OpenGL)").tag(UTMQEMURendererBackend.qemuRendererBackendAngleGL)
234234
Text("ANGLE (Metal)").tag(UTMQEMURendererBackend.qemuRendererBackendAngleMetal)
235+
Text("Apple Core OpenGL").tag(UTMQEMURendererBackend.qemuRendererBackendCGL)
235236
}.help("By default, the best renderer for this device will be used. You can override this with to always use a specific renderer. This only applies to QEMU VMs with GPU accelerated graphics.")
236237
HStack {
237238
Stepper("FPS Limit", value: $qemuRendererFpsLimit, in: 0...240, step: 15)

Services/UTMQemuSystemBackends.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ typedef NS_ENUM(NSInteger, UTMQEMURendererBackend) {
2222
kQEMURendererBackendDefault = 0,
2323
kQEMURendererBackendAngleGL = 1,
2424
kQEMURendererBackendAngleMetal = 2,
25-
kQEMURendererBackendMax = 3,
25+
kQEMURendererBackendCGL = 3,
26+
kQEMURendererBackendMax = 4,
2627
};
2728

2829
/// Specify the sound backend for this VM

0 commit comments

Comments
 (0)