Przeglądaj źródła

Add additional checks to GLSurface

Daniele Bartolini 12 lat temu
rodzic
commit
eff8b498c6
1 zmienionych plików z 48 dodań i 45 usunięć
  1. 48 45
      engine/renderers/gles/egl/GLContext.cpp

+ 48 - 45
engine/renderers/gles/egl/GLContext.cpp

@@ -39,35 +39,35 @@ extern ANativeWindow* g_android_window;
 //-----------------------------------------------------------------------------
 static const char* egl_error_to_string(EGLint error)
 {
-    switch (error)
-    {
-        case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED";
-        case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS";
-        case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC";
-        case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE";
-        case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT";
-        case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG";
-        case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE";
-        case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY";
-        case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE";
-        case EGL_BAD_MATCH: return "EGL_BAD_MATCH";
-        case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER";
-        case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP";
-        case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW";
-        case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST";
-        default: return "UNKNOWN_EGL_ERROR";
-    }
+	switch (error)
+	{
+		case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED";
+		case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS";
+		case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC";
+		case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE";
+		case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT";
+		case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG";
+		case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE";
+		case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY";
+		case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE";
+		case EGL_BAD_MATCH: return "EGL_BAD_MATCH";
+		case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER";
+		case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP";
+		case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW";
+		case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST";
+		default: return "UNKNOWN_EGL_ERROR";
+	}
 }
 
 //-----------------------------------------------------------------------------
 #if defined(CROWN_DEBUG) || defined(CROWN_DEVELOPMENT)
-    #define EGL_CHECK(function)\
-        function;\
-        do { EGLint error; CE_ASSERT((error = eglGetError()) == EGL_SUCCESS,\
-                "EGL error: %s", egl_error_to_string(error)); } while (0)
+	#define EGL_CHECK(function)\
+		function;\
+		do { EGLint error; CE_ASSERT((error = eglGetError()) == EGL_SUCCESS,\
+				"EGL error: %s", egl_error_to_string(error)); } while (0)
 #else
-    #define EGL_CHECK(function)\
-        function;
+	#define EGL_CHECK(function)\
+		function;
 #endif
 
 //-----------------------------------------------------------------------------
@@ -82,52 +82,55 @@ void GLContext::create_context()
 	// Screen format rgbx8888 with no alpha channel,
 	// maybe it is wrong but is for testing
 	EGLint attrib_list[]= { EGL_RED_SIZE,        8,
-                            EGL_GREEN_SIZE,      8,
-                            EGL_BLUE_SIZE,       8,
-                            EGL_DEPTH_SIZE,      24,
-                            EGL_SURFACE_TYPE,    EGL_WINDOW_BIT,
-                            EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
-                            EGL_NONE};
+							EGL_GREEN_SIZE,      8,
+							EGL_BLUE_SIZE,       8,
+							EGL_DEPTH_SIZE,      24,
+							EGL_SURFACE_TYPE,    EGL_WINDOW_BIT,
+							EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+							EGL_NONE};
 
-    EGLint attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
+	EGLint attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
 
-    display = EGL_CHECK(eglGetDisplay(EGL_DEFAULT_DISPLAY));
+	display = EGL_CHECK(eglGetDisplay(EGL_DEFAULT_DISPLAY));
 
-    EGL_CHECK(eglInitialize(display, NULL, NULL));
+	EGL_CHECK(eglInitialize(display, NULL, NULL));
 
-    EGL_CHECK(eglBindAPI(EGL_OPENGL_ES_API));
+	EGL_CHECK(eglBindAPI(EGL_OPENGL_ES_API));
 
-    EGL_CHECK(eglChooseConfig(display, attrib_list, &config, 1, &num_configs));
+	EGL_CHECK(eglChooseConfig(display, attrib_list, &config, 1, &num_configs));
 
-    EGLint format;
+	EGLint format;
 	EGL_CHECK(eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format));
 
 	ANativeWindow_setBuffersGeometry(g_android_window, 0, 0, format);
 
-    context = EGL_CHECK(eglCreateContext(display, config, EGL_NO_CONTEXT, attributes));
+	context = EGL_CHECK(eglCreateContext(display, config, EGL_NO_CONTEXT, attributes));
+	CE_ASSERT(context != EGL_NO_CONTEXT, "Oops, failed to create EGL context");
 
 	surface = EGL_CHECK(eglCreateWindowSurface(display, config, (EGLNativeWindowType)g_android_window, NULL));
+	CE_ASSERT(surface != EGL_NO_SURFACE, "Oops, failed to create EGL surface");
 
-    EGL_CHECK(eglMakeCurrent(display, surface, surface, context));
+	EGL_CHECK(eglMakeCurrent(display, surface, surface, context));
 
-    Log::i("EGL context created");
+	Log::i("EGL context created");
 }
 
 //-----------------------------------------------------------------------------
 void GLContext::destroy_context()
 {
-    EGL_CHECK(eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
- 	EGL_CHECK(eglDestroyContext(display, context));
- 	EGL_CHECK(eglDestroySurface(display, surface));
- 	EGL_CHECK(eglTerminate(display));
+	EGL_CHECK(eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
+	EGL_CHECK(eglDestroyContext(display, context));
+	EGL_CHECK(eglDestroySurface(display, surface));
+	EGL_CHECK(eglTerminate(display));
 
-    Log::i("EGL context destroyed");
+	Log::i("EGL context destroyed");
 }
 
 //-----------------------------------------------------------------------------
 void GLContext::swap_buffers()
 {
-   	EGL_CHECK(eglSwapBuffers(display, surface));
+	EGL_CHECK(eglMakeCurrent(display, surface, surface, context));
+	EGL_CHECK(eglSwapBuffers(display, surface));
 }
 
 }