NSOpenGLView / NSOpenGLContext setView: get no drawable on macOS 15.8.2 RC (24H219), windows render blank (FB25133383)

After updating a MacBook Pro (M1 Pro) from macOS 15.8 to the 15.8.2 release candidate (24H219), every OpenGL context that is attached to a window has no default framebuffer. NSOpenGLView and -[NSOpenGLContext setView:] are both affected, so anything drawn that way shows a blank window. I filed FB25133383 with a minimal sample, kernel log and call trace.

Symptoms

  • kCGLCPHasDrawable is 0, glCheckFramebufferStatus(GL_FRAMEBUFFER) returns GL_FRAMEBUFFER_UNDEFINED (0x8219), and glClear raises GL_INVALID_FRAMEBUFFER_OPERATION (0x506).
  • For every attach attempt the kernel logs: (IOGPUFamily) IOGPUGLDrawableUserClient::set_surface(sIOGPUGLDrawableClientSetSurfaceData *): Invalid surface ID = N
  • CGLSetSurface returns kCGLBadDrawable (10005). Stepping through it, CGSBindSurface succeeds and the IOGPU user-client call then fails with kIOReturnBadArgument.

What still works

  • Offscreen FBOs in the same context.
  • CAOpenGLLayer and NSOpenGLLayer render correctly in the same process. Only the window-surface path is broken.

Minimal sample (public API only)

// clang -fobjc-arc -Wno-deprecated-declarations -framework Cocoa -framework OpenGL repro.m -o repro && ./repro
#define GL_SILENCE_DEPRECATION 1
#import <Cocoa/Cocoa.h>
#import <OpenGL/OpenGL.h>
#import <OpenGL/gl.h>
#import <OpenGL/glext.h>

@interface ReproView : NSOpenGLView
@end
@implementation ReproView
- (void)drawRect:(NSRect)dirtyRect {
    NSOpenGLContext *ctx = [self openGLContext];
    [ctx makeCurrentContext];
    GLint hasDrawable = -1;
    CGLGetParameter(ctx.CGLContextObj, kCGLCPHasDrawable, &hasDrawable);
    GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    glClearColor(0, 1, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
    GLenum err = glGetError();
    printf("hasDrawable=%d status=0x%x glError=0x%x\n", hasDrawable, status, err);
    fflush(stdout);
    [ctx flushBuffer];
}
@end

int main(void) {
    @autoreleasepool {
        NSApplication *app = [NSApplication sharedApplication];
        [app setActivationPolicy:NSApplicationActivationPolicyRegular];
        NSWindow *win = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, 300, 240, 240)
                                                    styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable
                                                      backing:NSBackingStoreBuffered defer:NO];
        NSOpenGLPixelFormatAttribute attrs[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAAccelerated, 0 };
        NSOpenGLPixelFormat *pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
        [win.contentView addSubview:[[ReproView alloc] initWithFrame:NSMakeRect(20, 20, 200, 200) pixelFormat:pf]];
        [win makeKeyAndOrderFront:nil];
        [app activateIgnoringOtherApps:YES];
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [app terminate:nil]; });
        [app run];
    }
    return 0;
}

Expected: a green square and hasDrawable=1 status=0x8cd5 glError=0x0. On 24H219: nothing is drawn and it prints hasDrawable=0 status=0x8219 glError=0x506.

Scope

  • Same result for arm64 and x86_64 under Rosetta, layer-backed or not, main thread or background thread.
  • Affected on my Mac: Sony Imaging Edge Desktop Viewer (NSOpenGLView), DJI Studio (Qt 6, NSOpenGLContext) and its Quick Look extension.
  • Public reports with the same symptom on 24H219: kitty #10645, Alacritty #9067, Godot #124311, Bambu Studio #12530 (all on GitHub). They cover M1, M4, M4 Pro and M4 Max, and the Alacritty report says 15.8.1 was fine.

Questions

  1. Is this a known issue in the 15.8.2 RC, and will it be fixed before 15.8.2 ships?
  2. Is anyone seeing it on the macOS 26.7.2 RC or the 27.2 beta?

Workaround for developers in the meantime: render into an IOSurface-backed FBO and present that surface in a CALayer, or use CAOpenGLLayer.

Answered by DTS Engineer in 909269022

Thanks for filing FB25133383 with a minimal reproducer, a kernel log, and a call trace, and for posting the reproducer here.

I can't comment on known issues or on whether or when a fix might ship. Your report is the right channel for the issue.

As new builds become available, please retest and add the results to FB25133383. If you have access to the macOS 26.7.2 RC or the 27.2 beta, results from those builds belong there too. If the report doesn't already include one, please also attach a sysdiagnose captured right after you reproduce the problem.

Reproduced on a MacBook Pro (Apple silicon) after updating to macOS 15.8.2 (build [24H219 — confirm yours]).

I get the same result with a minimal Swift test using only Apple frameworks: every NSOpenGLView variant (legacy and core profile, as contentView and as subview, with and without wantsLayer) ends up with no drawable. glCheckFramebufferStatus returns 0x8219 and glGetError returns 0x506. A CAOpenGLLayer surface in the same process returns 0x8CD5 and draws correctly.

It affects audio plugin GUIs that draw through NSOpenGLView (seen in Ableton Live 12). Last good session was before the update. Apple Diagnostics reports no hardware fault.

I filed feedback FB25171330, linking this thread and FB25133383.

Workaround that works for me: drawing through a CAOpenGLLayer.

Thanks for filing FB25133383 with a minimal reproducer, a kernel log, and a call trace, and for posting the reproducer here.

I can't comment on known issues or on whether or when a fix might ship. Your report is the right channel for the issue.

As new builds become available, please retest and add the results to FB25133383. If you have access to the macOS 26.7.2 RC or the 27.2 beta, results from those builds belong there too. If the report doesn't already include one, please also attach a sysdiagnose captured right after you reproduce the problem.

Thanks. And thanks to carlosbucci for the independent confirmation and for filing FB25171330.

Retested today on 15.8.2 RC 2 (24H225): unchanged.

  • The sample above still prints hasDrawable=0 status=0x8219 glError=0x506, natively and under Rosetta.
  • NSOpenGLView and -[NSOpenGLContext setView:] are still blank; CAOpenGLLayer and NSOpenGLLayer still render.
  • The kernel still logs IOGPUGLDrawableUserClient::set_surface(...): Invalid surface ID = N.
  • IOGPUFamily (104.6.6), AGXG13X (329.2) and IOSurface (372.5.4) report the same version numbers as on 24H219; only the kernel build changed.

I have added this to FB25133383, together with a sysdiagnose captured right after reproducing on 24H225.

I don't have a Mac running the 26.7.2 RC or the 27.2 beta. If anyone here does, the sample in the first post takes a minute to run, and a result from either build would be useful.

Still reproduces on macOS 15.8.2 build 24H225 (the build after 24H219), tested Oct 14, 2026: NSOpenGLView variants (legacy and core, contentView and subview, with and without wantsLayer) still return glCheckFramebufferStatus 0x8219 and glGetError 0x506. CAOpenGLLayer returns 0x8CD5 and draws correctly.

I have no view inside the apps, but FreeCAD, PrusaSlicer and OrcaSlicer all fail to draw their 3D areas on macOS 15.8.2 (24H219).

Yes, I've also noticed this. A whole bunch of OpenGL games just show black or white screens.

0AD, Oolite, Armagetron, etc.

In the latest update, the issue was resolved for me. Thank you.

Accepted Answer

Fixed in macOS 15.8.2 RC 3 (24H230). The issue is gone, and IOGPUFamily went from 104.6.6 back to 104.6.5.