On Fri, 13 May 2011 00:00:50 +0900 "Sung W. Park" <sung...@gmail.com> said:

ok. missing the focus hook thing u'd need if u want key events to work...
display_func -> render_func_set() probably better. z_get probably can be
skipped if really too much of a pita.

whats the gl_func_call api for.. why pass the func - u already set it? could
set it then call a manual render.. if that's needed. is it really needed?
curious.  :)

> Hi all,
> 
> As you all know, I've been working on adding GL rendering features to Evas and
> we now have an early working version of Evas_GL in the svn.
> 
> Since then, there's been a request from people around me for an
> elementary widget that
> allows simple GL rendering.  Since Evas_GL can be seen as a low level API it
> made sense to have a user friendly layer that allows GL rendering.  I
> thought it
> went well with the EFL philosophy.  Take away some control but make it easy to
> use for the users as you go up the layers from Evas->Ecore->ELM-> etc.
> 
> So, I've decided to take a crack at elm_glview.  By the way, this is
> my first time writing
> an elementary widget so I KNOW I've missed a lot that i need to handle.  Also,
> I'm aware of the fact thatI need to handle input events. I'll need to
> figure that out
> but I open to comments and suggestions.  However, before I get all the
> nitty gritty
> detail right, I wanted to start a discussion with the community on the APIs
> and ask for suggestions.
> 
> So far, after discussing this with a few people, we've come up with
> the following.
> 
>    typedef enum _Elm_GLView_Scale_Policy
>      {
>         ELM_GLVIEW_POLICY_RESIZE,   /**< Resize the internal surface
> along with the image */
>         ELM_GLVIEW_POLICY_SCALE     /**< Only reize the internal image
> and not the surface */
>      } Elm_GLView_Scale_Policy;
> 
>    Evas_Object *elm_glview_add(Evas_Object *parent);
>    void              elm_glview_size_set(Evas_Object *obj, Evas_Coord
> width, Evas_Coord height);
>    void              elm_glview_size_get(Evas_Object *obj, Evas_Coord
> *width, Evas_Coord *height);
>    Evas_GL_API  *elm_glview_gl_api_get(Evas_Object *obj);
>    Eina_Bool        elm_glview_mode_set(Evas_Object *obj, Elm_GLView_Mode
> mode); Eina_Bool        elm_glview_scale_policy_set(Evas_Object *obj,
> Elm_GLView_Scale_Policy policy);
>    void             elm_glview_display_func(Evas_Object *obj,
> Elm_GLView_Func func);
>    void             elm_glview_changed_set(Evas_Object *obj);
>    Eina_Bool    elm_glview_z_get(Evas_Object *obj, Evas_Coord x,
> Evas_Coord y, Evas_Coord *z);
> 
> 
> Internally, elm_glview handles creating an image object, evas_gl
> object, evas_gl context,
> surface, doing make current for display function. You just need to set
> the display_function
> callback and put your GL calls in there. The scale policy concerns how the
> glview would resize.  setting it to SCALE would keep the current
> glview but simply scale
> the underlying image.  otherwise, it would recreate the surface.  The
> API is pretty straight forward
> in my opinion.  It's very much GLUT-like adapted for EFL.
> 
> In order to use the elm_glview, you would do something like
> 
> main()
> {
>    ...
>    // Add a GLView
>    glview = elm_glview_add(win);
>    glapi = elm_glview_gl_api_get(glview);
>    elm_glview_mode_set(glview, ELM_GLVIEW_ALPHA | ELM_GLVIEW_DEPTH);
>    elm_glview_scale_policy_set(glview, ELM_GLVIEW_POLICY_SCALE);
>    elm_glview_display_func(glview, (Elm_GLView_Func)draw);
>    evas_object_resize(glview, 256, 256);
>    evas_object_show(glview);
>    ecore_animator_add(on_animate, glview);
>    ...
> }
> 
> on_animate()
> {
>    elm_glview_changed_set((Evas_Object*)data);
>    return EINA_TRUE;
> }
> 
> // GL calls
> draw()
> {
>    elm_glview_size_get(..., &w, &h);
>    glapi->glViewport(..., w, h);
>    ...
> }
> 
> I guess it's easier to see the sample files and run the code to see
> how they actually work.
> I'm including a patch that shows the above example.  I'm including the
> following files.
> 
> 1. elm_glview.path
>   -. apply using: patch -p0 elm_glview.patch
> 2. elm_glview.c
>   -. copy the file to src/lib
>   -. make/ install elmentary
> 3. elmglviewsample1.c, elmglviewgears.c, Makefile
>   -. do a make on the samples using the given makefile.
> 
> Ok, that's all for now.  I'd love to hear comments and suggestions on
> it as I continue to
> work on it.
> 
> thanks!
> 
> cheers,
> Sung


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to