app/headless: prepare OpenGL context on macOS

The macOS backend uses a desktop OpenGL context, not a OpenGL ES
context. The main difference is that sRGB have to be enabled and
a vertex buffer must be bound.

Do that and fix Window.Screenshot for scenes more complex than a
glClear.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-12-03 23:53:56 +01:00
parent fddb0af6f6
commit d9212263aa
5 changed files with 23 additions and 5 deletions
+9 -1
View File
@@ -5,6 +5,7 @@
@import AppKit;
@import OpenGL;
@import OpenGL.GL;
@import OpenGL.GL3;
#include <CoreFoundation/CoreFoundation.h>
#include "headless_darwin.h"
@@ -40,6 +41,13 @@ void gio_headless_clearCurrentContext(CFTypeRef ctxRef) {
void gio_headless_makeCurrentContext(CFTypeRef ctxRef) {
NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
[ctx makeCurrentContext];
glEnable(GL_FRAMEBUFFER_SRGB);
CGLLockContext([ctx CGLContextObj]);
}
void gio_headless_prepareContext(CFTypeRef ctxRef) {
// Bind a default VBA to emulate OpenGL ES 2.
GLuint defVBA;
glGenVertexArrays(1, &defVBA);
glBindVertexArray(defVBA);
glEnable(GL_FRAMEBUFFER_SRGB);
}