Example #1
0
        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);
        }
Example #2
0
 public void waitForVSync()
 {
     outputStream.WaitForVerticalBlank();
 }