запустите другое приложение (которое рисует что-то с помощью OpenGl) и нарисуйте его.
получите изображение, нарисованное этой программой (с помощью opengl), используйте его в качестве текстуры, сделайте некоторое преобразование изаменить исходное изображение.
Это две довольно разные вещи.«Самый простой» и «самый чистый» способ (если это вообще можно так назвать) сделать то, что вы, очевидно, хотите, в соответствии с дальнейшими разъяснениями, - это перехватить wglSwapLayerBuffers
(который кажется чемSwapBuffers
и wglSwapBuffers
вызовите внутри страны, вам нужно подтвердить это или перехватить все три).
После этого у вас будет действительный дескриптор контекста, и во время замены буферов вы будете уверены (обязательно!), Что содержимое кадрового буфера является действительным и непротиворечивым, полусрисованных примитивов не существует.Следовательно, ничто не мешает вам прочитать обратно передний или задний буфер (или оба!), Запустить какое-то ядро над ним и записать его обратно, прежде чем вернуть управление приложению.
Поскольку дескриптор контекста действителен только дляпроцесс, единственный способ, который надежно работает без проблем и без некоторых действительно неприятных хаков (более неприятных, чем это уже есть), - это вставка поддельного opengl32.dll
, во многом как инструменты, такие как GLIntercept.
Возможно, вы могли бы также «украсть» дескриптор из мини-отладчика, но он не будет действителен для вашего процесса, поэтому бесполезен.
Но ... как сказал datenwolf: просто несделай это.