obtenção de captura de tela completa da área de trabalho da GPU

Estive usando a API do WindowsBitBlt para executar a captura da tel

Existem muitas desvantagens:

DWM e Aero causam uma desaceleração maciça (3ms -> 35ms apenas para chamarBitBlt) - para contornar isso, seria necessário desativar o Aero, o que eu prefiro não fazer. A tela pisca e as coisas mudam. Os dados devem ser transferidos novamente para a GPU para carregar dados como textura Windows em camadas não pode ser capturado semCAPTUREBLT flag. Quando ativado, o cursor do mouse pisca ao capturar. Isso pode parecer um problema menor, mas é extremamente irritante quando o aplicativo está livre de erros. Como solução alternativa, pretendo renderizar uma janela em camadas como um cursor adiciona

Já estou usando o OpenGL para exibir e manipular os dados da tela capturados.BitBlt fornece os dados de pixel e é relativamente fácil carregá-lo em uma textura. No entanto, isso é um pouco absurdo, porque estou reenviando manualmente os dados para a GPU, quando deveriam estar disponíveis na GPU para começar. Os dados certamente estão lá, mas tentar acessá-los é uma questão diferent

Presumo que essa funcionalidade não esteja no topo da lista de tarefas (ou provavelmente esteja em qualquer lista) para fornecedores, mas gostaria de perguntar aos que estão sabendo se existem disposições da AMD (ATI) ou NVidia em seus drivers para ler o buffer de tela (em um contexto OpenGL, por exemplo). Simplesmente não sei o suficiente sobre a arquitetura moderna da GPU para saber por onde começar a procurar resposta

questionAnswers(2)

yourAnswerToTheQuestion