obteniendo captura de pantalla de escritorio completo de la GPU

He estado usando la API de WindowsBitBlt función para realizar la captura de pantalla.

Sin embargo, hay muchos inconvenientes:

DWM y Aero causan una desaceleración masiva (3ms -> 35ms solo para llamar aBitBlt): para solucionar esto, sería necesario desactivar Aero, que preferiría no hacer. La pantalla parpadea y las cosas cambian.os datos se deben volver a transferir a la GPU para cargar datos como texturLayered Windows no se puede capturar sinCAPTUREBLT bandera. Cuando está habilitado, el cursor del mouse parpadea al capturar. Esto puede parecer un problema menor, pero es extremadamente molesto cuando la aplicación está libre de errores. Como solución para esto, tengo la intención de representar una ventana en capas como un cursor adicional.

Ya estoy usando OpenGL para mostrar y manipular los datos de la pantalla capturada. @BitBlt me da los datos de píxeles y es relativamente fácil cargarlos en una textura. Sin embargo, esto es un poco absurdo porque estoy reenviando manualmente los datos a la GPU cuando para empezar debería estar disponible en la GPU. Los datos ciertamente están ahí, pero intentar acceder a ellos es una cuestión diferente.

Supongo que esta funcionalidad no ocupa un lugar destacado en la lista de tareas pendientes (o probablemente en cualquier lista para el caso) para los proveedores, pero me gustaría preguntarles a los que saben si hay alguna disposición proporcionada por AMD (ATI) o NVidia en sus controladores para leer el búfer de pantalla (en un contexto OpenGL, por ejemplo). Simplemente no sé lo suficiente sobre la arquitectura moderna de GPU para saber dónde comenzar a buscar respuestas.

Respuestas a la pregunta(2)

Su respuesta a la pregunta