Summary:
dlfcn.h is not available anymore on Windows, Evil provides all the
necessary declarations.
Reviewers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3577
@fix
Summary:
printf %m stringifies and prints errno. I've tried to remove its use
anywhere that the immediately preceding function might not set errno
or is a complicated function for which knowing errno doesn't really
give any useful information.
I've left a few of the drmMode calls because they're just wrappers
around ioctl, which legitimately sets errno.
@fix
Reviewers: zmike, devilhorns
Reviewed By: zmike, devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3572
When evas gl surface is destroyed, not only the current surface for the current context
should be set to NULL, but current surface for all contexts should be reset.
Commit fd4e133cc1 changed the internal
API, but it was not reflected in evas_gl_cocoa.
This commit fix a compiling warning and possible undetermined behaviour.
@fix
This is a follow up on the previous commits.
The original patch on Phab was split in 3 parts (factorization,
fix & this one).
Adds support to both SHM and EGL.
See D3501.
Summary:
Add TBM surface in wayland and clean up Native struct on Evas Engine.
Previous TBM surface for evas_object_image's native_surface_set is only in Evas X11 backend.
This patch has the code for wayland backend.
In addition, evas_native_tbm.c is moved to software_generic. Becuase this file is common.
And, Native in Evas_Engine is clean-up.
@feature
Test Plan:
TBM surface is tested with spacegrapher's test app(tbm.c) in Tizen Device.
Pixmap surface is tested in ubuntu with same test app.
EvasGL is tested with elementary_test.
Reviewers: jpeg, spacegrapher, raster, cedric
Subscribers: dkdk, scholb.kim, JoogabYun
Differential Revision: https://phab.enlightenment.org/D3501
This implements a generic way of scaling buffers, using fake
RGBA_Image wrapping ector buffer maps. The underlying algo is
still the good old linear sw scaler.
Now the filters *should* be back to their previous level of
usability. Performance will probably be even worse than it was
before, for GL, as more glReadPixels may be involved. Optimization
now consists in actually implementing the filters with GL shaders.
Now the filters should work with the GL engine, again, but with
a potentially crazy performance. Indeed, the input buffer is now
backed by an FBO, that needs to be glReadPixel'ed everytime it is
accessed by the filters (mapped).
Evas filters is now more and more unaware of evas images (RGBA_Image)
and the engine + ector take care of everything.
Still left to do:
- map / unmap an FBO buffer into RO or RW memory
Dumb implementation of a "smart" buffer capable of wrapping an
RGBA_Image but that can still be rendered on screen (ie, an
Evas_GL_Image is attached to it).
This fixes crashes, adds safety, and notes a couple of things that
are not yet implemented:
- Make an Evas_GL_Image from an RGBA_Image so we can draw it on the
canvas. This means Evas.Ector.GL.RGBA_Image.Buffer
- Readable Evas_GL_Image objects with gl_read_pixels
--> Implement proper map() & unmap() for GL buffers
This is a major refactoring of the evas filters submodule.
Use Ector.Buffer and the map/unmap methods instead of directly
accessing image buffers with RGBA_Image. RGBA_Image is still
used under the hood, for two reasons:
- Required for the final output (blend onto Evas itself)
- Required for the scaling routines
FIXME:
- Breaks proxy support (ie. all kind of texturing).
- This breaks filters support for the GL engine.
Since Evas still relies entirely on Image_Entry and Evas_GL_Image,
we will need an engine-specific wrapper object creating a Buffer
around an existing cached image.
Currently only SW support is implemented. GL will be more fun to
do (with glReadPixels and whatnot).
Shutdown eet only if it was actually initialized.
This fixes make check (for me) after applying the previous patch.
It seems on my machine, the gl cache files are not saved properly
from within the make check environment.
Summary:
Move common part to a separated document.
Make code more readable using smaller functions. (from Task T2713)
Everything is OK with make check.
Reviewers: cedric, raster, Hermet, stefan_schmidt
Reviewed By: stefan_schmidt
Subscribers: jpeg, artem.popov
Differential Revision: https://phab.enlightenment.org/D3430
Summary:
wl_surface.damage_buffer() takes surface damage in buffer co-ordinates.
Right now since we don't use wayland's scaling, transforms, or viewports
it's exactly the same as wl_surface.damage(). In the future if we start
using those features it's much easier to do so with damage_buffer().
Reviewers: zmike, devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3457
Summary:
Fix siquence in multiply of matrices. Need multiply position on scale,
otherwise we have wrong texture.
Reviewers: cedric, Hermet, raster
Subscribers: jpeg
Differential Revision: https://phab.enlightenment.org/D3477
Summary:
'cached' flag is not enough to check whethere data is loaded and texture is uploaded.
so check more options for prevent re-preload image data on gl-backend.
Test Plan: Local Test (elementary_test : elm images)
Reviewers: jpeg, eunue
Reviewed By: jpeg
Subscribers: cedric, jiin.moon, wonsik, spacegrapher
Differential Revision: https://phab.enlightenment.org/D3446
An ERR message would be printed out mentionning that direct rendering
won't work on this window, even if DR was not requested.
Also, set the DR-specific flags only if DR is enabled.
See T2936.
This reverts commit 01a32f64c0.
This broke make check with the following error:
evas_test_mesh.c:123:F:Meshes:evas_object_mesh_loader_saver:0: Failure 'res == 1' occurred
Reopen https://phab.enlightenment.org/D3420
Summary:
set current target with default value of GL_TEXTURE_2D.
target should be valid value.
Reviewers: jpeg
Reviewed By: jpeg
Subscribers: wonsik, cedric, spacegrapher
Differential Revision: https://phab.enlightenment.org/D3423
Summary:
Move common part to a separated document.
Make code more readable using smaller functions. (from Task T2713)
I did it again because somehow test is passing now. It seems like this test suite is unstable.
Please, let me know if there are any errors after running distcheck.
Reviewers: cedric, raster, Hermet, stefan_schmidt
Subscribers: jpeg, artem.popov
Differential Revision: https://phab.enlightenment.org/D3420
Summary:
The Function _evas_canvas3d_eet_file_free(void) is referenced in evas_model_load_file_eet()(file:evas_model_load_eet.c at line 122).
This call is under condition
if ((eet_file->mesh == NULL) || (eet_file->header == NULL)).
when either eet_file->mesh or eet_file->header are NULL, dereference of the corresponding pointer in function "_evas_canvas3d_eet_file_free()"
will generate Segmentation Fault.
@fix
Reviewers: raster, Hermet, tasn, wonsik, spacegrapher, cedric, jpeg
Subscribers: singh.amitesh, sachin.dev, alok25, yashu21985, mvsovani, cedric
Differential Revision: https://phab.enlightenment.org/D3369
Summary:
When preload is cancelled before finishing loading,
should reload the image data and update the texture during rendering object.
So, force texture to be updated on first drawing time.
(It should be guaranteed that preload image object is hidden before preload done.)
Test Plan: Local tests
Reviewers: jpeg
Reviewed By: jpeg
Subscribers: eunue, jiin.moon, wonsik, cedric, spacegrapher
Differential Revision: https://phab.enlightenment.org/D3416
This reverts commit 32c33ed64d.
This refactor broke the evas test cases for the model loaders and savers. I gave
it a week to get fixed but a first try did not succeed and its blocks a lot of
other automated testing. To be honest, it should have never gone it when it
breaks existing test cases. Once fixed this refactor can happily go in.
Fixes T2905
Summary:
As we do not set the ob->info->info.win variable anymore inside
Ecore_Evas (old code that was removed), we can omment out the line.
This line was causing unnecessary renewal of the engine window (thus
causing flickering when rotation was applied).
@fix
Test Plan: Rotate or Resize the window on wayland-egl.
Reviewers: gwanglim, devilhorns
Reviewed By: devilhorns
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D3407
As @zmike mentionned in T2396 there is an extension string
declaring full support for GLES 3 when using OpenGL.
Note: I can't really test myself since I have recent drivers.
Hopefully this is correct.
Fixes T2396
This fixes the build for Windows. Thanks @vtorri for the report.
I'm not using "unsigned int" as uint was mostly used like DATA32,
ie. color data (one pixel color or a pixel buffer).
The original plan was to have two different surfaces for GL and SW,
but this is probably not going to happen anytime soon. So, move
the implementation back to lib/ector. This avoid a file duplication.
Rename a few things:
- draw helper -> efl_draw
- Ector_Rop -> Efl.Gfx.Render_Op
- ECTOR_ bla bla -> DRAW_ bla bla (base pixel ops)
- ector_memfill -> draw_memset32 (and invert arg order to match memset)
The main rasterizer file is now draw.h in static_libs/draw
This is a non functional change, simple code refactor.
Ector Surface now inherits from Ector Buffer, and the current
two renderers (SW and Cairo SW) use Ector.Software.Buffer
implementations for pixel surfaces.
Basic pixel handling is merged and will allow easy extension
(color conversion, etc...).
Buffer classes are Mixins to be fully implemented by the final
class, such as: Ector.Software.Buffer, Ector.Software.Surface
or Ector.Cairo.Surface.
This is a large ugly commit. Sorry.
The code is quite a mess right now.
all we need to do for image transformation such as rotation or flipping in gl
is to map the vertices of source image to destination in a changed order.
this commit not only enhances readability but also fixes bugs in rotation.
@fix
Summary:
Add uniform varialble uColorTexture. Generate sampler count for textcolorpick
and pass to renderer for bind additional texture unit to gl.
It can be used for different 3D effects - blur, wave distortion, heat haze, etc.
T2761
Reviewers: Hermet, raster, cedric
Reviewed By: cedric
Differential Revision: https://phab.enlightenment.org/D3372
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
Move common part to a separated document.
Make code more readable using smaller functions. (from Task T2713)
Reviewers: cedric, raster, Hermet
Subscribers: artem.popov
Differential Revision: https://phab.enlightenment.org/D3373
We have to use void in a function declaration if we want no function
parameters. Using just empty parenthesis means the function takes an
unspecified number of parameters.
We had it correct for most declarations and this series fixes it for
the rest.
We have to use void in a function declaration if we want no function
parameters. Using just empty parenthesis means the function takes an
unspecified number of parameters.
We had it correct for most declarations and this series fixes it for
the rest.
Summary:
The OpenGL functions assigns a value to the local variable. However,
in case of error it would take the uninitialized garbage value. So, the
correct solution would be to initialize it to 0.
Signed-off-by: Deepjyoti Dutta <deepjyoti.d@samsung.com>
Reviewers: Hermet, singh.amitesh, raster, jpeg
Reviewed By: jpeg
Subscribers: yashu21985, mvsovani, alok25, sachin.dev, cedric
Differential Revision: https://phab.enlightenment.org/D3375
Summary:
I thought its better to fail and return null if realloc fails than to
continue. So returning by closing all openend file.
Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
Reviewers: cedric, illogict
Differential Revision: https://phab.enlightenment.org/D3232
Summary:
Use less memory by indexation vertices and not keeping more than one copy of it (from task T2713).
[Fix]
Reviewers: cedric, raster, Hermet
Subscribers: artem.popov
Differential Revision: https://phab.enlightenment.org/D3355
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This rely on a faster code path to upload dynamic texture. Once we get support
for gbm, we should see significant performance improvement in speed, but this
first step is already a 5 times improvement (Ok, we get from really bad, to not
really useful...).
When gl window is created, XCreateColormap is called in eng_best_visual_get
but when gl window is freed, Colormap is not freed.
See original patch: D3342.
If we end up leaving evas_xlib_image_dri_native_set due to a failure
to allocate memory, we should free the previously allocated
Evas_DRI_Image so that we don't leak
NB: Fixes Coverity CID1339782
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
evas_xlib_image_dri_native_set should be returning a pointer to an
RGBA_Image on success, or NULL on failure. Returning EINA_FALSE here
leads to an expression which evaluates to zero being treated as a null
pointer constant
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
clang warns of equality comparison with extraneous parentheses in
these cases. Remove the extra parens as they are not needed anyway
@fix
Signed-off-by: Chris Michael <cp.michael@samsung.com>
This is the kind of horrible things you'll encounter when working
with GL. The surface and context need to have matching configuration
otherwise make current will fail, and the only way to get a matching
config is to reuse the config selected to create the context. Gah.
This is the same fix as for EGL. More a hack than a fix, to be honest.
@fix
The version field was not properly set for GLES 1 and 3 (but not tested),
double free() could happen on the API structs, and empty API structs
could be returned.
egl images created using tbm surface for native surface set use
GL_TEXTURE_EXTERNAL_OES as texture target, so we should bind to
this target when rendering.
Dynamic hint set using tbm surface also creates egl images, but
as we only use RGB* colorspace for this we can use GL_TEXTURE_2D.
So, keep track of texture target in shader array, and bind to the
appropriate one.
This also fixes the bug that image_data_get only worked when BOTH
sec_image_map and sec_tbm_surface extensions are supported.
Summary:
Dynamic hint set using tbm surface can only be used when EGL_TIZEN_image_native_surface
extension is supported by the driver. So check for both tbm surface and egl extension.
Summary:
Evas GL maintains internal resource (XWindow, EGL Window Surface, EGL Context)
per thread to be used for make current when indirect rendering is used.
Currently this internal resource is created regardless of current rendering mode,
and always created when a new Evas GL thread is created by the application.
Internal resource created in a new thread is not freed until evas shuts down
in the main thread, so this causes memory/fd leak.
This can be fixed by creating internal resource only in necessary cases (ie. indirect rendering),
and adding tls resource destructor to be called when thread exits.
Summary:
if device support sec_tbm_surface, but doesn't support the EGL_NATIVE_SURFACE_TIZEN
then below api called cause crash!
evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
evas_object_image_alpha_set(o, 0);
1. evas_object_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
[evas_gl_image.c]
if (im->im)
{
if (evas_cache2_image_cached(&im->im->cache_entry))
evas_cache2_image_close(&im->im->cache_entry);
else
evas_cache_image_drop(&im->im->cache_entry);
im->im = NULL; // im->im now NULL!!!
}
im->tex = evas_gl_common_texture_dynamic_new(im->gc, im); // im->tex also NULL!!
im->text also NULL!! because If driver does not support the EGL_NATIVE_SURFACE_TIZEN
then below code return NULL at _pool_tex_dynamic_new();
pt->dyn.img = secsym_eglCreateImage(egldisplay,
EGL_NO_CONTEXT,
EGL_NATIVE_SURFACE_TIZEN,
pt->dyn.buffer, attr);
2. evas_object_image_alpha_set(o, 0);
[gl_generic/evas_engine.c]
static void * eng_image_alpha_set()
{
now im->im and im->tex are null so crash happend at eng_image_alpha_set()
}
bug fixed in case of the tbm surface create fails so device cannot support the dynamic hit set,
Test Plan: experdite
Reviewers: jpeg, cedric, spacegrapher
Subscribers: dkdk, scholb.kim, wonsik
Differential Revision: https://phab.enlightenment.org/D3318
Summary: add DRI2-x11 feature at image_native_set() on Software-x11
This is based on TBM, which means Tizen platform.
Reviewers: spacegrapher, wonsik, raster, jpeg
Subscribers: scholb.kim, dkdk, cedric
Differential Revision: https://phab.enlightenment.org/D3291
Summary:
In Evas-SW-Generic/X11, native_unbind_cb is not called sometimes, although
native_bind_cb was called.
Some native surface's cases, both native_bind_cb and native_unbind_cb should
be called for mapping and unmapping, eg. with tbm_surface.
@fix
Test Plan:
Evas Native Surface with pixmap sample.
Evas Native Surface with tbm(this sample can work in Tize Device)
elementary_test
Reviewers: raster, jpeg, cedric, spacegrapher
Subscribers: JoogabYun, scholb.kim, dkdk
Differential Revision: https://phab.enlightenment.org/D3317
Summary:
Add code for exception case for GL_OES_EGL_image/EGL_Image_KHR
These EvasGL's extension functions does not have the code for exception case.
e.g. EvasGLImage is NULL.
Test Plan: Native Pixmap surface's example is created and changed EvasGLImage's value(e.g. valid data or NULL)
Reviewers: raster, spacegrapher, jpeg
Subscribers: scholb.kim, JoogabYun, dkdk, cedric
Differential Revision: https://phab.enlightenment.org/D3284
Summary:
I found some bugs in EvasGL with OpenGL ES conformance test.
6 wrapper functions are added for GLES2,
(glDeleteFramebuffers, glFramebufferRenderbuffer
glFramebufferTexture2D, glGetError
glGetFloatv, glGetFramebufferAttachmentParameteriv)
3 wrapper fucntions are added for GLES3.
(glDrawbuffers, glGetStringi, glReadBuffer)
Test Plan:
GLES3 sample app,
EvasGL(OpenGL ES CTS) for 2.0 is passed.
For 3.0, 10 TCs are failed (Total : 2994TCs).
Reviewers: wonsik, spacegrapher, jpeg
Subscribers: cedric, JoogabYun, scholb.kim
Maniphest Tasks: T2621
Differential Revision: https://phab.enlightenment.org/D3301
Summary:
Refactoring code of functions e3d_drawable_scene_render,
e3d_drawable_scene_render_to_texture,_shadowmap_render to have possibility
render in scene to additional texture
See T2761
Reviewers: Hermet, cedric
Subscribers: cedric
Differential Revision: https://phab.enlightenment.org/D3142
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
Summary:
if eglGetError sequencially called, second eglGetError() doesn't give
the information of real Error.
Reviewers: jpeg, spacegrapher, cedric
Reviewed By: cedric
Subscribers: wonsik, scholb.kim, cedric, dkdk
Differential Revision: https://phab.enlightenment.org/D3305
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
- image_file_colorspace_get
This will be used to determine the best loading format, especially
targeted at edje_cc / edje_decc so we can avoid ETC re-encoding.
- image_data_has
Checks whether the image is currently loaded in (CPU) memory,
and also returns the current colorspace.
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%