Naaah, it’s not that. The OSes draw code already handles that at a much lower level. You’re just creating what is a maximum update throttle. You’re not blitting pixels in a video card driver.
You can try my simple approach and just declare the next update time to be the current time + 1 second. It should work without screen flicker at all. We’re not doing low level code. As far as i know, the MacOS code has a triple buffered system that already handles that. > On Oct 23, 2020, at 10:51 AM, Andreas Falkenhahn <andr...@falkenhahn.com> > wrote: > > The problem with that approach is that I'd need to find out the monitor's > refresh rate in order to calculate "nextUpdateTime" and I'm not sure if I can > get this information from all monitors reliably. > > On 19.10.2020 at 00:09 Alex Zavatone wrote: > >> It shouldn’t be too hard to roll your own simply based on milliseconds of a >> timer. > >> Even a simple > > if (myMilliseconds >> nextUpdateTime) { >> [updateObject doThatUpdate]; >> nextUpdateTime = myMilliseconds + msThrottle; >> } > >> lets you get a basic throttle. >> >> Cheers, >> Alex Zavatone > >>> On Oct 15, 2020, at 2:13 PM, Andreas Falkenhahn via Cocoa-dev >>> <cocoa-dev@lists.apple.com> wrote: > >>> I'm drawing inside an NSView by simply setting its layer's contents to a >>> CGImage which is updated for every frame, e.g. something like this: > >>> dp = CGDataProviderCreateWithData(NULL, frameBuf, frameBufSize, NULL); >>> im = CGImageCreate(frameWidth, frameHeight, 8, 32, frameStride, >>> theColorSpace, (CGBitmapInfo) kCGImageAlphaNoneSkipFirst, dp, NULL, FALSE, >>> kCGRenderingIntentDefault); > >>> view.layer.contents = (id) im; >>> CGImageRelease(im); >>> CGDataProviderRelease(dp); > >>> This works fine except that there is no throttle so this will draw as fast >>> as the CPU allows, which of course is a waste of CPU cycles because the >>> monitor only refreshes a certain amount of times per second. > >>> So is there a convenient way to throttle drawing to the monitor's refresh >>> rate or does this have to be done the hard way by querying the monitor's >>> refresh rate and then setting up a timer which draws in exactly those >>> refresh intervals or how should this be done? > >>> Note that I'd like to avoid using OpenGL or Metal or whatever is the >>> standard nowadays but I'm mainly interested in an AppKit solution... > >>> -- >>> Best regards, >>> Andreas Falkenhahn mailto:andr...@falkenhahn.com > >>> _______________________________________________ > >>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > >>> Please do not post admin requests or moderator comments to the list. >>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com > >>> Help/Unsubscribe/Update your Subscription: >>> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com > >>> This email sent to z...@mac.com > > > > > -- > Best regards, > Andreas Falkenhahn mailto:andr...@falkenhahn.com > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com