glReadPixels обход крючка, как правильно сделать крюк?

#c #debugging #opengl #memory #detours

Вопрос:

Я подключаю wglSwapBuffers(рабочие) и glReadPixels, вызываю код в wglSwapBuffers:

 unsigned char pixels[1 * 1 * 4] = { 0 }; glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);  

затем приложение выходит из строя, как это можно подключить, чтобы изменить пиксели?

Ошибка в отладчике:

 0 0 1 1 0x19FB14 Exception thrown at 0x0019FB14 in game.exe: 0xC0000005: Access violation writing location 0x00000006.  

мой крюк для объезда:

 void hkglReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) {  Log("%i %i %i %i 0x%Xn", x, y, width, height, pixels);   ((glReadPixels_t)oglReadPixels)(x, y, width, height, format, type, pixels); }  

opengl32 без обхода в памяти

Комментарии:

1. Вы уверены, что крючок работает правильно? Совершенно бессмысленно, что pixels это тот же адрес, что и кодовый адрес, с которого генерируется исключение.