On Sat, 11 Jul 2015 21:10:03 +0100 Mick <michaelkintz...@gmail.com> said:

> On Saturday 11 Jul 2015 20:40:15 David Seikel wrote:
> > On Sat, 11 Jul 2015 14:26:08 -0400 Toan Pham <tpham3...@gmail.com>
> > 
> > wrote:
> > > >  the compositor is going to draw whenever ANY APP draws.
> > > 
> > > Hmm, why is this, even when there's no pager?  Is there a setting in
> > > E for it not to draw for a certain window name or type?
> > 
> > The compositor draws EVERYTHING on the screen.  So any time any
> > application changes anything on one of its windows, the compositor
> > updates that part of the application window.  That's what compositors
> > do.
> 
> Perhaps I am being dense, but your first sentence contradicts the second:
> 
> Is it just the application window within which something changes that is
> being redrawn by the compositor and that application window only,
> 
>  or
> 
> is it the complete real estate of the whole screen that is being refreshed?
> 
> As Carsten explained it I thought that it was the former.

when you composite, the compositor takes over the entire screen. nothing is
visible without the compositor actively doing something (drawing it) to the
screen. the compositor SEES sources - such as windows and their pixmaps, gets
events saying areas of the window were drawn to by the app.

so david is right - compositor draws everything on your screen... at some point
or another. whenever updates happen, the compositor has to redraw.

the question is where/how does it redraw.

with software it literally "screengrabs" each window that updates back into
local memory and then uses evas's software engine to draw. evas decides
what/how to draw based on what objects in the scene graph were updated.

with gl you can either use the screengrabbing, or "texture from pixmap".
texture from pixmap allows evas to point a pixmap to an image object in the
canvas directly, and when the compositor draws, it will simply render a
texture that *IS* the pixmap of the window.

now next you need to know HOW rendering happens.

with software we can in detail control everything that is drawn, thus evas
tends to render only the regions that changed (with some fuzz around them).
with gl "this depends". in order to do this you need to know about the
backbuffer and how old it is. if you don't know, you HAVE TO REDRAW EVERYTHING.
because the backbuffer content is "undefined".

there is an extension in glx and egl (nvidia glx drivers support it, intel,
radeo, etc. don't). it's called the buffer age extension. with that you can
query the age of the backbuffer when drawing happens. with age, we can reduce
what we render because we now know how old the buffer content is and we can
redraw what just updated since that frame N frames ago.

when we draw - we end up redrawing a bounding box (take everything that updated
and draw a single box covering all the regions). this is generally the most
sensible way to do things as doing multiple regions means re-running the render
path per region. but you don't know as it depends on gpu, driver, cpu and all
sorts of factors you simply can't know until you examine it at runtime in each
situation.

so without this extension, everything is drawn.

when we say everything... we mean EVERYHTING. every title, every close button,
every shelf gadget, every little miniature window in the pager. every
character of text will be 2 triangles. irf you enable soft shadows .. that
becomes 50 triangles. (it's drawn 25 times, 24 for the softish shadow and once
for the real text). evas does a lot of work to pipeline and merge these
triangles into non-overlapping batches etc. to minimize context switches.

your shelf is not a suince rectangle to draw (2 triangles with a texture). it
is 1000's of triangles generated every frame. if the bounding box update
intersectsthis - evas will be generating those triangles.

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


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
enlightenment-users mailing list
enlightenment-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-users

Reply via email to