2016-07-29 25 views
-3

問題很簡單。在Windows上,您將BitBlt()繪製到屏幕上。在OS X上,您通常可以使用OpenGl,但是如何使用Apple新的Metal框架將位圖繪製到屏幕上?我無法找到任何有價值的蘋果金屬參考。 我現在正在使用Core Graphics作爲繪圖部分,但由於我的位圖一直在更新,我覺得我應該移動到Metal來減少開銷。使用金屬繪製位圖

+3

這就是爲什麼我們需要「缺乏最小的理解」返回 – tbodt

+0

沒有理由您應該使用Metal來繪製圖像。 ' - [NSImage drawInRect:]'會做得很好。 – tbodt

+0

與金屬相比,NSImage是不是很慢?如果我每秒更新一次位圖30次,該怎麼辦?我要求金屬,因爲我想使用金屬。 – user148013

回答

1

很簡短的答案是這樣的:首先,如果您對渲染管道沒有任何瞭解,則需要使用Metal設置標準渲染管道(這是一項工作)(注意:但這可以簡化通過渲染具有兩個三角形的四邊形來避免3D東西,只需給出頂點的xy座標)。 Apple提供了很多示例代碼,展示瞭如何設置標準渲染管線,最簡單的可能是MetalImageProcessing,因此您可以將其剝離(即使使用過度複雜的計算着色器繪製,您會希望將其替換爲標準頂點和片段着色器)。其次,您需要了解頂點和片段着色器如何工作以及如何使用它們繪製東西,請參閱shadertoy。

只要注意到用戶最後的評論,如果你有一個表示圖像的字節數組,那麼你可以製作一個MTLTexture並將其渲染到屏幕上,請參閱上面的Apple示例,但將計算着色器更改爲標準頂點和片段着色器以獲得更快的性能。

+0

謝謝你的回覆!這會比使用CoreGraphics更快嗎?假設我正在重繪每秒60次的位圖,並且它非常大並且也用於全屏。否則,我不需要採取這個更復雜的路徑。 – user148013

+0

是的,它在安裝時會比CoreGraphics更快,您可以使用Metal在大約1-3毫秒內渲染1080p紋理,因此它可以輕鬆運行在60fps,但是否是要走的方式取決於多種因素,主要關心你正在繪製什麼,你如何繪製它,如何快速地爲GPU準備(MTLTexture),或者你是否想使用着色器繪製(這可能非常笨拙),在後一種情況下,你基本上有xy座標和所有的繪圖必須是純數學,沒有方便的功能,你會發現在CoreGraphics。 – Gary

+0

我不會,也不會使用任何庫來渲染我的東西到位圖中。 – user148013