2012-04-16 77 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总线将纹理数据从主内存复制到图形内存。显然,可以将内存储存在可以增加此传输速度的位置。使用调色板将提供一个巨大的胜利,因为您会上传一小部分数据...