两部分问题:
我正在开展一个学校项目,使用生命游戏作为试验 gpgpu 的工具。我正在使用 OpenCL 和 OpenGL 进行实时可视化,目标是让这个东西尽可能大和快。在分析后,我发现帧时间由 CL 获取和释放 GL 缓冲区控制,并且时间成本与缓冲区的实际大小成正比。
1)这是正常的吗?为什么会这样?据我所知,缓冲区永远不会离开设备内存,而 CL Acquire/Release 就像互斥锁一样。OpenCL 会单独锁定/解锁每个字节还是什么?
为了解决这个问题,我已经从 24 位 RGBA 颜色模式(据我了解是 OpenGL 的首选颜色模式?)缩小到 8 位 RGB 颜色。这导致了显着的加速,但是在调整我的内核之后,传输时间再次占主导地位。
在没有关于如何完全消除传输时间的任何想法(没有将我的内核从 OpenCL 移植到 GLSL,这将超出项目的原始范围),我现在认为我最好的选择是写入位图(与我当前使用的 8 位像素图相反),然后使用带有颜色索引的位图来纹理四边形。
2) 我可以直接使用位图对四边形进行纹理处理吗?我考虑过使用 glBitmap 绘制到辅助缓冲区,然后使用这个缓冲区来纹理我的四边形,但如果有可用的路线,我更愿意使用更直接的路线。