Commit Graph

119 Commits

Author SHA1 Message Date
Jean-Philippe Andre be45a45a26 Evas GL common: Only push color VBO for map when required
Since the new shader selection system is able to check the
value of nomul, we can avoid pushing color when they are not
required (color is opaque white).

Hopefully this will fix Dave's crash (mayyyyybe...)
2015-04-13 11:40:04 +09:00
Jean-Philippe Andre 676c10b153 Evas GL common: Fix GL masking with 12,21,22 sampling
This is a new feature introduced by the shaders refactoring:
even masking shaders now support smooth sampling of the masked image
using the special 12,21,22 shaders.

Also, refactor the list of texture bindings so that it's
automatically generated by the script, as opposed to being a
manual list...
2015-04-03 15:45:07 +09:00
Jean-Philippe Andre 61ab78d3f1 Evas GL common: Fix shader sampling and check nomul
Now that the shader select function checks the values of "sam"
and "nomul", we can avoid sending the color to the shader when
it's a "nomul" shader. This will most likely give a performance
boost of roughly 0.00000001%.
2015-04-03 11:26:14 +09:00
Jean-Philippe Andre f8f1a3e9ed Evas GL common: Factorize GL shader selection code
Improve the shader selection function to handle all possible
cases. Only images really need special handling as they
support so many parameters.
2015-04-03 11:26:14 +09:00
Jean-Philippe Andre a3de2ee3fd Evas GL common: Factorize shader generation code
Remove all individual shaders, factorize everything into
one vertex and one fragment shader. All previous functionality
has been kept as is[*]. Some new features have been added
(new shader types).

This is a first step in simplifying and improving the shaders system.
Next: simplify shader selection

[*] Yeah, that's quite a bold statement here. Maybe I broke everything.
2015-04-03 11:26:13 +09:00
Jean-Philippe Andre 8586b75a2a Evas masking: Remove map_mask shaders
Those are now duplicates of IMG_MASK
2015-04-03 11:26:13 +09:00
Jean-Philippe Andre 2b1e221fd9 Evas GL common: whitespace fixes 2015-04-01 10:42:42 +09:00
Jean-Philippe Andre ed157ee67b Evas masking: Implement line masking in GL
This commit also introduces a few whitespace changes...
2015-04-01 10:39:36 +09:00
Jean-Philippe Andre 32009a0e8c Evas masking: Refactor GL code
Use the same method as for map masking:
- Pass absolute geometry of the mask to the push functions,
- Compute absolute position in the shader (like gl_Position)
  and apply scaling factor + offset to sample the mask.

Masking now uses a single vec4 attribute instead of hi-jacking
other vertices.

This way, all masking shaders share the same code and are way
simpler. On the other hand, the vertex shaders have a little bit
more work to do.
2015-04-01 09:53:55 +09:00
Dongyeon Kim d8fc60e0e6 Evas GL: Use EGL image to share between Evas GL and GL backend
Summary:
When the context version between Evas GL and GL backend differs,
we cannot share texture between them.
So, when the driver has support for KHR_gl_texture_2D_image extension,
use EGL image to share between Evas GL and GL backend

Test Plan: Local Evas GL tests for 1.1, 2.0 and 3.0

Reviewers: jpeg

Subscribers: mythri, mer.kim, wonsik, cedric

Differential Revision: https://phab.enlightenment.org/D2115
2015-03-16 15:56:49 +09:00
mythri.venugopal 4d1a45627f Evas GL: Add support for Evas GL 3.0
Summary:
This should enable applications to use GLES 3.0 through evas gl.
Todo: Fix indirect rendering issue occuring because texture objects
cannot be shared between different version of GLES contexts.
Todo: extension pointers need to be updated for GLES 3.0

Reviewers: wonsik, spacegrapher, jpeg

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2017

@feature
2015-03-16 15:56:43 +09:00
Jean-Philippe Andre 03ab2e27c8 Evas GL common: Create OpenGL ES 3.x contexts by default
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.
2015-03-05 20:59:53 +09:00
Jean-Philippe Andre b19d3599a5 Evas GL common: Force smooth scaling on miniature images
When evas GL uploads textures, it will first upload a 16x16 miniature
image, and then wait for some idle time in the main loop to upload the
high-res image.

Some images may not have smooth scaling enabled which results in the
miniature scaled with GL_NEAREST, showing big ugly squares. Let's
force smooth scaling instead, for a blur image rather than a
checkerboard.
2015-03-04 15:27:21 +09:00
Jean-Philippe Andre 21051d3252 Evas masking: Use mask_smooth to differentiate "shaders"
If mask_smooth changes, it should trigger a flush of
the pipeline (and call glDrawArrays).

This may or may not fix some potential bugs with masking.
2015-03-02 20:47:17 +09:00
Dongyeon Kim a32edfaf19 evas/gl: implement dynamic hint set using tbm surface
Summary:
Currently dynamic hint set is implemented using eglMapImageSEC extension,
which is no longer supported by any drivers (should be deprecated)
This patch implements dynamic hint set using Khronos extension EGL_TIZEN_image_native_surface.
Since tbm surface library is required for this, libtbm.so is queried at context new.

Test Plan: Local tests

Reviewers: raster, Hermet, cedric, jpeg

Subscribers: mer.kim, wonsik, cedric

Differential Revision: https://phab.enlightenment.org/D2027

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>

jpeg: I also fixed a few minor style issues and two warnings (bad function
names, glsym instead of secsym).
2015-03-02 15:55:47 +09:00
Jean-Philippe Andre ab89dc401c Evas masking: Check fill properties to consider image as filled
Edje may not set the filled flag on an image even if its fill
properties make it fill the whole object. For masking, it can
then be considered as a filled image.
2015-02-27 15:57:36 +09:00
Jean-Philippe Andre 87aed21c05 Evas masking: Remove commented-out code
I shouldn't have pushed this :)
2015-02-27 14:11:59 +09:00
Jean-Philippe Andre 0da6278af8 Evas masking: Fix masking of maps in GL
This completes the transition to auto-scaled mask images when
using the GL engine. Now the shaders do the work on-the-fly of
resizing the mask.
2015-02-27 13:06:09 +09:00
Jean-Philippe Andre fab0d7f9d3 Evas masking: Simplify previous commit
Call object's function to get the private engine_data (here, the
image object). Thanks Dongyeon for your patch which inspired me to
do that instead of forcing pre_render.
2015-02-27 13:06:09 +09:00
Jean-Philippe Andre fddaf62fcc Evas masking: Add fast path for image-only masks in GL.
This will currently optimize most of the masks when using the
GL engine[1].

This is a very special case that adds a highly optimized path
for masking in GL. It works by creating a virtual image, containing
a pointer to the original image and a new geometry[2].

Instead of creating a new FBO-based surface (image_map_surface),
we refer to the original image and adjust the mask geometry on
the fly.

KNOWN BUGS:
- masking a map with such a scaled image is now broken.

[1] Right now all masks are simple Evas Object Image, so that means
    all cases of masking, except masks of masks, or masks of maps,
    will be optimized with this new method.

[2] This virtual image mechanism is still quite hackish and may
    be improved (for memory usage, refcounting, etc...)
2015-02-27 13:06:09 +09:00
Jean-Philippe Andre 6b48c106d3 Revert "Evas GL: Add support for uniforms in the shaders"
This reverts commit 21d08f86e6.
2015-02-12 15:18:19 +09:00
Jean-Philippe Andre cfd337a758 Revert "Evas GL common: Use uniform instead of attribute for sample"
This reverts commit 986b60eaf0.
Added PUSH_SAMPLE for simplicity.

It was dumb of me to use uniforms, so I added a comment to prevent
other dumb people from making the same mistake later.
2015-02-12 15:01:39 +09:00
Jean-Philippe Andre 651f0ae241 Evas GL common: Improve code readability (simplify macro)
The exact same ugly macro would appear hundreds of times in the GL
code:
  GLERR(__FUNCTION__, __FILE__, __LINE__, "");

Instead, override the common GL functions iif GL_ERRORS is defined.
This greatly simplifies code and removes tons of useless lines.
Also, this will give better debugging output as the exact code line
is printed, and the function name is also printed.

Also, fix linking to the glerr function.

This is a code cleanup. Hopefully I didn't break anything with this
big operation of find & replace.
2015-02-12 11:23:03 +09:00
Jean-Philippe Andre 9eaadb2eb7 Evas GL common: Simplify GL pipe code with macros
A lot of the code was just brutal copy & paste.
Reduced by using simpler macros, which I believe are even
more readable.
2015-02-12 11:23:03 +09:00
Jean-Philippe Andre 7e26c30522 Evas GL common: Call glGetUniformLocation as early as possible
This should speed up setting uniforms in the shaders, by storing
their locations in the Evas_GL_Program description.

I kept the previous solution with name as fallback, but it won't
actually be used with the current shaders.
2015-02-12 11:23:03 +09:00
Jean-Philippe Andre 986b60eaf0 Evas GL common: Use uniform instead of attribute for sample
Image and texture programs "12", "21" and "22" used tex_sample
as a texture attribute passed to the vertex shader. Instead of
this seemingly hackish solution, use a vec2 uniform.
2015-02-12 11:23:03 +09:00
Jean-Philippe Andre b643dabc36 Evas masking: Force BLEND mode in case of image masking (GL)
This fixes some cases where the image has no alpha and COPY mode
is used, but a mask is also applied. In that case, masking
takes precedence and BLEND mode is used.

@fix
2015-02-10 18:18:05 +09:00
Dongyeon Kim 72f3e684d9 evas/gl_x11: introduce tbm native surface type
Summary:
This native surface type is based on the tbm surface used for the tizen platform.
EGL_TIZEN_image_native_surface EGL extension is used to map
tbm surface to an egl image
@feature

Reviewers: raster, cedric, jpeg

Subscribers: cedric, wonsik

Signed-off-by: Jean-Philippe Andre <jp.andre@samsung.com>
2015-02-10 14:48:22 +09:00
Jean-Philippe Andre 21d08f86e6 Evas GL: Add support for uniforms in the shaders
This will simplify greatly the code for map masking.
2015-02-10 12:00:37 +09:00
Carsten Haitzler e54af4291f evas - gl engine - pipe renderer - disabling of unused arrays for lines
@fix - this fixes disabling of unused texa and texsam arays when line
drawing - spotted in code review and bug hunting of another bug.
2015-02-10 02:30:10 +09:00
Carsten Haitzler 2ca0756ad6 evas - gl enigne - mask logic fix with texa draw arrays
this fixes a logic oops in addition of masking to evas which caused
crashes with a null texa array causing a crash in gldrawarrays
2015-02-10 02:30:10 +09:00
Jean-Philippe Andre 7d6bb7fe5a Evas masking: Fix GL masking with maps and stuff
This fixes an issue spotted after the previous fix.
Passing the Y-invert flag is necessary because in the usual
case a map is rendered with Y-invert (OpenGL coords vs. Evas coords)
but in case a map is rendered in an FBO (another map's surface)
then Y-invert must be unset.
2015-02-05 22:31:35 +09:00
Jean-Philippe Andre 323db06279 Evas GL common: Remove unused filter_prog 2015-01-14 16:37:11 +09:00
Jean-Philippe Andre 80fe4b1673 Evas GL common: Add shader ID as debug info in the pipe
Simplifies code readability a bit and helps for debugging (with GDB).
2015-01-14 16:37:06 +09:00
Jean-Philippe Andre 1874ea9890 Evas masking: Fix evas map masking in GL
While this may look like a feature, it's definitely a fix.
2015-01-14 16:35:20 +09:00
Jean-Philippe Andre bb923d5586 Evas masking: Minor fixes in GL masking 2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 44387b60a3 Evas masking: Add rectangle masking for GL 2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 61b847d47a Evas masking: Simplify and fix vertex logic in GL
There was some geometry problem, and this commit also
simplifies a lot of code by factorizing it a lot.
2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 2bd5cf6e6f Evas masking: Use new texm sampler instead of texa
texa should be used only for RGB+A whereas texm should
be used for masking. This should fix RGB+A masking, too.
2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 6552e8a6cc Evas masking: Add support for YUV, YUY2, NV12 masking in GL
RGB+A masking needs to be implemented, because there's a
clash (only one texture name "texa" is available).
2015-01-07 15:06:03 +09:00
Jean-Philippe Andre a2604956f9 Evas masking: Add support for BGRA/ARGB masking
Also, refactor font & image GL masking.
2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 1fac1dcf57 Evas masking: Font masking for GL 2015-01-07 15:06:03 +09:00
Jean-Philippe Andre 124ab102b7 Evas masking: Implement image masking for GL engines 2015-01-07 15:06:02 +09:00
Mun, Gwan-gyeong d1b8d52e0e evas/gl_drm: add native surface for wayland_egl_client.
Reviewers: zmike, devilhorns, cedric, gwanglim

Reviewed By: cedric, gwanglim

Subscribers: jpeg, torori, cedric

Differential Revision: https://phab.enlightenment.org/D1507
2014-12-04 17:59:30 +09:00
Jean-Philippe Andre f6e73c7903 Evas GL common: Cosmetic change
Don't cast "ext" a hundred times when you can do it once.
2014-11-24 18:52:14 +09:00
Jean-Philippe Andre 2e83b076db Evas GL common: Scan extension string for ETC1 subimage
There is an official name for it:
GL_EXT_compressed_ETC1_RGB8_sub_texture

Thanks Mythri for pushing that specification.
2014-11-24 18:52:14 +09:00
Jean-Philippe Andre 09934be788 Evas GL common: Fix RGB+A textures draw
Also rename texm into texa for consistency.
Even though texa might be a mask image, it's still used only
for it's a (alpha) channel.
2014-11-24 18:52:14 +09:00
ChunEon Park 3ffcdb67de evas/gl_common: remove dead code. 2014-10-31 19:19:15 +09:00
ChunEon Park 5718763ca3 evas/gl: code refactoring.
improve code readibility.
2014-10-19 15:39:51 +09:00
Chris Michael 6480b8b75d evas-gl-common: Fix compile for EGL due to missing GL_LINE_SMOOTH
Summary:
When compiling for EGL, GL_LINE_SMOOTH ends up not being defined so
compile breaks. This fix just checks if GL_LINE_SMOOTH is missing and
if so it defines it.

@fix

Signed-off-by: Chris Michael <cp.michael@samsung.com>
2014-10-08 09:04:21 -04:00