Доброго времени суток господа, возникла проблемка. Задача - записать OpenGL текстуру при хуке функции glTexImage2D.
| Код | GL_EXTERN void __stdcall GLHook_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLint format, GLenum type, const GLvoid *pixels) { (*optr_glTexImage2D) (target, level, internalformat, width, height, border, format, type, pixels); SaveBMP(format,width,height,pixels); }
|
Для этого пишу функцию SaveBMP(bitmap необходимо сформировать руками, потому как требуется платформонезависимое решение).
| Код | void SaveBMP(GLuint Format, GLuint Width, GLuint Height, const GLvoid *Pixels) { unsigned char* data; data = (unsigned char *)Pixels; time_t seconds = time(NULL); tm* timeinfo = localtime(&seconds); std::fstream bmp("C:/TestBMP/Bitmap"+(std::string)asctime(timeinfo)+".bmp", std::fstream::out | std::fstream::binary); unsigned char signature[2] = { 'B', 'M' }; unsigned int fileSize = 14 + 40 + Width*Height*4; unsigned int reserved = 0; unsigned int offset = 14 + 40; unsigned int headerSize = 40; unsigned int dimensions[2] = { Width, Height }; unsigned short colorPlanes = 1; unsigned short bpp = 32; unsigned int compression = 0; unsigned int imgSize = Width*Height*4; bmp.write(reinterpret_cast<char*>(signature), sizeof(signature)); bmp.write(reinterpret_cast<char*>(&fileSize), sizeof(fileSize)); bmp.write(reinterpret_cast<char*>(&reserved), sizeof(reserved)); bmp.write(reinterpret_cast<char*>(&offset), sizeof(offset)); bmp.write(reinterpret_cast<char*>(&headerSize), sizeof(headerSize)); bmp.write(reinterpret_cast<char*>(dimensions), sizeof(dimensions)); bmp.write(reinterpret_cast<char*>(&colorPlanes), sizeof(colorPlanes)); bmp.write(reinterpret_cast<char*>(&bpp), sizeof(bpp)); bmp.write(reinterpret_cast<char*>(&compression), sizeof(compression)); bmp.write(reinterpret_cast<char*>(&imgSize), sizeof(imgSize)); for (int I = 0; I < Height; I++) { for (int J = 0; J < Width; J++) { bmp.write((char *)&data[I,J],sizeof(data[I,J])); } } bmp.close(); }
|
ну и при включении этой функции в библиотеку хука, всё благополучно падает. С ошибкой 939 в недрах vector. Почему - понять не могу, файл соответственно не генерится, подозреваю - чего-то я с Pixels натупил. Собственно вопрос - каким образом GLVoid *pixels записать в битмап? |