added state tracking for uniforms in program objects
for each active uniform in index i we will save its starting location
,size and type, so when calling glGetUniform on its location,
we can tell how many bytes we should read from the stream according to
the uniform's type
add some type and size definitions to functions
that calculate size from enum
some other fixes to the codec
Change-Id: I4ecdf41e752454a908d131e76bab113a616f2bc8
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
when calculating the data size to pack, the type GL_HALF_FLOAT_OES,
wasn't recognized at all and therefore was by default 0, while it
should be 2 bytes.
Change-Id: Ib1f0dcdb837dd1b9cfebd1090cabfb59de472c53
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
Added the ability to provide external vertex and fragment shader
files to the test application triangleV2. That makes easy to test
various shaders we see failing in applications.
Change-Id: Ifaae8490ac76c022aa712ae516355658922b47bd
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
A bug in the ATI OpenGL driver causes glGet(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS)
to return 32, although the driver supports only 16. The minimum required
by the spec is 2, so limit the number to 16.
Change-Id: Ife99dc5544f80ad872362414e9a5d9d2722d8a42
All the X calls we do on linux are made from the FrameBuffer
object which is locked however OpenGL implementations may call
to Xlib during gl function calls. In order to be thread safe
we initialize Xlib to support multi-threading.
Change-Id: I3bc6a6378d7558fec44052bd67388beaf270c107
added NullAllowed flag to length parameter of glGetShaderSource
calling glGetShaderSource with NULL length caused length data
from the host get left on the stream and get the stream out of sync
Change-Id: I45e8e523a67698c9b0cd003e2af7e15c76ed22b7
eglGetProcAddress should return a function pointer that does not
depends on the current bounded context (if any), when the user
calls one of the function pointers returned from eglGetProcAddress
for one of the GLES extension functions, the GLESv1 or GLESv2
version of the extension function shold be called depending on
the current bounded context.
For this we have added a ClientAPI (GLES) extension dispatch
table in the EGL level which points to static functions in libEGL
where each function checks in runtime the current bound context and
calls down to the GLES_CM -or- GLESv2 library function.
See ClientAPIExts.cpp, when new GLES extension functions are added
to GLESv1 or GLESv2 its definition should be added to
ClientAPIExts.in as well.
This fixes the segfault in egl_image conformance test.
Change-Id: I8464d87c2fcbe57d67bd8b891b695a690dec89f3
Handle EGL context and surfaces destrouction using ref counting
pointer (SmartPtr) rather then maintaining a "markForDeletion" flag.
This has required to re-arrange the ThreadInfo structure to be local
to EGL rather then in the GLcommon area so that we will be able to
place a ref-counted pointer to the current context in the TLS.
That fixes the crash during exit of covgl conformance test.
Change-Id: I6f0a2e49c6f21eb75b654cab4346c764715c449b
The was a bug in the calculation of the pixels data size, caused by wrong usage
of pack/unpack alignment.
Pack should be used for glReadPixels, while unpack should be used for glTexImage and such.
Also fixes crash in "Angry Birds" & "Angry Birds Rio"
Change-Id: I099308a57a1ea907d38c59bad056429bc107de98
This is needed to support the rare, but still legal scenario,
when glDrawElemets is used with some index array data is stored in VBO's
while the actual attributes (vertices) data is in immediate mode.
When in immediate mode, we need to process the incodes, in order to know
which vertex data to send, which was impossible without the caching.
This commit introduces a new class GLSharedGroup, which will hold all data
that can be shared by shared contexts (buffers are such data).
This also makes the "Jet Cars Stunts" app work properly.
Change-Id: Ic937080dae461bc8cdf4d10cf37066a6e847f464
In case we're receiving packets larger then the initial size
of the read buffer, we dynamicaly grow (X2 steps) the size of
the buffer. An example for this large buffer is a 4MB texture
in JetCarStunts.
Change-Id: I167caddb731583811c009321d4f8fb2f7eea032c
On every swapBuffers, we make sure to decRef on the prev buffer,
and incRef on the current buffer. This fixes all the anoying
crashes on application exit, and also after the speech windows
on Replica Island
Change-Id: I1981fbf17a24ef6f60cdcf6d7ec3a5e7eef5377f
This change modifies the function declarations under
developement/tools/emulator/opengl/host/include/render_api.h
to make them callable from C.
This is preparation work for integrating the rendering library
into the emulator. The plan is to dlopen() the library dynamically
and using non-mangled function names makes using dlsym() both
easier and more portable.
Change-Id: I34656ea4618dbb989fb6ff78df43e9bfb38a7799
Adds GLSL built in constants defined in GLSL ES but not in GLSL.
Makes biConstant conformance test to pass on Mac (where ES2_compatability is not
present).
Also fixed the GLSL parser to insert our additions to the shader
only after the "#version" token if exist in the original shader.
Also renamed env var GOOGLE_GLES_FORCE_GLSL_VERSION to
GOOGLE_GLES_DEFAULT_GLSL_VERSION to better match its functionality since
we use it only if no specific version exist in the shader code.
Change-Id: If9485da16da2808245943a7295f8fb22a6f631aa
Both the ATI and nVidia OpenGL drivers return the wrong answer on
glGetIntegerv(GL_ALPHA_TEST_REF). So Implement this functionality
in our code.
Change-Id: I022b1475f7edb9f1d0f48ebcaf9f6e9f5c4f344e
enable workarounds by default
added environemnt variable GOOGLE_GLSL_FORCE_GLES_VERSION
to the shader parser
Change-Id: If1dbc10722436659295c40a40bd630a72e575799
nvidia may return GL_VALIDATE_STATUS = GL_TRUE even when the program does not link
this change checks for GL_LINK_STATUS when GL_VALIDATE_STATUS is queried
Change-Id: Ia9f5da9c71b8666ce929d8cc2a44639bc947eecb
This is not really a bug, but the nVidia shader compiler is much more
liberal than the GLSL spec, and allows compilation of shaders which
do not comply with the spec. This is an issue for passing the
conformance tests, but more importantly it will allow bad shader written
by the app developer to pass on the emulator and then to fail on the device.
Adding "#version 100" definition to the head of a shader source disables
this liberal behavior. For now this is activated in run time by the "NV_WAR"
environment variable.
Change-Id: I1c322d4221d313d3ee70592bc15ea0e340853990
When calling RenderbufferStorage with internalformat=GL_RGB565
we will create one with internal format GL_RGB
the same for glTexImage2D
Change-Id: I1e464dd36142f586beef6bf895456c7aab1b8237
support different binding to GL_TEXTURE_2D and GL_TEXTURE_CUBE_MAP
targets
create 2 default texture object, to be bound when BindTexture( ... ,0)
is called.
in order to do this, we must ensure their names are internal only, so the user can't
use these names by accident.
the object name manager local name is now 64 bit to allow generation of internal names
Change-Id: I29d000a67042051706e13dc3ef3aa34a1a24f8ca
Do not allow glLinkProgram to succeed if only one shader type has been
attached to the program, GL allows this, but GLES2 does not.
added state tracking for program objects to check which shaders are
attached to the program object.
add a way to define object data type being held for each object in objectNameManager
ProgramData and ShaderParser are both valid objectData for objects in SHADER namespace
we need a way to determine object type to generate correct errors
Change-Id: Ic232549df0bb6daf6ec528cb039482cd68e896bb
This fixes the Windows build of the opengl emulation code.
The official is not broken because you still need to define
BUILD_EMULATOR_OPENGL=true in your environment to enable the
code to be built.
Change-Id: I527f305c8a09df2740a93736123935d480170ffb
Instead of calling the dispatcher directly. This will make sure all Translator's
internals (such as TextureData data) are updated properly.
This also fixes the bug in "Replica Island" - when the green robot was invisible,
because it's TextureData wasn't updated by doCompressedTexImage2D
The pointer to glTexImage2D is passed as a parameter to doCompressedTexImage2D,
otherwise Windows resolve the glTexImage2D symbol in the external libGL rather
than the translator's code. Longer term, we will remove the translator's link
to libGL, at which point this parameter will be removed.
The getGlobalName function returns 0 on error. There are many places
were no error checking is done after calling it to get a shader or
program name. Typically this shouldn't be an issue, since the follwing
OpenGL call using a value of 0 will generated the required GL_INVALID_VALUE,
but this does not always happen.
Change-Id: I8edf2b152978ffd8626f8b4d778cc624f2a3bec3
This fixes a crash caused by covgl (on Nvidia linux driver) when our implementation
of glDrawTexOES calls glDrawArrays with GL_TEXTURE_COORD_ARRAY enabled - but none of texture
units are enabled and no data passed by glTexCoordPointer
Change-Id: Id28b0c35a5a17b139ab196db0e434d2f0a490132
The ARB_ES2_compatibility extension supports several GLES 2.0 enums
and functions on OpenGL 2.0. Seems it exists on nVidia drivers, but
not on ATI's. So implement its functionality in case it doesn't
exist on the host.
Change-Id: Id96f0c8036a7a7d36fca0c85ab5f57bf4b1583aa
in Windows platform we previously defined EGLNativeDisplaytype to be WinDisplay*
( this was defined in include/EGL/eglplatform.h) this was OK as long as we used the
the EGL_DEFAULT_DISPLAY as parameter for eglGetDisplay meaning we were generating
a native display by oureselv and wrapping it, but there was aproblem when we got the
EGLNativeDisplayType from the user (as HDC in Windows) but interpret it as WinDisplay*
this caused a big memory corupption.
so to overcome this problem we now define two types EGLNativeDisplayType to be
HDC and EGLNativeInternalDisplayTypeto be WinDisplay*, and when we get in eglGetDisplay
a parameter different from EGL_DEFAULT_DISPLAY we wrap it with the struct of WinDisplay
and return it to the user.
this change caused a change in all the declerations of EglOsApi.h changing
EGLNativeDisplayType -> EGLNativeInternalDisplayType
Change-Id: I3522c3d507b084c5c211e10ddb6f512d1b90c65e
This commit does few things:
1. Gets doCompressedTexImage2D out of the context and TextureUtils
2. Gets palette textures out of TextureUtils and into PaletteTexture
3. Makes TextureUtils generic for all compressed textures
4. Moves the glGet's dealing with compressed textures from GLEScontext to the impl.
Change-Id: Ibbde6968810a66a4f3488f3887ee3f015fc32c11