我正在PC上开发AR(增强现实),我有摄像头捕获,检测到某些标记功能,并将内存转储到GPU以渲染图像上的虚拟对象。我使用Ogre引擎。
/** Convenience function that blits a pixelbox from memory to the entire
buffer. The source image is scaled as needed.
@param src PixelBox containing the source pixels and format in memory
@note Only call this function when the buffer is unlocked.
*/
mTexture->getBuffer()->blitFromMemory(mPixelBox);
对于720P图像输入,大约需要100ms,这对于渲染是不希望的。我有一个i5-4460 @ 3.20GHz,16G内存和Geforce GTX 660卡。
我知道CPU和GPU内存之间存在差距,但如果我只显示带有amcap的720P视频输入,只需30fps。是什么东西出现在屏幕渲染GPU?如何知道CPU和GPU内存的速度?
答案 0 :(得分:0)
为了有效地做到这一点,你真的需要能够容忍几帧延迟。
在100毫秒时,当以30 FPS绘制时,这实际上是2个额外帧。这种行为可以通过驾驶员提前排队多个帧来解释。
称为预渲染帧(NVIDIA)/翻转队列大小(AMD)的驱动程序设置将增加CPU和GPU之间传输的任何数据的延迟。 3是AMD驱动程序的默认设置,目前尚不清楚NVIDIA的默认设置是什么(但您正在讨论的数字表明它也是3)。尝试将其设置为1,这将限制CPU / GPU并行性(可能降低帧速率),但会为您提供尽可能低的延迟。
有一个原因,司机不会将此设置发送到1,这让我回到原点。尝试接受几帧延迟,一切都会顺利运行 - 你很可能没有遇到I / O传输限制,只是并行问题。