2014-10-22 113 views
2

有没有什么办法在C中制作Cinema(或任何类型)显示器?模拟屏幕

我看过一些代码,但几乎没有文档。

回答

4

实现IOFramebuffer,就像EWFrameBuffer等一样,是创建图形驱动程序的方法。各种版本都有一些破损,但有可能让事情很好地工作,包括视网膜分辨率,以及一些试验和错误。硬件加速是分开的:

如果您的驱动程序提供了与您的kext一起实现的CFPlugin捆绑包,旧版本的OSX使用IOGraphicsAcceleratorInterface进行二维加速。

我还没有想到它在优胜美地;它似乎没有使用2D加速。更糟糕的是,优胜美地的软件渲染性能也比以前的版本差很多。我鼓励任何受此影响的人(无头Mac mini,VM中的OS X,虚拟显示器等)向Apple提交雷达。我已经这样做了,但是抱怨的人越多,他们就越有可能为此做点什么。

3D加速(OpenGL)API在所有版本上都是私有的。除非您计算英特尔/ AMD/nVidia GPU驱动程序,这似乎是由Apple与相关公司合作开发的,否则我不知道它们的第三方实施方式,开源或其他方式。

UPDATE:原来,优胜美地的WindowServer限制帧速率约8FPS 除非您IOFramebuffer的驱动程序正确实现垂直空白中断。因此,如果您的驱动程序尚未执行此操作,请执行方法registerForInterruptType(),unregisterInterruptsetInterruptState与中断类型kIOFBVBLInterruptType一起使用,并在每次完成发送完整映像时生成回调。这些细节将取决于您的设备(或缺乏)。这并不能解决硬件加速和渲染故障问题,但它至少可以提高性能(以更高的CPU负载为代价)。

+1

您需要模拟大于等于150dpi的显示(所以像素除以报告的物理尺寸),并且您需要在相关显示模式下设置“kDisplayModeValidForHiResFlag”标志。我还必须为该显示器提供有效的EDID或系统偏好设置,但会出现在Mountain Lion上,因此他们可能已经修复了该问题。 – pmdj 2014-10-26 20:05:11