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();
}
}