From: "Sung W. Park" <sungwoo@gmail.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 18 Oct 2011 08:13:23 +0000 (08:13 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 18 Oct 2011 08:13:23 +0000 (08:13 +0000)
commitf7755bc2060f86e00dba6dbf96e8bf34f08d84cc
treef933666e971864a63a91291c00284dcc45c96563
parent3d2e2d7ff3199de1087216fd3bf1cf9f1db0e26a
From: "Sung W. Park" <sungwoo@gmail.com>
Subject: Re: [E-devel] [E-Devel][Review][Patch] Evas GL Extensions + a
bug fix

Here's an initial attempt at the GL extensions issue for Evas GL.

I have been in discussion with a few EFL developers regarding how we should
provide extensions.  Essentially, there are two ways to go about doing this.

1. provide evas_gl_proc_address_get() function as it is done in other
glue layers

2. provide all the extension functions in the EVAS_GL_API struct.

#1 approach is how it's done in other glue layers and the driver implementor can
provide new extensions easily.  It is however pretty annoying to get the
function prototypes right and use the function pointers and etc.

#2 approach provides all the extension functions in the struct so it's
definitely easier to use.  Adding new extensions can be a pain as people may
have to wait for new version releases.

For now, we thought it was OK to just throw them in the struct as in
#2 and try it out.  So, I've implemented this approach.  As for the extensions,
I've basically included all the extensions in gl2ext.h as EvasGL currently
provides all the GLES 2.0 functions.   In order to display the right
information, I had to override glGetString() with GL_EXTENSIONS as parameter to properly
display the supported extensions.

Also, I've added a few EGL extensions that have been
modified for EvasGL use.  For example, eglCreateImage/eglDestroyImage has been
defined as folllows.

   EvasGLImage  (*evasglCreateImage) (int target, void* buffer, int*
                                         attrib_list); void
                                            (*evasglDestroyImage)
(EvasGLImage image);

const char *evas_gl_string_query() function was added to return a string of
supported EvasGL extensions.  So essentially, a user can search this string to see
if the desired extension is supported.  if it is, he can use the functions.  He can
always check if the function pointers are NULL as well.

Take a look at the pach and let me know what you think.

______________

While I was adding the extension code, I've added a few fixes/ changes
to the EvasGL.

1. glDeletBuffers bug
- When I wad destroying evasgl context, I was deleting the context FBO with
glDeleteBuffers instead of glDeleteFramebuffers. This code in effect was
deleting BOs in other contexts and we had some funky behaviors as a
result.  The
bug has been fixed.

2. make_current
- I've made some changes to the make current code and also added a resource
context to the engine data.  the resource context is used for creating surface
texture/ fbos when surface/ context is created.  Before, i was using evas'
context but thought it'd be a good idea to use a separate context.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@64139 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33
src/lib/Evas_GL.h
src/lib/canvas/evas_gl.c
src/lib/include/evas_private.h
src/modules/engines/gl_x11/evas_engine.c
src/modules/engines/software_generic/evas_engine.c