"That is not really helpfull. Anything that uses cairo? I would like to make some comparisons and it would help if I can recreate the same animations. (I did some work with cairo and python, but no animation. I used cairo for animations together with GTK, sure this was faster but these applications are only made for the animation, just a simple drawing loop. Pharo of course has much more that happens in between)."
No I was not talking as a developer but rather as a user, so by "everything" I mean literally everything I use, cairo based or not. I am no cairo developer , I only took a look at the pycairo docs once. I have picked the habit of taking a look at how much cpu each application consumes by using Blender. As you can imagine blender can eat cpu cycles like peanuts, so I have an overall idea under which circumstances the cpu can max out so I have learned to avoid it by utlising several techniques. I am also a blender python developer. But then its not hard to imagine that when you see a simple animation of a small logo slide in a very small area cosuming 30-50% of CPU and flicker, that 2d game running in full screen or even half screen would be a no go. On Sat, Mar 7, 2015 at 4:38 AM, Esteban Lorenzano <esteba...@gmail.com> wrote: > > On 07 Mar 2015, at 00:02, Nicolai Hess <nicolaih...@web.de> wrote: > > 2015-03-06 20:18 GMT+01:00 Esteban Lorenzano <esteba...@gmail.com>: > >> >> On 06 Mar 2015, at 18:40, kilon alios <kilon.al...@gmail.com> wrote: >> >> very good example and very informative thank you. >> >> Sadly it also shows that even with Athens Pharo is incredible slow. >> Simple animation spiking a single 3.2 Ghz core to 50% does not look very >> promising for heavy big size graphic based animations. Which is not a >> surprise since this was also evident the first time I tried the VGTiger >> demo. But still , its better than no Athens ;) >> >> >> That’s because we are converting the rendering into a bitmap that is >> after drawn for the vm… a complete inefficient mechanism. >> > > I heard this multiple times, but I still don't get it. The (cairo) > rendering happens on a (in memory) imagesurface. There is no extra > allocation > of a bitmap for every drawing on the screen. Drawing the rendering on the > screen is a bitblt (copybits) operation, like it is done for every other > Form. > > > I will try to explain… is a problem in several ways: > 1) what is not efficient at all is BitBlt plugin, our current way to > display things. Want an example? just open a new image, open a browser (or > a playground, or any window) and start moving it…. then watch how your cpu > starts heating (in my machine, is around 35%, some times… just one > browser). > 2) Now… what we do with Athens is: > a) create an in-memory surface and draw things there. > b) convert that surface into a bitblt compatible format (this is actually > just a copy, not much actually) > c) display the result into the current world window (another copy) > 3) Now imagine all that cycling (stepping)… > > With OSWindow (SDL2) what we do is: > 1) create a SDL2 surface > 2) draw on it > 3) cycle on (2) > > > >> I have a running experiment for drawing directly in the canvas (using >> SDL2 library) and the tiger demo drops from eating 70% of cpu to 9% in my >> machine. >> > > We can do this without SDL, but of course less platform independent, with > cairos win32 , quartz, or xrender (os dependent) surfaces. This is really > fast, no need > for an (in memory) image surface. But one problem with this approach is, > some morphs need to access the current displays Form data (HandMorph for > example). > And this does not work (or not easily) with the OS device surface. > Does this work with cairo and SDL? > > > yes, why not? > and yes… we can have several backends. The advantage on using SDL2 is that > you do not need to maintain one different backend for each platform. Of > course, it has also drawbacks, as always… but our manpower is determinant > here and we decided to take the “common approach”… we will have time to > improve later, if we find is necessary (but frankly, I do not think so for > the moment) > > > One thing that is really slow is painting an image with Athens, because > the cairo backend creates a new surface for this image and uses this > image as a pattern paint. The slow part is copying and converting the > image data into the surface. > I already proposed an alternative, (it's a bit like cheating), we can use > the bitblt to copy and convert the image data into the surface, this again > is much faster. > > > this is something inherent to cairo (and athens as a result)… I suppose > game programmers already dealt with this problem. I suggest look there for > answers (I didn’t look there, nor seen your proposed solution yet… sorry I > will as soon as I find some time). > > cheers, > Esteban > > > > >> Our idea is to move pharo in that direction for Pharo5 so next year we >> will be a lot better :) >> >> Esteban >> >> >> On Fri, Mar 6, 2015 at 6:28 PM, Alexandre Bergel <alexandre.ber...@me.com >> > wrote: >> >>> This is really good that you are diving into Athens. It deserves it! >>> >>> Alexandre >>> >>> >>> > On Mar 6, 2015, at 10:20 AM, Nicolai Hess <nicolaih...@web.de> wrote: >>> > >>> > There is a "play" button in the SketchBrowser. >>> > And if you open just the simple sketch view: >>> > ASketchExampleColors openView >>> > you'll have to start the drawing from the morph menu. >>> > >>> > In a prior version I had some "autoplay" option, but sometimes this >>> throws >>> > a NativeBoost error, if it is the first time it loads the cairo >>> library. >>> > >>> > Maybe I should add the autoplay again. >>> > >>> > >>> > >>> > >>> > 2015-03-06 16:03 GMT+01:00 Torsten Bergmann <asta...@gmx.de>: >>> > For me all the samples stay black. But the Athens tiger demo works... >>> > >>> > Is this a driver problem? >>> > >>> > Bye >>> > T. >>> > >>> > Gesendet: Freitag, 06. März 2015 um 10:14 Uhr >>> > Von: "Nicolai Hess" <nicolaih...@web.de> >>> > An: "Pharo Development List" <pharo-dev@lists.pharo.org>, "Any >>> question about pharo is welcome" <pharo-us...@lists.pharo.org> >>> > Betreff: [Pharo-dev] [ANN AthensSketch] A playground for drawings with >>> Athens. >>> > >>> > The main purpose of this packages is to ease the creation of simple >>> drawings and provide a rich set of examples for Athens drawing API. >>> > -------------- >>> > Gofer new >>> > smalltalkhubUser: 'NicolaiHess' project: 'AthensSketch'; >>> > configuration; >>> > load. >>> > ConfigurationOfAthensSketch loadDevelopment. >>> > >>> > AthensSketchBrowser open. >>> > >>> > ----------------- >>> > >>> > >>> > This is a simple playground for Athens drawings. Just subclass >>> AthensSketch and define your own sketch drawing in the #drawStepOn: method. >>> It provides basic frame based animation (play/pause/stop). >>> > >>> > Open a player with >>> > ASketchExampleColors openPlayer', >>> > or a simple viewer morph with >>> > ASketchExampleColors openView (start and stop rendering from the morph >>> menu) >>> > >>> > The AthensSketchBrowser lists all defined AthensSketch subclasses. >>> (Basic examples >>> > from package AthensSketch and some more examples from package >>> ASketchExamples). >>> > You can step through the list of examples, start and stop the drawing, >>> or view and edit the drawing code. >>> > >>> > It is great that we have now a vector based drawing API. The (old) >>> Canvas API is >>> > already great for pixel based drawings. A rich API and many good >>> things if >>> > you discover it. And Athens is a addition that can increase our >>> possibilities. >>> > There were some questions about Athens, what it is and what it is used >>> for, maybe this >>> > helps. >>> > >>> > >>> > nicolai >>> > >>> >>> -- >>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >>> Alexandre Bergel http://www.bergel.eu >>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >>> >>> >>> >>> >>> >> >> > >