Merge "Track started and initialized states separately"
diff --git a/android/opengles.c b/android/opengles.c
index f56252c..7405750 100644
--- a/android/opengles.c
+++ b/android/opengles.c
@@ -60,6 +60,7 @@
 #endif
 
 static ADynamicLibrary*  rendererLib;
+static int               rendererStarted;
 
 /* Define the function pointers */
 #define DYNLINK_FUNC(name) \
@@ -147,10 +148,16 @@
         return -1;
     }
 
+    if (rendererStarted) {
+        return 0;
+    }
+
     if (!initOpenGLRenderer(width, height, ANDROID_OPENGLES_BASE_PORT)) {
         D("Can't start OpenGLES renderer?");
         return -1;
     }
+
+    rendererStarted = 1;
     return 0;
 }
 
@@ -199,6 +206,15 @@
 {
     const char *vendorSrc, *rendererSrc, *versionSrc;
 
+    assert(vendorBufSize > 0 && rendererBufSize > 0 && versionBufSize > 0);
+    assert(vendor != NULL && renderer != NULL && version != NULL);
+
+    if (!rendererStarted) {
+        D("Can't get OpenGL ES hardware strings when renderer not started");
+        vendor[0] = renderer[0] = version = '\0';
+        return;
+    }
+
     getHardwareStrings(&vendorSrc, &rendererSrc, &versionSrc);
     if (!vendorSrc) vendorSrc = "";
     if (!rendererSrc) rendererSrc = "";
@@ -221,15 +237,16 @@
 void
 android_stopOpenglesRenderer(void)
 {
-    if (rendererLib) {
+    if (rendererStarted) {
         stopOpenGLRenderer();
+        rendererStarted = 0;
     }
 }
 
 int
 android_showOpenglesWindow(void* window, int x, int y, int width, int height, float rotation)
 {
-    if (rendererLib) {
+    if (rendererStarted) {
         int success = createOpenGLSubwindow((FBNativeWindowType)window, x, y, width, height, rotation);
         return success ? 0 : -1;
     } else {
@@ -240,7 +257,7 @@
 int
 android_hideOpenglesWindow(void)
 {
-    if (rendererLib) {
+    if (rendererStarted) {
         int success = destroyOpenGLSubwindow();
         return success ? 0 : -1;
     } else {
@@ -251,7 +268,7 @@
 void
 android_redrawOpenglesWindow(void)
 {
-    if (rendererLib) {
+    if (rendererStarted) {
         repaintOpenGLDisplay();
     }
 }