Cocoa和OpenGL:绘制矩形阵列的最快方法
背景: 我正在Cocoa中构建一个屏幕保护程序,其中一些C代码生成一个表示振幅的2d值数组(介于0和1之间)。然后我想在屏幕上以网格的形式显示它,单元格的颜色表示数组中的值 我开始使用一个带有NSBezierPath的循环,它太慢了。然后我转到Rect列表,它更快,但仍然太慢。现在,我正在考虑nsbitmapimagerep或迁移到OpenGL(我相信这会更快) 问题: 因此,我的问题是,在cocoa中使用opengl绘制二维正方形阵列(通常为200x200)的最佳方法是什么,其中位置是固定的,但颜色会发生变化(希望达到每秒30次)Cocoa和OpenGL:绘制矩形阵列的最快方法,cocoa,opengl,graphics,drawing,Cocoa,Opengl,Graphics,Drawing,背景: 我正在Cocoa中构建一个屏幕保护程序,其中一些C代码生成一个表示振幅的2d值数组(介于0和1之间)。然后我想在屏幕上以网格的形式显示它,单元格的颜色表示数组中的值 我开始使用一个带有NSBezierPath的循环,它太慢了。然后我转到Rect列表,它更快,但仍然太慢。现在,我正在考虑nsbitmapimagerep或迁移到OpenGL(我相信这会更快) 问题: 因此,我的问题是,在cocoa中使用opengl绘制二维正方形阵列(通常为200x200)的最佳方法是什么,其中位置是固定的,
目前为止的尝试:我想我会想使用gldrawArray或类似的东西,而不是循环使用glQUAD?或者可能移动到顶点缓冲区对象(我目前正在阅读该对象)使用OpenGL,您只需将2D数组定义为纹理即可。然后,可以使用简单的四边形绘制将该纹理绘制到屏幕上
为获得最佳性能,建议保留2个纹理。1个纹理是您正在显示的纹理,另一个纹理是您正在更新的纹理。完成更新后,将其交换。这可能会有所帮助,因为通过PCIe总线将纹理数据从主内存复制到图形内存将大大降低速度。显然,尽可能节省内存将提高传输速度。使用调色板将带来巨大的成功,因为您将上传一小部分数据…没有“最佳方法”。有许多可能的方法可以做到这一点,每种方法都有各自的优缺点。请假设“最佳”是最有效的。很抱歉让这个说法模糊不清。“最好”的意思是“最快,但仍然是为了易于实现,只要我能在1/30秒内画出100000平方米,我会非常高兴”。