Let's make this happen!! Alexandre
> Le 6 mars 2015 à 21:38, Esteban Lorenzano <esteba...@gmail.com> a écrit : > > >>> 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 >>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >