gpt4 book ai didi

c++ - 将可见帧缓冲区读取到像素缓冲区对象

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:13 24 4
gpt4 key购买 nike

我正在 try catch 屏幕截图并对它们进行一些操作。我的目标是尽可能少地使用 CPU 并利用 GPU,所以我想使用 CUDA 来进行图像处理。

截至目前,我正在使用 Windows API(StretchBlt 和 GetDIBits)将帧缓冲区复制到 RAM,并使用 cudaMemcpy 将其复制到 VRAM。

这些内存拷贝使用 CPU,当每秒复制许多帧时,它会占用大量 CPU。这就是为什么我想将帧缓冲区直接复制到 VRAM 以供 CUDA 使用。

我找到了一种使用 OpenGL PBO 的技术,如下所述:http://gravisma.zcu.cz/GraVisMa-2010/Papers/Poster/F13-full.pdf听起来这可能是实现它的方法。

有这样的例子吗?

编辑:

我还发现了这个:http://www.songho.ca/opengl/gl_pbo.html .它说:

"The main advantage of PBO is fast pixel data transfer to and from a graphics card through DMA (Direct Memory Access) without involing CPU cycles. And, the other advantage of PBO is asynchronous DMA transfer."

所以看起来 PBO 确实是正确的方向,但我还是不确定该怎么做。

能否请您举例说明源代码?

平台:Windows XP(仅限 win32)

最佳答案

如果您需要在 CUDA 中处理屏幕截图,为什么不使用 OpenGL 互操作?这使您可以将纹理/缓冲区作为图像读取。这样所有数据都保留在 GPU 上,而 CPU 永远不会被使用。

稍后,您可以将纹理映射到 CPU 内存/固定内存并将其保存到文件中(因为您需要屏幕截图)。传输将发生,因为 DMA 和 CPU 也不涉及。

关于c++ - 将可见帧缓冲区读取到像素缓冲区对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com