2012-04-16 50 views
0

背景: 我正在Coco中構建一個屏幕保護程序,其中一些C代碼正在生成代表振幅的二維數組值(0和1之間)。然後我想在屏幕上以網格的形式顯示它,其中單元格的顏色代表數組中的值。可可和OpenGL:繪製矩形陣列的最快方法

我開始使用NSBezierPath的循環太慢了。然後我轉到了Rect List,它速度更快,但仍然太慢。現在我正在考慮nsbitmapimagerep或移動到OpenGL(我相信會更快)。

問題: 我的問題因此,什麼是使用的OpenGL在可可繪製,其中位置是固定的正方形(典型地200×200)的2-d陣列的最佳方式,但顏色改變(希望最多30次/秒)?

嘗試到目前爲止:我想我會想要使用glDrawArrays或類似的東西,而不是循環的glQUAD?或者,也許移動到一個頂點緩衝區對象(我正在閱讀)?

+0

沒有「最佳方式」。有很多可能的方式來做到這一點,並且各有其優點和缺點。 – 2012-04-16 11:15:56

+0

假設最好是最有效的。 – jrtc27 2012-04-16 11:24:56

+0

對不起,離開那個模糊。 「最好」的意思是「最快的,但仍然以實現的方便爲目的,假如我能在1/30秒內抽取100000個方位,我將非常高興」。 – 2012-04-16 11:31:34

回答

1

使用OpenGL,您只需將您的二維數組定義爲紋理。然後,您可以使用簡單的四邊形繪製將該紋理繪製到屏幕上。

爲了獲得最佳性能,建議保持2個紋理。 1紋理是您正在顯示的紋理,另一個紋理是您正在更新的紋理。完成更新後,將它們交換。這可能會有所幫助,因爲您的大幅減速將通過PCIe總線將紋理數據從主內存複製到圖形內存。顯然,可以將內存儲存在可以增加此傳輸速度的位置。使用調色板將提供一個巨大的勝利,因爲您會上傳一小部分數據...