0

背景: 我正在 Cocoa 中构建一个屏幕保护程序,其中一些 C 代码正在生成一个表示幅度的二维值数组(介于 0 和 1 之间)。然后我想在屏幕上将其显示为网格,其中单元格的颜色代表数组中的值。

我开始使用 NSBezierPath 的循环,它太慢了。然后我转到 Rect List,它更快,但仍然太慢。现在我正在考虑 nsbitmapimagerep 或迁移到 OpenGL(我相信这会更快)。

问题: 因此,我的问题是,在可可中使用 opengl 绘制二维正方形数组(通常为 200x200)的最佳方法是什么,其中位置是固定的,但颜色会发生变化(希望每秒最多 30 次)?

到目前为止的尝试:我想我会想要使用 glDrawArrays 或类似的东西而不是循环 glQUAD?或者可能移动到顶点缓冲区对象(我目前正在阅读)?

4

1 回答 1

1

使用 OpenGL,您只需将 2D 数组定义为纹理。然后,您可以使用简单的四边形绘制将该纹理绘制到屏幕上。

为了获得最佳性能,建议保留 2 个纹理。1 个纹理是您正在显示的纹理,另一个纹理是您正在更新的纹理。完成更新后,将它们交换。这可能会有所帮助,因为您的大减速将是通过 PCIe 总线将纹理数据从主内存复制到图形内存。显然,尽可能节省内存将提高传输速度。使用调色板将带来巨大的胜利,因为您将上传一小部分数据......

于 2012-04-16T12:02:46.750 回答