- buffer_ = CoreSurfaceBufferCreate((CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
- @"PurpleEDRAM", kCoreSurfaceBufferMemoryRegion,
- [NSNumber numberWithBool:YES], kCoreSurfaceBufferGlobal,
- [NSNumber numberWithInt:(width_ * BytesPerPixel)], kCoreSurfaceBufferPitch,
- [NSNumber numberWithInt:width_], kCoreSurfaceBufferWidth,
- [NSNumber numberWithInt:height_], kCoreSurfaceBufferHeight,
- [NSNumber numberWithInt:'BGRA'], kCoreSurfaceBufferPixelFormat,
- [NSNumber numberWithInt:(width_ * height_ * BytesPerPixel)], kCoreSurfaceBufferAllocSize,
- nil]);
+ $GSSystemCopyCapability = reinterpret_cast<CFTypeRef (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, "GSSystemCopyCapability"));
+ $GSSystemGetCapability = reinterpret_cast<CFTypeRef (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, "GSSystemGetCapability"));
+
+ CFTypeRef opengles2;
+
+ if ($GSSystemCopyCapability != NULL) {
+ opengles2 = (*$GSSystemCopyCapability)(CFSTR("opengles-2"));
+ } else if ($GSSystemGetCapability != NULL) {
+ opengles2 = (*$GSSystemGetCapability)(CFSTR("opengles-2"));
+ if (opengles2 != NULL)
+ CFRetain(opengles2);
+ } else
+ opengles2 = NULL;
+
+ bool accelerated(opengles2 != NULL && [(NSNumber *)opengles2 boolValue]);
+ accelerated = true;
+
+ if (accelerated)
+ CoreSurfaceAcceleratorCreate(NULL, NULL, &accelerator_);
+
+ if (opengles2 != NULL)
+ CFRelease(opengles2);
+
+ if (accelerator_ != NULL)
+ buffer_ = CoreSurfaceBufferCreate((CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
+ @"PurpleEDRAM", kCoreSurfaceBufferMemoryRegion,
+ [NSNumber numberWithBool:YES], kCoreSurfaceBufferGlobal,
+ [NSNumber numberWithInt:(width_ * BytesPerPixel)], kCoreSurfaceBufferPitch,
+ [NSNumber numberWithInt:width_], kCoreSurfaceBufferWidth,
+ [NSNumber numberWithInt:height_], kCoreSurfaceBufferHeight,
+ [NSNumber numberWithInt:'BGRA'], kCoreSurfaceBufferPixelFormat,
+ [NSNumber numberWithInt:(width_ * height_ * BytesPerPixel)], kCoreSurfaceBufferAllocSize,
+ nil]);
+ else
+ VNCBlack();