Я пытаюсь прикрепить окно к opengl (wglCreateContext), но перед этим мне нужно установить для него формат пикселя. ChoosePixelFormat успешно выполняется, но SetPixelFormat всегда возвращает 0xFFFFFFFF (-1). Вызов GetLastError возвращает 0 (успех), поэтому я не понимаю, что не так. MSDN говорит, что SetPixelFormat должен возвращать только 0 или 1 (не -1). Я делаю это в asm, но вот псевдо-код:
hdc = GetDC(CreateWindowExA(0, "edit", 0, WS_POPUP | WS_MAXIMIZE | WS_VISIBLE, 0, 0, 0, 0, 0, 0, 0, 0)); //window is successfully created
SetPixelFormat(hdc, ChoosePixelFormat(hdc, ppfd), ppfd); //ChoosePixelFormat returns 7
//returned value is -1
//GetLastError returns 0
wglMakeCurrent(hdc, wglCreateContext(hdc)); //both fails and GetLastError = 0x7D0 (The pixel format is invalid)
он основан на обратном инжиниринге, поэтому дескриптор формата пикселей в байтах, извините:
db 0x28,0x00,0x01,0x00,0x25,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
Спасибо за любыеhelp
- EDIT: дескриптор формата пикселя переписан в c:
LPPIXELFORMATDESCRIPTOR ppfd;
::memset(ppfd, 0x0, 0x28);
ppfd->nSize = 0x28;
ppfd->nVersion = 1;
ppfd->dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
ppfd->iPixelType = 0x0;
ppfd->cColorBits = 32;
ppfd->cDepthBits = 16;