Ah, i see that you finally had a chance to go through your email piles =)
welcome back!

On Thu, Mar 10, 2011 at 5:52 PM, Carsten Haitzler <ras...@rasterman.com>wrote:

> On Mon, 28 Feb 2011 17:14:58 +0900 "Sung W. Park" <sung...@gmail.com>
> said:
>
> > Hi all,
> >
> > My name is Sung Park and I've recently started working on a project for a
> > Big mobile hw company in Korea ;-)
>
> oh out with it already! :) everyone knows its samsung. :)
>

ok, i didn't say it =P


>
> > I've been given the assignment of getting the OpenGL rendered output set
> as
> > an image object in Evas, and now I'm getting my feet wet with EFL.
>
> slosh slosh. welcome to our little corner of the swamp :)
>
> > I'd very much appreciate your guys' help and comments.  Hopefully, I'll
> do
> > the same for the community in a short period of time.
> >
> > So, here I go...
> > -------------------------------
> > >From what I've gathered thus far, there is the
> >
> >     evas_object_image_native_surface_set(..., Evas_Native_Surface *surf);
> >
> > that allows you to either pass in a pixmap or a texture id as part of the
> > Evas_Native_Surface structure to set it as the evas_image object source.
> > I've noticed that the opengl texture part of the code hasn't been
> > implemented yet.  In fact, this is the part that we are interested in
> > currently:  to render an image using OpenGL to an output texture (using
> FBO)
> > and then to pass that texture to the above function.
> >
> > Unfortunately, there are a few issues with this approach.   (By the way,
> I'm
> > assuming that Evas is running a gl-x11 engine for the sake of discussion)
> >
> > - The main issue is that the GL application's GL context and the Evas
> > engine's GL context is different. Hence a texture created from the
> > application cannot be seen from the Evas engine's GL context and will not
> > output correct result.  I know that in Windows or Mac, there are ways to
> > share texture resources even across processes, but that is not the case
> in
> > Linux environment -- you can redirect pixmaps and bind it as a texture
> but
> > not explicitly share textures.
> >
> > - However, there is a way to get around this issue.  Texture resources
> can
> > be shared across different contexts by giving the share context as a
> > parameter when creating a new context.  For example,
> >
> >    glXCreateContext(Display* dpy, XVisualInfo *vis, GLXContext shareList,
> > Bool direct);
> >
> > the shareList can be Evas' GL context.  Then when the user application
> > creates a GL context with this parameter, Evas will be able to see the
> > texture.  Unfortunately, this exposes Evas' resources to the users BUT
> there
> > isn't really a reasonably better option without writing a ton code...
> >
> > However, explicitly exposing Evas' GL context just sound like a really
> > really bad idea.  One option that I would like to discuss over in a
> separate
> > thread is possibly having evas provide a set of open gl glue layer apis
> and
> > take care of the creating context and etc. for the users so they don't
> have
> > to explicitly deal with Evas' internals.
> >
> > - There's also the make_current overhead for dynamic scenes since the
> > application and evas has to call make_current every time they render.
> I'll
> > address that again next time.
>
> actually i suspect we'll have to accept that there will always be some
> overhead in this whole gl on top of evas thing compared to gl directly in a
> window/buffer/fb yourself, so i don't think it will be TOO bad.
>

i agree.


>
> > -----------------------------------------------
> >
> > For this thread, I would like to ask the community to review
> > evas_object_image_native_surface_set portion of the code that I've added.
> > The patch that I'm including is for gl_x11 engine evas_engine.c and
> > gl_common's evas_gl_context.c.  I'm also including a simple sample
> program
> > that tests the code.  consider the code a minor fix that allows the
> sample
> > code to run and maybe you guys can help out completing it.
> >
> > By the way, It's been quite difficult trying to figure out the semantics
> of
> > some of the evas_object_image functions without proper documentations...
> so
> > i may have gotten certain things wrong here..
> >
> > Also, if you look at the sample code, I've used glXGetCurrentContext() to
> > grab Evas' current GL context to use it as a share context.  It's a dirty
> > trick but it allows me to test the code for now =)
> >
> > I've also noticed that there was a y-invert texture coordinate bug (GL
> and
> > evas has different coordinate system) so I've made those changes in
> > evas_gl_context.c
> >
> > ___________________________
> > Here are some comments about the changes I've made.
> >
> > When using the image object, one would set the data using
> >
> >    evas_object_image_data_set(obj, data);
> >
> > and internally, this creates a Evas_GL_Image structure.  If I don't use
> the
> > above function, it doesn't create a Evas_GL_Image object.
> > For setting a native surface opengl texture, I figured it's not necessary
> to
> > call above function so i've added some code in the beginning of the
> > native_set() that creates the object if it's an OpenGL Native Surface.
> >
> > Also, I didn't think it was necessary to hash the image object so i
> didn't
> > add the code in there but I could be wrong I guess.
> >
> > Finally, I think it may not be a bad idea to add target (texture target)
> > field in the Evas_Native_Surface but I guess that can be debated.  For
> now,
> > i've just hard-coded the field with GL_TEXTURE_2D.
> >
> > Sorry for the long email.
> >
> > Your comments on the patches would be very much appreciated.
>
> comments here: :)
>
> evas_gl_context.patch:
> yup! in. i just never handled the y invert case (or lets say.. the
> non-inverted
> case). i just never encountered it so i n
>

> gl_x11_evas_engine.patch:
> surprisingly... i have very little to grumble about. the only thing is the
> hash
> thing where you comments "i didn't think it was necessary...". as such you
> can
> get away with not doing it until you try and duplicate the same texture in
> multiple image objects. the compositor does this - or can do it (and it is
> used
> for some effects like exposee).  this means it will share the same gl image
> wrapper struct etc. etc. which saves some resources.
>
> what you need to do here is put the image in a hash - like the one that
> uses
> pixmap id, but here using texture id. so u'll need another native_hash so
> that
> id's dont clash (tex id vs pixmap id) and then put it in there and take it
> out
> of it just like the native_hash stuff is done for pixmap id's. :)
>

my thoughts were that it wouldn't be a big overhead to just create new image
objects
for each texture reference but you're right in that it does save resources
if you reference them.

by the way, is there a good way to create a unique ID that i can use for
hashing?
since pixmap IDs are globally unique, it's good to use it as hash keys but I
think using
texture IDs would be a bad idea since it's context specific.  any thoughts
on that?


>
> now as for target GL_TEXTURE_2D ... vs what? GL_TEXTURE_RECTANGLE_NV/ARB
> etc.?
> i'm not sure that's entirely wise? 1D and 3D textures would need proper
> handling then too. also rectangle textures are subject to a different
> coordinate space (in pixels vs 0.0 -> 1.0). right now the gl engine core
> doesn't use/handle these at all actually. i'm not entirely sure we need
> to/should as rectangle textures come with a whole bunch of
> gotchas/limitations,
> and there are standard npot textures around anyway. :) i'm not really sure
> any
> client would need/want to do this?
>

the thought of having texture target came after seeing #ifdef
GL_TEXTURE_RECTANGLE_ARB
in the code.  If you tell the user that evas_object_image_native_surface_set
only
supports GL_TEXTURE_2D then I guess not having it would be fine.


> so if you can fix the hash thing... that'd be good. the yinvert patch is
> already in svn, so just send an update on the other stuff as above :)
>
>
I'll do that once I get your response about the hash id.


> --
> ------------- Codito, ergo sum - "I code, therefore I am" --------------
> The Rasterman (Carsten Haitzler)    ras...@rasterman.com
>
>
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to