cocoa 和OpenGL : fastest way to draw array of rectangles

标签 cocoa opengl graphics drawing

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

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

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

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

最佳答案

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

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

关于 cocoa 和OpenGL : fastest way to draw array of rectangles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172973/

相关文章:

objective-c - Mac App Store 应用程序中的 libcrypto/OpenSSL 出现问题

xcode - Interface Builder 中带有自动 NSNumberFormatter 的 NSTextField

xcode - glColor3i 只绘制黑色

c++ - openGL视频显示

cocoa - 检测 NSTextfield 中的文本是否是字典单词 Cocoa

cocoa - NSManagedObject 未保存——谨防反向关系

windows - OpenGL 软件渲染替代方案

opengl - 基于物理的着色器未产生预期结果

linux - Linux 桌面应用程序可以用作 Linux 桌面吗?

c# - 在 C# 中将图形转换为图像