OpenGL MultiSampling в Mac OS дает белое окно - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь перейти на OpenGL 4.1 на MacOS. Для этого я пытаюсь использовать технику MultiSample. Вот мой код выбора формата пикселей:

GLint answer;
int numAttribs = 0;
CGLRendererInfoObj rend;
bool multisampleSupport = false;

CGLQueryRendererInfo(CGDisplayIDToOpenGLDisplayMask
(kCGDirectMainDisplay), &rend, &answer);

CGLDescribeRenderer(rend, 0, kCGLRPSampleModes, &answer);
if ((answer & kCGLMultisampleBit) != 0)
    multisampleSupport = true;

NSOpenGLPixelFormatAttribute attributes[64] = { 0 };

attributes[numAttribs++] = NSOpenGLPFAOpenGLProfile;
attributes[numAttribs++] = NSOpenGLProfileVersion4_1Core;
attributes[numAttribs++] = NSOpenGLPFADoubleBuffer;
attributes[numAttribs++] = NSOpenGLPFAClosestPolicy;
attributes[numAttribs++] = NSOpenGLPFANoRecovery;
attributes[numAttribs++] = NSOpenGLPFAColorSize;
attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 24;
attributes[numAttribs++] = NSOpenGLPFAAlphaSize;
attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 8;
attributes[numAttribs++] = NSOpenGLPFADepthSize;
attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 24;
attributes[numAttribs++] = NSOpenGLPFAStencilSize;
attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 1;

if (multisampleSupport)
{
    attributes[numAttribs++] = NSOpenGLPFAMultisample;
    attributes[numAttribs++] = NSOpenGLPFASampleBuffers;
    attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 1;
    attributes[numAttribs++] = NSOpenGLPFASamples;
    attributes[numAttribs++] = (NSOpenGLPixelFormatAttribute) 4;
}

_masterPixelFormat = (WCOGLPixelFormatRef)[[NSOpenGLPixelFormat alloc] initWithAttributes:(NSOpenGLPixelFormatAttribute*) attributes];

Если я устанавливаю multisampleSupport, принудительно устанавливается в FALSE - все работает (конечно, без сглаживания). Но если для него установлено значение true (как и должно быть), поскольку средство визуализации поддерживает его, я получаю белое окно.

Да, я знаю, что OpenGL устарел, но он все равно должен работать. Что я делаю не так?

...