well, you're actually right. I was a little concerned about that aspect but now that you point it out, it makes sense with multiple windows.
The real issue is that we have is evas_gl butting in and changing the currrent context that evas isn't aware of. the proper way to resolve this would be for evas_gl_make_current to do a evass_gl_common_context_flush(). the fix was a little hacky i admit.. I'll go ahead and fix evas_gl and send another patch. =) On Mon, Apr 18, 2011 at 3:50 PM, Carsten Haitzler <ras...@rasterman.com>wrote: > On Wed, 13 Apr 2011 12:23:22 +0900 "Sung W. Park" <sung...@gmail.com> > said: > > that patch seems wrong. if you are changing target window... and you have a > previous window.. it flushes the gl render queue for the previous window > target > (or if the flush/use of the window) is flushed. you move the flush to AFTER > setting the new context info (like new surfaces for read/write). that seems > wrong. > > > Hi all, > > > > I've been toying around with creating a simple GLView smart object that > > allows users do GL rendering simply. Eventually, I would like to see > this > > as an Elementary widget called GLView. The idea behind this is that > > if evas_gl provides the low level stuff, GLView gives the simplified > > user-version. > > I'll start another email thread later on this topic. > > > > The reason why I'm mentioning the above is because while working on > GLView, > > I've noticed an interesting behavior. (You can see this by > > compiling/running the > > program that I'm attaching.) I'm drawing a simple blended Triangle in > > the middle > > of the GLView object and what i'm getting is a smaller inverted red > triangle > > on the top left corner of the GLView object. Obviously, something was > messing > > with the state of my GL code. > > > > I've tracked this issue down to eng_window_use() in evas_x_main.c under > gl_x11 > > module. In the code, > > _________________ > > void > > eng_window_use(Evas_GL_X11_Window *gw) > > { > > if ((_evas_gl_x11_window != gw) || (force_use)) > > { > > if (_evas_gl_x11_window) > > { > > evas_gl_common_context_use(_evas_gl_x11_window->gl_context); > > > evas_gl_common_context_flush(_evas_gl_x11_window->gl_context); > > } > > _evas_gl_x11_window = gw; > > if (gw) > > { > > .... > > // Make Current Stuff.. > > _________________ > > > > I've noticed that evas_gl_common_context_flush() gets called before it > does > > MakeCurrent(). When the evas_gl_common_context_flush() gets called, it > resets > > some shader stuff and does GL calls that tell the context to use the > > particular shaders. This explains why my GLView was picking on what > seemed > > to be the MVP matrix states that Evas was using. > > > > Instead, what I think should happen is that the flush should be called > after > > MakeCurrent happens. Otherwise, you're not guaranteeing that your GL > calls > > are being applied to the proper context. I've tried that and it seems to > > address the > > problem. > > > > You can try running the glview program that I'm attaching before you > apply > > the patch and also try running it after you apply the patch. > > > > Let me know if this seems reasonable or I'm missing something somewhere. > > > > Thanks! > > > > cheers, > > Sung > > > -- > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > The Rasterman (Carsten Haitzler) ras...@rasterman.com > > ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel