windows - Brug cuda til at få skærmbillede af synlig applikation

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ejer af en Nvidia GTX 1060. Jeg ved, at det med Windows ikke er muligt at få direkte adgang til videohukommelsen på grafikkortet. Men jeg læste et eller andet sted på en e-mail liste, at det er muligt at hente pixlerne, der vises vises lige nu på skærmen ved hjælp af CUDA API. Desværre fandt jeg ingen kodeeksempel herfor.


Hvad jeg vil have, er noget som et bitmap-lignende array, der indeholder pixelernes rgb-værdier


arr[0] = 255        // red
arr[1] = 255        // green
arr[2] = 0          // blue
arr[3] = 0          // alpha
arr[4] = 255
...


Kan nogen venligst vise mig et eksempel på hvordan man gør det med CUDA?


Jeg ved, at der er en måde at bruge DirectX eller openGL. Jeg har allerede prøvet det, men det er enten for komplekst eller for langsomt og vil ikke arbejde sammen med fullscreen og windowed applikationer på samme tid.

Bedste reference


Hvad du beskriver er ikke kun umuligt, det kan endda ses som en sikkerhedsfejl. Generelt bør en applikation ikke kunne hente det viste vindue i en anden applikation uden nogen form for samtykke og kontrol fra operativsystemet.


Jeg kan huske at læse om præcis den slags en fejl for nogle år siden, men jeg kunne ikke finde artiklen længere. Der er dog mange andre artikler, der diskuterer lignende problemer. For eksempel i:


http://ece.neu.edu/groups/nucar/NUCARTALKS/snp14-gpusteal.pdf[2]


de diskuterer GPU sårbarheder, der tillader et ondsindet program til delvis at rekonstruere en webside vist i Chromium.