Commit Graph

28 Commits

Author SHA1 Message Date
Carsten Haitzler dbc5afdee2 sorry sungwoo - going to have to back this dlopen/dlsym styuff out.
intel drivers don;'t like it for some odd reason - i'm trying to track
it down but i can't sanely try middlegrounds right now (eg dont
dlopen/dlsym but actually directly assign symbols etc.), so back out
and let's figure this out before it goes back in :(



SVN revision: 66308
2011-12-18 05:03:24 +00:00
Carsten Haitzler 5967841988 I'm attaching a patch for the initial version of the GL Fastpath
addition to evas gl backend.

Working on different mobile devices, we've noticed that the cost of context
switch (MakeCurrent) in GL can be very expensive depending on the driver
implementation.  To minimize the poorly written driver's context switch
overhead, I've implemented a state tracking layer on top of the driver
implemented GL.

Essentially, this layer wraps all the GL/Glue(GLX/EGL) APIs and manages its own
state changes.  Internally, only one real GL context is created and logical
contexts are created every time a user requests context creation.  The logical
contexts keep track of its states and sets only the necessary states
(the ones that are different than the current ones)
when there is a MakeCurrent request.  The real MakeCurrent gets called when
there is a Surface/Window change request.

The GL library is dlopened and all the APIs are dlsym'ed and wrapped
accordingly.  All the GL functions are in evas_gl_core.{h,c}.

Here's a very simply flow of the code.
   - all the APIs are exported as function pointers (*glsym_glBegin),
     (*glsm_eglCreatContext), and etc.
   - all the native GL/Glue(GLX/EGL) APIs are dlsym'ed as _sym_glBegin,
     _sym_eglCreateContext, and etc.
   - all the fastpath APIs are implmemnted as fpgl_glBegin,
     fpgl_eglCreateContext, and etc.
   - if faspath is seletected, the exported APIs are set accordingly
     ie. glsym_glBegin = fpgl_glBegin;
   - default mode is the regular gl symbols are directly set.
     ie. glsym_glBegin = _sym_glBegin;
             
I have an Environment variable where you can set it to three different Modes

EVAS_GL_FASTPATH = 0    // Default mode. Regular GL symbols are directly loaded
EVAS_GL_FASTPATH = 1    // Fastpath mode. Takes the path described above.
EVAS_GL_FASTPATH = 2    // Wrapped mode.  All the regular GL functions are
                           wrapped once.  This can be used for various
purposes

Since all the GL symbols are now loaded in this library, I took out all
the gl symbol loading parts in the evas gl backend as you'll see in the patch.
The changes to the engine and the backend itself is pretty minor.

There are still some known issues to hammer out but I thought we're at a good
place for an initial version so that my source doesn't diverge too much.

Known Issues and To Do's
* Current GL Fastpath version doesn't support multiple threads. Instead of
  having one global real context, I would need to do it for each thread. I'll
  get on this soon.
  
  * Issues running Evas GL on certain conditions.  When running the elementary
  test (with gl engine), if you run ELMGLview test that runs in ON_DEMAND mode,
  everything works fine. BUT, when you run the ELMGLView test in ALWAYS
    mode, the subsequent elm tests shows blank screen. When you destroy the
  GLView window, everything else comes on fine.
  
  * Resource protection code.  This actually applies to Evas GL code in general
  as well. Since all the resources are shared among all the contexts that get
  created, I would like to eventually have a resource protecting mechanism that
  prevents access to resources outside of its context unless specifically
  specified.
  
  I'm attaching three files
     - evas_gl_core.h, evas_gl_core.c, fastpath.patch
     
  To get the code running...
     - copy evas_gl_core.{c,h} to src/modules/engine/gl_common/
     - apply the fastpath.patch
     - compile/install evas
     - to run with fastpath GL (ie. % EVAS_GL_FASTPATH=1 ./evasgl_sample1)



SVN revision: 65891
2011-12-05 08:54:14 +00:00
Vincent Torri 18d1e68924 whitespaces--------
SVN revision: 60426
2011-06-17 07:47:28 +00:00
Cedric BAIL 30f906aac9 evas: one more death: gl_glew !
SVN revision: 58360
2011-04-05 13:19:20 +00:00
Carsten Haitzler 8859f850fb API add: From <dunamis.park@samsung.com> - sungwoo
start of evas gl api (with compile warning fixes).



SVN revision: 58318
2011-04-04 10:23:12 +00:00
Cedric BAIL 76a0da7a1c evas: rename Evas_GL_Context to Evas_Engine_GL_Context
patch by Sung W. Park <sungwoo@gmail.com>


SVN revision: 57803
2011-03-16 17:32:49 +00:00
Carsten Haitzler ccfe91cc58 REVERT! hell no. glu is not going to become a dependency. it never
was. you broke gl-es support and didnt link to glu either. it's a
separate lib. no no no no no.



SVN revision: 57558
2011-03-07 19:11:18 +00:00
Mike Blumenkrantz ea5e9b6773 fix weird segv I found when trying opengl mode in comp module on my desktop, waiting for someone to give me the "good job you did it correctly" before I backport since I probably didn't
SVN revision: 57546
2011-03-07 05:41:49 +00:00
Carsten Haitzler cb7268cbac formatting.
SVN revision: 53908
2010-10-27 00:03:49 +00:00
Carsten Haitzler efb72afbc1 be able to free and alloc gl surface when asked to dump
SVN revision: 51654
2010-08-26 09:40:48 +00:00
Christopher Michael 3ba73cf34b No reason to include the same header twice.
SVN revision: 49449
2010-06-04 16:00:28 +00:00
Carsten Haitzler fa6a067737 gl engine now does rotates (0, 90, 180, 270), like software engines
SVN revision: 48704
2010-05-09 05:15:20 +00:00
Carsten Haitzler 5ae0845c1c begin work on argb window support for gl - glx/gl doesnt work. i think egl/gles
will tho.



SVN revision: 46677
2010-03-01 04:44:23 +00:00
Carsten Haitzler 440f6d0d7b change gl engine api a little - fixed in ecore-evas and expedite. expose
indirect option in ecore-evas with a new opt param for gl engines - will add
more opts over time.



SVN revision: 46177
2010-02-15 05:05:05 +00:00
Carsten Haitzler b933154d21 add checks for vendor etc. too
SVN revision: 46176
2010-02-15 04:12:50 +00:00
Carsten Haitzler cee4d504cf add indirect engine option - and do glsym for glxcreatepixmap and friends.
SVN revision: 46167
2010-02-14 15:12:39 +00:00
Carsten Haitzler a022e49d82 more complete gl-texture-pixmap handling, but still is broken on fglrx. hmmm.
SVN revision: 45750
2010-01-31 02:50:01 +00:00
Carsten Haitzler 45d79a15cb allow x11 engines to get x resource that sets dpi.
SVN revision: 44965
2010-01-08 07:10:53 +00:00
Carsten Haitzler a6dea7be9b find gl symbols runtime - some gl's support the feature but havent
standardised symbols! (bad gl! bad!)



SVN revision: 43857
2009-11-21 10:51:51 +00:00
Cedric BAIL 8984a75799 * evas: Cleanup move to eina log.
Patch from Mathieu Taillefumier.


SVN revision: 43200
2009-10-22 15:22:22 +00:00
Carsten Haitzler 8bd109e8ce update build for gles on s3c6410 testing
SVN revision: 43030
2009-10-12 03:31:24 +00:00
Carsten Haitzler a60f577446 some infra for starting to handle dest-alpha (rgba) windows in gl engine.
not sure shaped windows will ever be sanely possible.



SVN revision: 43015
2009-10-11 06:59:47 +00:00
Carsten Haitzler 37b66e806b new gl engine. no one uses it anyway. not 100% complete, but much better than
the old. and it ALSO does GLES2.0 as well asn GL.



SVN revision: 42982
2009-10-09 12:10:27 +00:00
doursse 9c17b01d0b move Xlib includes from gl_common to gl_x11
SVN revision: 31201
2007-08-07 09:03:22 +00:00
Carsten Haitzler 9dc3984a39 fix nul update on swap
SVN revision: 28556
2007-03-04 17:06:13 +00:00
Carsten Haitzler cbdc20a142 oops - soemoen changed the other symbols around while i changed the first set
SVN revision: 21063
2006-03-07 02:44:16 +00:00
stffrdhrn 9e57a967df Match up function names so gl_xll can work
SVN revision: 21056
2006-03-07 00:24:37 +00:00
Carsten Haitzler f435375b19 initial import fo loadable engine modules for evas - from jorge zappie :)
SVN revision: 19775
2006-01-14 12:13:38 +00:00