【发布时间】:2013-06-17 10:43:06
【问题描述】:
我正在编写一个程序来绘制一些应该模仿输入(光栅)图像的多边形。绘制形状后,我需要将渲染图像与输入图像进行比较,然后决定是否达到目标。目前我正在使用 CIMG 库进行绘制。整个程序在 CPU 上运行。我尝试使用使用 OpenGL 进行绘图的 SFML - 渲染速度非常快,但是将图像从 GPU 复制到 CPU(与输入图像进行匹配)需要很长时间。 我想:
- 在 GPU 上渲染多边形
- 将输入(光栅)图像发送到 GPU
- 使用简单的“逐个像素”比较在 GPU 上比较图像: (r1-r2)^2+(g1-g2)^2+(b1-b2)^2
- 发送比较结果(一个数字) 到 CPU
不幸的是,我不知道它(比较两个图像)是否可以通过 OpenGL 实现。如果可能的话,我将学习 OpenGL 或任何其他可以快速完成任务的库。
【问题讨论】:
-
您可以使用 GPGPU 风格的编程在 OpenGL 中完成。在您的情况下,可能是一个片段着色器来比较单个像素值,然后另一个着色器通过来计算最大差异。但这听起来不像是合理的解决方案。确实可以从 GPU 到 CPU 检索图像的像素完美副本。您原来的 GPU->CPU 复制代码一定是错误的。我会努力修复它,而不是在 GPU 端编写比较代码。
-
从 GPU 复制到 CPU 效果很好,但我需要很长时间,我重复此操作数千次,因此加快此操作对我来说很重要。
-
我明白了。目前还不太清楚“摧毁一切”是什么意思。在这种情况下,您可以尝试使用片段着色器方法。
-
顺便说一句,输出是什么?差异的总和?
-
对不起,你是对的——我可以写得更清楚。是的,应该从比较中输出差异总和。
标签: c++ performance opengl graphics