We believe these errors happen when the window
manager has told surface flinger to close the
native window.
If this error happens while we are creating the
EGL surface we exit the render loop (and
therefore exit the render thread.)
If the error happens while swapping the surface
we ignore it.
In either situation, we expect that the
application is about to be shut down by the
window manager, so it should not be necessary
to try and recover from the error.
glEGLImageTargetRenderbufferOES() pass the wrapped EGLImage
to the implementation, rather than the unwrapped one.
Change-Id: I149f9ed73e6ab9089110600e1db4311ba7a8c83a
with the GLThread.
We used to just set the mPaused state and return,
now we wait until the rendering thread signals
that it has noticed the change in pause state.
This makes Pause/Resume more consistent with
other UI-thread-to-GLThread event communication.
This change was made in the hope of fixing some
race conditions observed in monkey testing.
We now release the EGL context when pausing. This
is required to reduce the chance of running out of
contexts on devices which support a limited number
of active EGL contexts.
Someday we may implement a global EGL context
manager that will allow us to let EGL contexts
persist until another activity needs an EGL
context. But for now, without such a manager,
we take the conservative approach.
Separately, we now terminate EGL when
pausing on Sapphire. This is a requirement of the
Sapphire OpenGL driver.
Previously we imlpemented the standard semantics for
eglInitialize / eglTerminate, which are that
eglInitialize may be called any number of times,
but the first call to eglTerminate will terminate
the display.
Now we follow reference-countins semantics, which
means that eglTerminate will only terminate the
display when the reference count returns to zero.
This change allows EGL to be used by multiple
independently written modules in the same process.
(Otherwise there is no way for the independent
modules to coordinate their use of the display.)
We now distinguish EGL_CONTEXT_LOST errors from
other kinds of errors. We return "true" if
the swap completes successfully, "false" if
the swap fails due to EGL_CONTEXT_LOST, and
throw a RuntimeException if the swap fails due
to any other cause.
If eglSwapBuffers succeeds, we now avoid calling
eglGetError at all, which means we avoid clearing
any EGL errors that might already have been
pending before eglSwapBuffers is called.
This works around a bug in the
"Q3Dimension MSM7500" driver. That driver only
supports a single active EGLContext, so we must
release and restore the EGLContext when pausing
and unpausing.
Unfortunately the test for deciding whether to
release the context was inverted. We were
releasing the context on every device besides
the MSM7500 devices, which was a performance
drain, and we were not releasing the context on
the MSM7500, which meant the underlying driver
bug was not worked around.
Now we release the EGL context when pausing only
on the devices that have the bug.
A typo caused GL_AMBIENT_AND_DIFFUSE to only set the the ambient color.
Fix another typo which caused the viewer position to be wrong for
specular highlights.
Switch back to eye-space lighting, since there are still some issues
with some demos (San Angeles in particular).
The EGL context is now preserved when possible. Previously we would
destroy it whenever the EGL surface was destroyed. Preserving the
EGL context preserves loaded textures and VBO resources.
Duplicate ARCH_ARM_HAVE_TLS_REGISTER BoardConfig to proprocessor
HAVE_ARM_TLS_REGISTER define from Bionic's libc Android.mk to ensure that
OpenGL libraries (libEGL, libGLESv1_CM, libGLESv2, libGLES_android) use the
correct codepath in bionic_tls.h for accessing the TLS address
Merge commit '6d0f6c78037225ef5648d10e45a513a2e7c612b5' into eclair-plus-aosp
* commit '6d0f6c78037225ef5648d10e45a513a2e7c612b5':
DO NOT MERGE A library for encoding and decoding ETC1 textures.
The ETC1 compressed texture format is commonly
supported by OpenGL ES 2.0-capable devices.
This change adds a host-only version of the library. It is used by
the etc1tool.
The build system does not honor user tags on apps,
and setting it is misleading.
This removes the confusion by making the makefiles
behave like they read.
Change-Id: I7c5feba1c7d07f915b97dd098584f29938a4c885
Something happened to the line endings, adding
a blank line after most lines of text. I
repaired the damage, but in the process some
blank lines have been added / removed.
Merge commit 'e344955393133ac2f99f06cc6a4fe97fbf76f62e' into eclair-plus-aosp
* commit 'e344955393133ac2f99f06cc6a4fe97fbf76f62e':
Fix bug 2325244 screen turns black for a brief period of time
The problem was a black first frame when creating a surface, or a
garbage frame when the surface was resized.
The cause was lack of synchronization between the render thread and the
UI thread. The UI thread would typically return before the render thread
had a chance to draw its first frame.
The fix was to make the UI thread wait until at least one frame had been
rendered by the rendering thread.
The waiting is done in the surfaceChanged method because we know
that surfaceChanged will be called in both the surface created
and surface changed cases.
The problem was a black first frame when creating a surface, or a
garbage frame when the surface was resized.
The cause was lack of synchronization between the render thread and the
UI thread. The UI thread would typically return before the render thread
had a chance to draw its first frame.
The fix was to make the UI thread wait until at least one frame had been
rendered by the rendering thread.
The waiting is done in the surfaceChanged method because we know
that surfaceChanged will be called in both the surface created
and surface changed cases.
Merge commit 'aa396b9610f339cf280159144fbea47506f060e7' into eclair-mr2-plus-aosp
* commit 'aa396b9610f339cf280159144fbea47506f060e7':
Unhide the Android OpenGL ES 2.0 API
Merge commit '0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02' into eclair-mr2-plus-aosp
* commit '0dce2dd26699e4dbfba8b8c5ea01f7fd03369e02':
Extend GLSurfaceView to make it easy to create an OpenGL ES 2.0 context