Hello jimmyb,
Just wanted to give you a heads-up that I've replied to your post.
I'm aware hardware VSYNC makes it OS-specific. The API exists (Direct3D RasterStatus.ScanLine and RasterStatus.INVBlank) and I'm successfully using that for my Arduino input lag meter at http://www.scanningbacklight.com
I'm now planning to support both hardware and software VSYNC, to give me maximum testing/benchmarking flexibility.
I came up with an algorithm:
- I achieved 1-2 microsec accuracy (timecoding) via QueryPerformanceCounter() sync'd up with RasterStatus.ScanLine() (accurately tells me how long ago the last VSYNC was)
- I only requires signal to scanning backlight once every 10sec (CPU+USB timing independent) or randomly. The Arduino extrapolates. No precise timing, just simply timecoded.
- I successfully exceeds precision requirements for drift-free timing of strobes (+/-100us) with achieved accuracy of ~2us, almost 2 orders of magnitude safety margin!
So software VSYNC is quite accurate.
Just wanted to give you a heads-up that I've replied to your post.
I'm aware hardware VSYNC makes it OS-specific. The API exists (Direct3D RasterStatus.ScanLine and RasterStatus.INVBlank) and I'm successfully using that for my Arduino input lag meter at http://www.scanningbacklight.com
I'm now planning to support both hardware and software VSYNC, to give me maximum testing/benchmarking flexibility.
I came up with an algorithm:
- I achieved 1-2 microsec accuracy (timecoding) via QueryPerformanceCounter() sync'd up with RasterStatus.ScanLine() (accurately tells me how long ago the last VSYNC was)
- I only requires signal to scanning backlight once every 10sec (CPU+USB timing independent) or randomly. The Arduino extrapolates. No precise timing, just simply timecoded.
- I successfully exceeds precision requirements for drift-free timing of strobes (+/-100us) with achieved accuracy of ~2us, almost 2 orders of magnitude safety margin!
So software VSYNC is quite accurate.