Paul w Florczykowski wrote:> I have tested your application, and indeed there is great > deal of flicker as expected. You are not making any > particular errors in your code; the problem occurs because > the drawing, or more precisely, the copying of graphics > (blit) is not synchronized with the vertical sync signal > your screen receives from your graphics card. (I''m speaking > in terms of analog signal CRT, but actually this applies to > any kind of digital screen as well, as far the application > is concerned)Actually, Alex Fenton and Mario Steele helped me resolve most of my flicker issues just by speeding up my drawing routine. On my Windows box the flicker is no longer noticeable, even though I don''t do a vsync. I think I posted a flicker-free version of the test script to this list (check the archives), but if not you can check the source for my main app (http://jay.mcgavren.com/zyps) to see what we''re currently doing.> What you are currently doing is similar but lacks the point > (2). wxRuby aims to support this on a lower level (i > think). There is a method called "paint_buffered" (in stead > of "paint") that provides a BufferedDC-object instead of > ClientDC or DC. > ... > Sadly enough, this feature does not seem to be working > properly with wxruby 1.9.5.I heard from Alex at one point that paint_buffered was working in the Subversion version, but I don''t know if that''s made it into a release yet. -Jay McGavren http://jay.mcgavren.com/zyps
Alex Fenton
2008-Mar-28 19:25 UTC
[wxruby-users] Tearing in my buffered animation test script...
Jay McGavren wrote:> Paul w Florczykowski wrote: > >> Sadly enough, this feature does not seem to be working >> properly with wxruby 1.9.5. >> > > I heard from Alex at one point that paint_buffered was working in the > Subversion version, but I don''t know if that''s made it into a release > yet.Yep, it''s in the 1.9.5 release. I''d be interested in any feedback you have on how it works with Zyps best alex
Paul w Florczykowski
2008-Mar-29 01:16 UTC
[wxruby-users] Tearing in my buffered animation test script...
Thanks for your replies. Well I assumed double buffering automatically implies vertical sync, but ofcourse it actually means drawing on offscreen buffer first; with or without vsync..- While I''m rather new to both Ruby and WxRuby (and for that matter to any GUI toolkit at all:) I have done my share of programming graphics using Direct3D and other APIs specifically designed for that. In that world there is almost always some easy way to synchronize the actual copy or buffer swap with the vertical blank period of the screen. For example the Present(...) method of the rendering device interface in DirectX 9, automatically waits for the V-blank period before it swaps buffers, provided it is called with correct arguments. And since I come from there I was kind of expecting similar solutions for any kind of graphics. However after doing some research I realized that the opposite holds for the world of GUI APIs. On Windows (XP at least, don''t know about Vista) it seems very hard to get any info about the current position of the electron ray from the OS, unless working with either DirectX, OpenGL or directly with the graphics driver. And that is probably the right approach unless one is generating a lot of fast changing screen content at high framerates - because first then the shearing will be noticeable unless vertiacally synced. As for my own WxRuby-learning-application, I''m also completely satisfied with copying to the frontbuffer without the vsync, feel free to take a look: http://web.comhem.se/paul/triplot . The shearing is there, but I have to look very hard to see it. When I saw info on the paint_buffered method that stated it was there to faciliate flicker-free drawing I assumed it was supposed to be vertically synced just because of a preconception, sorry about that. And... I took a look at the Zyps application (really cool). As you say, there is no visible shearing. -- Posted via http://www.ruby-forum.com/.