private bool CaptureFrameGPU() { //uncomment for double vsync //output.WaitForVerticalBlank(); output.WaitForVerticalBlank(); var result = duplicator.TryAcquireNextFrame(500, out _, out capture); using (capture) { if (result.Code == WaitTimeout) { return(false); } if (result.Failure) { result.CheckError(); //throw } using (var texture = capture.QueryInterface <Texture2D>()) device.ImmediateContext.CopySubresourceRegion(texture, 0, null, gpuTexture, 0); } TryReleaseFrame(); device.ImmediateContext.GenerateMips(scaler); device.ImmediateContext.CopySubresourceRegion(gpuTexture, gpuTexture.Description.MipLevels - 1, null, cpuTexture, 0); return(true); }
public void waitForVSync() { outputStream.WaitForVerticalBlank(); }