Я хочу загрузить HBITMAP из файла ресурсов и использовать его в качестве текстуры OpenGL. Код, который я использую:
HBITMAP hBmp = (HBITMAP) LoadImage(hInstance,
MAKEINTRESOURCE(id), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
BITMAP BM;
GetObject(hBmp, sizeof(BM), &BM);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
GLvoid* bits = BM.bmBits;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, BM.bmWidth,
BM.bmHeight, 0, GL_BGRA_EXT,
GL_UNSIGNED_BYTE,
bits);
Но я всегда получаю сообщение об ошибке из Visual Studio, что у меня нет доступа к указателю bits
, Ошибка в последней строке кода:
bits);
Я на самом деле могу использовать указатель NULL вместо bits
без получения ошибки. Я могу вывести bits
чтобы использовать окно сообщения. У кого-нибудь есть идея, что не так с моим кодом?
От GetObject
документация:
Если
hgdiobj
является дескриптором растрового изображения, созданного любым другим способом,GetObject
возвращает только ширину, высоту и информацию о формате цвета растрового изображения. Вы можете получить битовые значения растрового изображения, вызвавGetDIBits
или жеGetBitmapBits
функция.
В контексте «другие средства» — это нечто иное, чем CreateDIBSection
, Вы не используете CreateDIBSection
вы используете LoadImage
, Какая категория LR_CREATEDIBSECTION
флаг ставит вас в тупик, но обходной путь очевиден: использование GetDIBits
.