Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa和OpenGL:绘制矩形阵列的最快方法_Cocoa_Opengl_Graphics_Drawing - Fatal编程技术网

Cocoa和OpenGL:绘制矩形阵列的最快方法

Cocoa和OpenGL:绘制矩形阵列的最快方法,cocoa,opengl,graphics,drawing,Cocoa,Opengl,Graphics,Drawing,背景: 我正在Cocoa中构建一个屏幕保护程序,其中一些C代码生成一个表示振幅的2d值数组(介于0和1之间)。然后我想在屏幕上以网格的形式显示它,单元格的颜色表示数组中的值 我开始使用一个带有NSBezierPath的循环,它太慢了。然后我转到Rect列表,它更快,但仍然太慢。现在,我正在考虑nsbitmapimagerep或迁移到OpenGL(我相信这会更快) 问题: 因此,我的问题是,在cocoa中使用opengl绘制二维正方形阵列(通常为200x200)的最佳方法是什么,其中位置是固定的,

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

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

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


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

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


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

没有“最佳方法”。有许多可能的方法可以做到这一点,每种方法都有各自的优缺点。请假设“最佳”是最有效的。很抱歉让这个说法模糊不清。“最好”的意思是“最快,但仍然是为了易于实现,只要我能在1/30秒内画出100000平方米,我会非常高兴”。