There's actually an array of 2 in gl_x11, but it appears we only use the
first 1, except in an #if 0 block.
I gather this is legacy for some reason - it sure doesn't seem to make
any sense now, so I'm chopping off all the extra array indexes.
Note: I've not changed gl_sdl - it looks like it doesn't use the context
or surface at all and they could just be removed, but I don't build that
one here and don't want to touch it.
KHR partial damage must be set once at the beginning of rendering with
buffer damage for the entire scene to be rendered. Doing otherwise can
result in graphical anomalies on some GL implementations.
Some engines should using sending surface damage, until now we'd only ever
provided them with buffer damage.
The difference is that surface damage is the damage to the surface the
compositor is displaying, and the buffer damage is the damage to the
buffer the client has rendered. These are different when the client
is using multiple buffers of different ages to render into.
Anything that calls eglSwapBuffersWithDamage, wl_surface_damage() or
wl_surface_damage_buffer() should be using surface damage, and not
buffer damage.
This patch is intended to make no functional change - any flush cb that
used buffer damage before still should. Actual fixes to follow.
Apologies if I broke any engines - it's a bit of a copy and wasteland
out here.
This is reverts:
e4c641ed1e
build fix
19eb7b727fbf35620a13fb65b50d3056a484360e:
glx: Fix black windows in E on nvidia
For all extension functions, we need to match with the extension itself
since GetProcAddress() can return a non-NULL value even when the function
does not exist. Drivers can do a runtime mapping depending on the
context. So, we only trust the return value of GetProcAddress() when
we know for sure that the extension exists.
Thus, if a symbol exists we will always prefer it rather than relying
on GetProcAddress().
Also, glGetString(GL_EXTENSIONS) is now deprecated so we're lucky
it still works most of the time. glGetStringi() should be used
instead. This patch changes some of the use cases, but not all.
Fixes T3030 (again)
Fixes T4288
@fix
it serems some changes broke our buffer age querying - we were using
the wrong symbol... the EXT or ARGB onenot the core one which does
work. use that first. then we get buffer age.
@fix
This fixes calls to glXCreatePixmap that would consistently
fail on nvidia >= 360.
It seems glXCreatePixmapEXT was used instead of glXCreatePixmap,
and that function always returned 0.
One could assume always using the non-EXT version of the
function should be preferred. Unfortunately, doing so for all
the other functions brings back the black windows.
I'm taking a very careful approach by doing this only for drivers
>= 360.
Fixes T3030
@fix
This is an optimization for EGL only and for the main loop only.
eglGetCurrent{Display,Context,Surface} are expensive calls (they
shouldn't be, but they are). eglMakeCurrent is also very expensive,
so we want as much as possible to avoid calling those functions.
Store the pointers for the main loop as static variables.
Valgrind stats for a quick scrolling session in elm_test:
Before this patch:
- eglGetCurrentContext ~ 0.4%
- eglGetCurrentDisplay ~ 0.4%
After this patch:
- evas_eglGetCurrentContext ~ 0.02%
- evas_eglGetCurrentDisplay ~ 0.02%
There was a terribly complex mechanism to call this function
from the gl_x11 engine to gl_common (evas gl core)... and it
simply didn't work because the function pointer would be NULL.
Summary:
When Evas GL apis are called outside of on pixels callback,
evas gl backend context may have been made current, and Evas GL will
render into a wrong context.
So here we provide context restore mechanism of keeping track of
currently bound context and calling make current when needed.
@feature
Test Plan: Run Evas GL test cases
Reviewers: jpeg, cedric
Subscribers: mythri, mer.kim, wonsik, cedric
Differential Revision: https://phab.enlightenment.org/D2956
Summary:
If EGL_KHR_partial_update extension is implemented by the driver,
set the damage region. This is done before the draw calls.
@feature
Reviewers: wonsik, spacegrapher, jpeg
Reviewed By: spacegrapher
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D2828
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
There is a restriction for some gpu drivers that
eglGetProcAddress must be called after eglMakeCurrent.
So separate egl/glx extensions check from gl_symbols
to be called inside eng_window_new.
Test Plan: egl and glx backend tests
Reviewers: cedric, jpeg
Subscribers: cedric, mer.kim, wonsik
Differential Revision: https://phab.enlightenment.org/D2193
This reverts commit 0585540bb3.
This broke Evas 3d examples. I also suspected some weird things and
wasn't 100% confident with this patch.
Closes T2215.
Thanks for the report.
Summary:
When Evas GL runs with direct rendering, it can not set depth, stencil and msaa to Window surface.
This patch is possible to use "option" input paramater of ecore_evas_gl_x11_options_new.
So, new API is not needed.
The other patch is in elementary. The elementary patch will be used this patch.
Test Plan: Test elm gl veiw in elementary_test and JP's test app.
Reviewers: spacegrapher, cedric, raster, jpeg
Reviewed By: jpeg
Subscribers: cedric, mer.kim
Differential Revision: https://phab.enlightenment.org/D2144
Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
Note: jpeg changed the original patch a bit (fix style and depth value)
Automatically fallback to OpenGL ES 2.0 if OpenGL ES 3 is not supported.
This is a first step in trying to support GLES 3 for Evas GL.
This commit is also a wild test to see whether using GLES 3 contexts
by default will break anything. The theory says that GLES 3 is
backwards compatible with GLESv2.
So, if anything GL breaks for you... scream loudly!
But before reporting any bugs, please set the env variable:
- export EVAS_GL_DISABLE_GLES3=1
This does not add any requirement for GLESv3 support.
so this is a re-try at the evas gl destination alpha fix. this is what
cedric tried, but done RIGHT. it required adding an ecore_x call to
create a window with correct visual/colormap. it requires doing
visuals totally correctly all the way from ecore_evas to the evas
gl_x11 core. nvidia drivers are very picky about visuals. i also had
to vid the egl/gles code too to do the same thing. nvidia gles/egl
drivers are also picky, mesa is not. this all requires a lot of code
changes. it's far from trivial
this isn't backported for a few reasons:
1. verify this fix doesn't break for anyone.
i tested:
nvidia glx + egl/gles
intel glx + egl/gles
radeon glx
it needs wider testing. nouveau, fglrx for starters and maybe
some other gles/egl drivers.
2. have some review time
3. time to settle before blasting to stable branches
@fix
Note that we can't access gl_common directly as it is not possible to link it
2 times. I also didn't want to force evas to be linked with GL/EGL. So I rely
now on dlsym on about 20 symbols to get that backend going.
Enable 3D features using --enable-evas-3d=yes when configuring.
APIs are exposed through Evas_3D.h.
Currently, evas-3d is being supported only on gl_x11 engine.
Conflicts:
src/lib/evas/Evas_Eo.h
Being annoyed by different types of eina critical macros - CRI, CRIT,
CRITICAL -, I concluded to unify them to one. Discussed on IRC and
finally, CRI was chosen to meet the consistency with other macros -
ERR, WRN, INF, DBG - in terms of the number of characters.
If there is any missing bits, please let me know.
Evas_Common.h should be used for the public header, and rather rename
evas_common.h internal header to another name.
Sa:
Evas_Common_Header.h -> Evas_Common.h
evas_common.h -> evas_common_private.h
Shouldn't have both Evas_Common.h and evas_common.h because of case
insensitive filesystems.
config wasa being chosen as it was done by hand not accounting for
multisample buffers. now using glxchoosefbconfig instead and it works.
SVN revision: 79232
I've tested make -j 3 install and it works nicely
I've tested expedite with software and opengl xlib,
and it works. Not tested other engines, so please
report any problems (engines or other) on the ML.
TODO: examples and tests, I'll add them later
ISSUE: Eina_Unicode size check. It indirectly depends on
eina_config.h, which is created at the end of the
configure script. So its size is always 0. I don't
know how that size is used, so I can't do a lot,
for now.
SVN revision: 78895