We weren't rendering any background which meant that surfaces that were fully transparent would just show garbage that was underneath. Lets make sure that the widget has a painted background instead of garbage underneath.
Because there is no guarantee that the display mode is available.
Like we do for D3D10+.
It doesn't work, per #181 (comment)
Issue: TraceLoader::callContains() had the comment FIXME: do string comparison directly on trace::Call The existing code was doing a new/delete of an ApiTraceCall object in order to use its interface for a string search. Resolution: Assuming what was meant by a direct comparison is using C's strstr/strcasestr functions, that is what's implemented in this patch. An alternative would be to use a QString object's API return (QString(call->name()).contains(str, sensitivity)); but no testing was done with that. Testing: This code is only hit when searching in unloaded frames. Frame 0 is pre-loaded so this code isn't exercised until the string is searched in another frame. Testing was done with case-sensitive and case-insensitive searches. Compared against existing previous code for same results. Timing: Did two searches each of old and new code using "gettimeofday" timing in TraceLoader::search with the following results searching for a nonsense string (to search entire trace), case-insensitive: warzone2100 180MB (180664407) old new ------ ------- Total time in seconds: 89.047 16.3269 88.9844 16.3358 Signed-off-by: Lawrence L Love <firstname.lastname@example.org>
Both Mesa's and NVIDIA's libGL generate an X protocol error in glXSwapBuffers() if the window has never been bound with glXMakeCurrent(). That causes glretrace to exit. The X protocol error can't be trapped with XSetErrorHandler() for some reason. So, keep track of whether a window has ever been bound and skip glXSwapBuffers if the window has never been bound. This allows some WGL-based apitraces to be replayed on Linux/GLX. Reviewed-by: Jose Fonseca <email@example.com>
Quake3 puts some vertices in its array buffer that it never renders. This happens for clouds rendering as well as flares. (In other words, it creates a vertex buffer with V vertices, and an index buffer that reference indices substantially lower than V, max(I) < V). It uses compiled vertex arrays, and will LockArrays(V) - more elements than it actually references. This is legal because Quake3's arrays have a static size, much bigger than however many vertices it puts in there, so the driver can safely read the whole locked area even though half of it is never referenced. With Apitrace, however, the situation changes a bit, because Apitrace's calculation for the length of a user pointer is based on max(draw element indices). Below is an example of Quake3's sky rendering: 3466977 glLockArraysEXT(first = 0, count = 110) 3466978 glEnableClientState(array = GL_TEXTURE_COORD_ARRAY) 3466979 glEnableClientState(array = GL_COLOR_ARRAY) 3466980 glEnableClientState(array = GL_COLOR_ARRAY) 3466981 glBindTexture(target = GL_TEXTURE_2D, texture = 1132) 3466982 glTexCoordPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(440)) 3466983 glClientActiveTexture(texture = GL_TEXTURE1) 3466984 glTexCoordPointer(size = 2, type = GL_FLOAT, stride = 0, pointer = blob(440)) 3466985 glClientActiveTexture(texture = GL_TEXTURE0) 3466986 glColorPointer(size = 4, type = GL_UNSIGNED_BYTE, stride = 0, pointer = blob(220)) 3466987 glVertexPointer(size = 3, type = GL_FLOAT, stride = 16, pointer = blob(876)) 3466988 glDrawElements(mode = GL_TRIANGLES, count = 192, type = GL_UNSIGNED_INT, indices = blob(768)) The glDrawElements only references indices from 0 to 54. Under Apitrace, the trace only copies the 55 vertices, instead of the 110 locked values. When replaying, the driver, which may want to read the whole locked area, will read past the 55 vertices. This doesn't always crash because we're lucky, but on the NVIDIA driver this crashes fairly reliably. According to the compiled array spec, the driver is allowed to read all of the locked memory. The fix is to change the array tracing so that its count is based on max(drawelements_count, locked_count). Thanks to Arthur Huillet for diagnosing the problem, the above description, suggesting the fix, and testing it. Tested-by: Arthur Huillet <firstname.lastname@example.org>
Simplifies/condenses code somewhat.
And not just those we explicitly request to be core context. Fixes issue #236.
See issue #232.
Not really tested though, as I don't have an EGL_KHR_create_context implementation readily available.
As suggested by Alexander Monakov, given it is no longer necessary with Android 4.0 onwards. Also remove all isTracingEnabled logic with it, simplifying code substantially, and addressing issue #171.
So that applications with apitrace built-in with WRITE_EXTERNAL_STORAGE permission can write traces on non-rooted devices too. See issue #149.
It should be string.h. This fixes warnings about undeclared memcpy when building for Android.
v2: Add comment (Jose Fonseca)
GL_TEXTURE_CUBE_MAP_SEAMLESS is now also per texture.
Feed from gl.xml as opposed from deprecated .spec files.
No other change.
Traces won't be replayable, but this will at least prevent the apitrace: warning: unknown function "glVDPAU*" warnings.
`configs` is an output parameter.