2014-10-22 91 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