This adds an initLibrary() function to libOpenglRender.
It will be used by the emulator to fallback on software rendering
if the library cannot be initialized properly, e.g. if it is not
possible to load the host EGL/GLES libraries.
Change-Id: I41e8ad73a315166e4a15cbee1db72c2552370f46
This patch changes the filter used to scale the GL window
in the rendering library. Instead of nearest-neighbour, use
bi-linear, which will provide for much more pleasant results
when scaling the emulator UI window, or toggling to full-screen
mode.
Change-Id: If2d9e1300fa4878c25e1221eaedb565b9150431a
This patch modifies GLDispatch.cpp in the translator libraries
to open the Darwin GL library as a framework. Using a hard-coded
system path prevents the requirement to modify LD_LIBRARY_PATH
or DYLD_LIBRARY_PATH to point to the directory that contains the
library.
In this specific case, this is equivalent to
/System/Frameworks/OpenGL.framework/Libraries/libGL.dylib
But is the "kosher" way to open it the library.
Change-Id: Iccd6568d36fc97200617c268f05d7b4ea85f918e
You can still re-enable them by uncommenting one line in
development/tools/emulator/opengl/Android.mk
Change-Id: Ie0a640b6f3359b437aba40b124da0892defb00ef
These libraries are only used by libOpenglRender, so make them
static so that their code is included in this shared library
instead. This reduces the shared library dependencies that
will be required from the emulator.
Change-Id: I24438932f0d6b40852b515140ea6950c04124fdd
add drawValidate when calling glCheckFramebufferStatus
in the draw validate, a color attachement will be added to the
framebuffer if there is no target attached to COLOR_ATTACHMENT
of the framebuffer.
opengl does not allow framebuffer with no color attachement
so CheckFramebufferStatus would return INCOMPLETE status.
We already call drawValidate before any draw, the call was
missing at glCheckFramebufferStatus.
Change-Id: I94b930024c3076ac5fe0f8662d11884729c4f953
There is a flashing effect we see on Mac when switching between
drawables (pbuffer and a window) on the same context.
This change make the FrameBuffer object in the renderer to use
two different OpenGL contexts, one which is used while the pbuffer
drawable is bound and another which is used when the subwindow is
bounded during swap. The two contexts share textures so both contexts
have access to all allocated color buffers.
While this fixes the flashing effect on Mac, it should be more effective on
other platforms as well.
Change-Id: I63b49f0cdae8e2785765503750bbf5fbd4d963a1
Wrong share group was set up when two user contexts are sharing !
That means that shared context was not really worked before, now it does.
Change-Id: Ia4edbba0441e309902b2c48c44865342410bae3d
This change removes the 'blitFromPbuffer' path in the renderer
which uses binding pbuffer to texture. This path does not work
on all platforms and is not relavent any more. It simplifies
a lot the FBConfig filtering code.
Also, added a check to fail the renderer initialization if
the translator plugin does not support EGL_KHR_gl_texture_2d_image
and GL_OES_EGL_IMAGE (by both GLES implementations [1 and 2])
since our implementation requires it.
Change-Id: Ifd4c66943a8da56308cfb7e38914c962b4f5befe
That replaces the readback to host we do at the end of each frame
with two blits on the GPU, one to copy the pixels into a texture
and another to render the texture to another in order to flip
the image.
Change-Id: I7e0e10493d38944d0b613e245023f34236d3dfc4
This is a workaround to a driver bug on Intel/Linux, when destroying
a subwindow do not close the X display connection, keep it for the
next call to createSubWindow. It happens that the intel/linux driver
caches the display connection for each window ID and use it during
swap or something similar. Using the same display connection for
all subwindows workaround the problem.
Also added a wait loop to wait until the window becomes mapped
instead of just calling XSync after calling XMapWindow. This
is more accurate and make sure we do not miss the first window
refresh.
Change-Id: I63c69d736df433666a8c79d71127afe72776e89f
on eglCreateContext the translator created a window for the
specified config with a matching pixelformat and saved it's
device context for future use.
however when the thread exited the window was destroyed by windows
and the handle saved became invalid.
the next call to wglCreateContext with the handle saved failed.
fixed the problem by creating windows per thread and not in a
global pool.
each thread will create its own window for each config when asked
the window will be destroyed when the thread exits.
Change-Id: I63668a20e8c30c42c4cfcaca664938683600b28e
Changes the render_api to support re-creating the display
sub-window and the ability to rotate the displayed framebuffer
image.
That currently works only when the renderer runs as a thread
and not as seperate process. Therefore we setup the library
to run the renderer as thread(s) inside the calling process
on *all* platforms for now.
Change-Id: Ifd009db903759042a7edcf89866d3c3fe076cae9
On Mac it happens that when a context is bound to a pbuffer
and you want to bind it to a window (NSView) instead you must
release it from the pbuffer before binding the window by calling
clearDrawable handle of NSOpenGLContext.
This change added an override of NSOpenGLContext in order to track
to which drawable type the context was previously bound and
call clearDrawable when necessary.
Change-Id: Iece5ab16a46aa0d107ccb773986a6b280d09d181
Workaround to intel/linux driver issue.
Desktop OpenGL does not support precision qulifiers in shaders,
so we remove them by defining "precision" "mediump" "lowp" and
"highp" to blank.
That translates the line "precision mediump float;" to "float;" which
is a valid command according to the GLSL spec however it fails
to compile using the intel/linux driver.
This change adds a parser which removes completely the
precision command from the shader source.
Change-Id: I29a16bb78ac0000d624aa2f83e93ef5c6ad60345
on some platforms info log length of programs and shaders was
not returned correctly, we now cache the info log for these objects
and calculate info log length intenrally to be both correct and
compliant to the spec and conformance tests.
Change-Id: I017932482ba36f9e2e1858fe372683f7ac3a98ca
In GLES, a vertex shader attribute can be at location 0 and have
a current value. In OpenGL, the spec is not clear, resulting in
absurdities like the ATI driver binding an attribute to location
0, does not give an erro when you set it, but gives an error when
you try to get it back. And it doesn't actually set the value in
the shader.
So, in this patch we:
1. Track attribute 0 value internally, setting and getting it
as necessary.
2. Upon glDrawArrays and glDrawElements, if attribute 0 is not
"array enabled" (that is, it should use a current value) we
create a dummy array, fill it with the intended current value,
and attach and enable it. After the draw, we disable it.
Change-Id: I35f3e8a924e6fba236f4f4d85423b04ae448dad4
adding more params validations to some GL functions
which the OpenGL layer below us should check , but using Intel
Graphic driver those checks are ignored
Change-Id: I3ca2a891f1d9f988a7b662d6bc32b81e12cc333d
fixin a bug when we declared that our implementation supports
OES_standard_derivatives without checking that the
openGL layer below supports this extention
Change-Id: Ic74f18eb753f0cfe067e23c3bf83905e40b17665
fix glGetAttachedShaders
NULL is allowed in count parameter
fix problem with nvidia driver which returned invalid count
Change-Id: Icfaa5688b04325de2890486eb87b163babaddf30
needed changes to support glEGLImageTargetRenderbufferStorageOES,
added implementation in egl and added tokens to renderControl.
Also fixed function pointers returned by eglGetProcAddress to
return functions that works independant of the current context,
see system/egl/ClientAPIExts.cpp
That makes the egl_image conformance test to pass on the guest.
Change-Id: I580cda82ba0fb44f12b75aa0bbacf5cd9f15f744
some applications and conformance tests expects to have
non-zero bit counts for all red,green and blue channels.
The translator expose all EGL compliant configs, including
monochrome and RG configs.
We now filter those out and expose to the guest only the RGB
configs.
Change-Id: I9a293675359135a548ce1c089f31a48ea2b7f46e
The GLES and OpenGL specs for glFramebufferTexture2D are different, which
caused valid GLES calls to fail when moved over to OpenGL. Specifically,
a framebuffer in OpenGL must have a color attachment in order to be valid
for draw, while in GLES it doesn't. So add a validate function, and call
it from each drawing API call.
This patch also contains a workaround for a bug in the ATI driver, where
changing the framebuffer attachments requires a rebind of the framebuffer.
Change-Id: I011fbe0e2b1c66564322268868a24a9d5958a434
to overcome a bug in intel driver which returnes incorrect precision
and range for integers. query the driver for precision format only
for floats. for integers, we return values defined in gles spec.
Change-Id: Idfec2826d811220873c18f301cf4268fc54dabee
fix the default values of vertex attrib array to match gles spec
size should be initialized to 4, and type should be initialized to GL_FLOAT
Change-Id: If23b3aec574ca660181be2ef1c91de1de2b07a70
genName in the globalNameSpace now calls the glGen* function of opengl
to generate a global name instead of inventing one.
this is to overcome a bug in intel driver which raises glError when
binding a framebuffer/renderbuffer with a name that was not generated
by opengl.
Change-Id: Ia0c2fefbf3538c185c380ba62d74eb94f2b28254
resize the internal pbuffer we use for a WindowSurface
when a color buffer of different size is attached to the "window".
That fixes "Glyder 2 by glu" application view while loading.
Change-Id: I8f235f428e93077d57bd200f10b45b9a92f1a9d3
When an intersection is found, we want to add it to the output list, if splitting is needed and if not.
Change-Id: I9c9827b1c0ecd434925ff5698dd42bc1025dbedf
Make the event pump loop in the renderer process we do on Windows
exit when the Framebuffer's subwindow is destroyed.
Fixed TcpStream to close the socket using 'closesocket' on windows,
otherwise the other end of the socket does not sense that the socket
is closed.
+ Use WS_DISABLED to ensure that our GL subwindow doesn't receive
any input events.
Change-Id: Icb477b3e1d7993a8880acb5e01bc5da29309ae50
Removed calling into opengl/wgl from the initialiation code
of libEGL (was made during creation for the EglGlobalInfo object
during global variable initialization) !
That causes issues on ATI driver on windows since we might call into
the driver before it gets initialized. Instead we initialie the EglGlobalInfo
during the first call into libEGL.
Also ATI's version of wglChoosePixelFormatARB does not accept
NULL in the attribute list arguments.
Change-Id: I508263dc0440561ee1cd1311ed5ce37cee4d407e
On Linux/Intel, some configurations are returned which make no sense.
Also, no use for single buffer config, and we don't support pixmap
visuals.
Change-Id: I11f37c8ba612ee10dd654141e6f167add1675dce
There was very few compilation warning on Windows and Linux.
This change just fixes those warnings.
Change-Id: I0428aa3dd33b2add40aa6cd12da76910950533b8
Handling clean exit of the renderer when stopOpenGLRenderer
is called. This is done by openning a connection to the renderer
and flag that it should exit. Added 'clientFlags' field which must
be send after every connection is made to the renderer for this purpose.
The server will wait for running rendering threads to exit and then will
close all EGL/GL resources and will exit. The stopOpenGLRenderer will
return only when the renderer has exited.
Change-Id: I8272b8ea59d5fc78453bb7bd2d25908068869fa7
GLSL ES 1.0.17 spec states that its written against
OpenGL GLSL version 1.2, that means that #version 100
in GLSL ES should be mapped to #version 120 in OpenGL
GLSL.
We now force "$version 120" in all shaders except if
higher version has been requested in the shader source
or when GOOGLE_GLES_FORCE_GLSL_VERSION is defines.
(Note that GOOGLE_GLES_DEFAULT_GLSL_VERSION is renamed
to GOOGLE_GLES_FORCE_GLSL_VERSION).
That fixes "Aqua Slash GL Demo" application !!
Change-Id: I0f61ba3aa1c5591df3dacd3afd7f216dba13b56e
fix glFinishRoundTrip
the function was not implemented on the host side,
calling glFinish caused segfault
Change-Id: Ic3a726d22a499f6560d905d177dcb7f997397628
That adds support to create a renderbuffer storage from an EGL
image (previously only texture was supported).
For that we have added Renderbuffer and Framebuffer attachment points
state tracking and when a renderbuffer which attached to an EGLImage
get attached to a framebuffer we attach the underlying EGLImage's
texture instead.
Also fixed some egl_image related bugs.
That makes the egl_image conformance test to pass on host.
Change-Id: I4e8c4935e45b27214038ecf1c1187ed96c5cea5b
We save the texData->target in original format, but use our internal format
(using GLTextureTargetToLocal) to make sure we're not mixing 2D and CUBE_MAP textures on
glBindTexture.
Also added the GL_S/R/T/Q constants where needed.
This fixes the Cube Map test in Api Demos.
Change-Id: Id5de45581f2227fe0978d7982a147cb6b4b595c4
It used to be a GL_NV_packed_depth_stencil string extension, but
now it's GL_EXT_packed_depth_stencil and implemented by everyone. on
nVidia drivers both are exported.
Change-Id: I1b4af8a776f9957838d466b24fe73fa873ea85e4
texture=0 has a special meaning - detach texture. Therefore we should pass
it on as 0 rather than look for the global name in the name space.
Change-Id: If7d0174a7fd07fc13a75430312b605497653f01b