大佬教程收集整理的这篇文章主要介绍了xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当系统GPU更改时,CGDirectDisplayID也会更改,但不会以文档的方式更改.实验表明,根据使用的GPU,相同的屏幕ID将相差2.
io_service_t servicePort = CGDisplayIOServicePort (cgDisplayID); io_service_t root = IODisplayForFramebuffer (servicePort,kNilOptions); NSDictionary* ioRegistryDict = nil; NSString* displayKey = nil; IORegistryEntryCreateCFProperties (root,(CFMutableDictionaryRef *)&ioRegistryDict,kcfAllocatorDefault,kNilOptions); if (ioRegistryDict) displayKey = [ioRegistryDict objectForKey:@"IODisplayPrefsKey"];
这很有效,除了10.9之外,不推荐使用CGDisplayIOServicePort.
鉴于所有这些,以及Apple建议不要缓存NSScreens(无论如何都不能真正用于此目的),可靠地识别屏幕的最佳方法是什么,以便我可以告诉(例如)家中的屏幕之间的区别一个在工作?
我不想依赖屏幕分辨率,因为不应将用户更改分辨率视为不同的显示.也不应该将不同GPU上的相同屏幕视为不同.
第二个目标是找到一种给定CGDirectDisplayID的方法,如果发生GPU切换,如何确定同一屏幕的CGDirectDisplayID是什么?这至少允许我通过CGDirectDisplayID跟踪显示,只要我可以匹配来自两个GPU控制器的两个结果.
CGDisplayCreateUUIDFromDisplayID(CGDirectDisplayID displayID)
并且您可以使用以下方式获取显示ID:
CGDisplayGetDisplayIDFromUUID(CFUUIDRef uuid)
这就是我用来唯一标识显示的内容,即使它们的CGDirectDisplayID发生了变化,例如插入了不同的端口.不幸的是,Apple没有正确记录这些功能,但我在多台显示器上进行的测试表明,获得的CFUUIDRef是唯一且一致的 – 即使重启后 – 无论CGDirectDisplayID是否因任何原因而改变.
要检查显示是新的/唯一的,请使用其CGDirectDisplayID并将其转换为CFUUIDRef,然后比较UUID,它是多对一关系,许多CGDirectDisplayID将映射到单个CFUUIDRef.
这些API调用在10.7 – 10.12中的ApplicationServices和10.13中的ColorSync中可用.
以上是大佬教程为你收集整理的xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示全部内容,希望文章能够帮你解决xcode – CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。