AFAIK, большинство программистов пропускают функцию auxDIBImageLoad () , и документированного обходного пути нет. Glaux.lib - это статическая библиотека, в которой представлено некоторое количество кода.
Этот загрузчик изображений будет работать без :
HBITMAP hbm=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(1));
if (!hbm) return false;
BITMAP bm;
GetObject(hbm,sizeof bm,&bm);
BITMAPINFO bmi={sizeof bmi,bm.bmWidth,bm.bmHeight,1,
32}; // 24 = GL_BGR_EXT, 32 = GL_BGRA_EXT; all other fields are 0
DWORD*bits=new DWORD[bm.bmWidth*bm.bmHeight];
GetDIBits(hDC,hbm,0,bm.bmHeight,bits,&bmi,DIB_RGB_COLORS);
...
glTexImage2D(GL_TEXTURE_2D,0,3,bm.bmWidth,bm.bmHeight,0,
GL_BGRA_EXT,GL_UNSIGNED_BYTE,bits);
...
delete[] bits;
DeleteBitmap(hbm);
Эта процедура будет правильно обрабатывать как RGB (24-битные), так и проиндексированные изображения! Нет необходимости в ручном переплетении пикселей! Пример загружается из ресурса process.exe с числовым идентификатором 1.
LoadBitmap () можно заменить LoadImage () для загрузки из файла.
Если ваше входное изображение известно, что имеет несжатый тип RGB, GetDIBits не требуется, так как вы можете LoadImage () с LR_CREATEDIBSECTION, получить доступ к битам с помощью указателя bmBits и использовать GL_BGR_EXT константа. ( новые и операторы удаления не нужны.)
GetDIBits требуется любой допустимый дескриптор контекста устройства для успеха Используйте GetDC / ReleaseDC, если у вас нет удобной ручки.
Константа GL_BGRA_EXT является расширением Microsoft для opengl, она используется именно для такого вывода GetDIBits.
Загрузка сжатых PNG / GIF / JPG здесь не проверяется, но должна работать аналогично; GetDIBits () - ваш друг.
Кроме того, это растровое изображение может быть выбрано в контексте устройства памяти (превращается в холст для рисования) и затем модифицировано обычными старыми функциями GDI, особенно функциями записи текста, для вставки текста в растровое изображение.