From 05ba515c73491ebc9660e34bbb69bfed49ad10a5 Mon Sep 17 00:00:00 2001
From: Brad Davis <bdavis@saintandreas.org>
Date: Wed, 6 Mar 2019 13:13:45 -0800
Subject: [PATCH] Support KHR_no_error in the VR context

---
 libraries/oculusMobile/src/ovr/GLContext.cpp | 11 +++++------
 libraries/oculusMobile/src/ovr/GLContext.h   |  2 +-
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/libraries/oculusMobile/src/ovr/GLContext.cpp b/libraries/oculusMobile/src/ovr/GLContext.cpp
index 449ba67084..8d81df42e5 100644
--- a/libraries/oculusMobile/src/ovr/GLContext.cpp
+++ b/libraries/oculusMobile/src/ovr/GLContext.cpp
@@ -13,10 +13,7 @@
 #include <mutex>
 
 #include <android/log.h>
-
-#if !defined(EGL_OPENGL_ES3_BIT_KHR)
-#define EGL_OPENGL_ES3_BIT_KHR 0x0040
-#endif
+#include <EGL/eglext.h>
 
 using namespace ovr;
 
@@ -129,7 +126,7 @@ void GLContext::doneCurrent() {
     eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
 }
 
-bool GLContext::create(EGLDisplay display, EGLContext shareContext) {
+bool GLContext::create(EGLDisplay display, EGLContext shareContext, bool noError) {
     this->display = display;
 
     auto config = findConfig(display);
@@ -139,7 +136,9 @@ bool GLContext::create(EGLDisplay display, EGLContext shareContext) {
         return false;
     }
 
-    EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE };
+    EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3,
+                                noError ? EGL_CONTEXT_OPENGL_NO_ERROR_KHR : EGL_NONE, EGL_TRUE,
+                                EGL_NONE };
 
     context = eglCreateContext(display, config, shareContext, contextAttribs);
     if (context == EGL_NO_CONTEXT) {
diff --git a/libraries/oculusMobile/src/ovr/GLContext.h b/libraries/oculusMobile/src/ovr/GLContext.h
index 04f96e8d47..5ccbf20c42 100644
--- a/libraries/oculusMobile/src/ovr/GLContext.h
+++ b/libraries/oculusMobile/src/ovr/GLContext.h
@@ -25,7 +25,7 @@ struct GLContext {
     static EGLConfig findConfig(EGLDisplay display);
     bool makeCurrent();
     void doneCurrent();
-    bool create(EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY), EGLContext shareContext = EGL_NO_CONTEXT);
+    bool create(EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY), EGLContext shareContext = EGL_NO_CONTEXT, bool noError = false);
     void destroy();
     operator bool() const { return context != EGL_NO_CONTEXT; }
     static void initModule();