Opengl 视频的GPU内存分配

Opengl 视频的GPU内存分配,opengl,directx,cuda,gpu,Opengl,Directx,Cuda,Gpu,是否可以在没有cuda的情况下在GPU上分配一些内存 我正在添加更多的细节。。。 我需要得到视频帧解码从VLC和有一些合成功能的视频;我使用新的SDL渲染功能来实现这一点。 一切正常,直到我必须发送解码数据到sdl纹理。。。这部分代码由标准malloc处理,对于视频操作来说速度很慢 现在我甚至不确定使用gpu视频是否真的能帮助我你可以通过或来实现这一点。这些在精神上与CUDA相似。是的,的确如此。您可以通过OpenGL纹理在GPU中分配内存。只能通过图形框架间接分配内存。 您可以使用OpenGL

是否可以在没有cuda的情况下在GPU上分配一些内存

我正在添加更多的细节。。。 我需要得到视频帧解码从VLC和有一些合成功能的视频;我使用新的SDL渲染功能来实现这一点。 一切正常,直到我必须发送解码数据到sdl纹理。。。这部分代码由标准malloc处理,对于视频操作来说速度很慢


现在我甚至不确定使用gpu视频是否真的能帮助我

你可以通过或来实现这一点。这些在精神上与CUDA相似。

是的,的确如此。您可以通过OpenGL纹理在GPU中分配内存。

只能通过图形框架间接分配内存。 您可以使用OpenGL,这几乎是每台计算机都支持的

可以使用顶点缓冲区来存储数据。顶点缓冲区通常用于存储渲染点,但您可以轻松使用它存储任何类型的数组。与纹理不同,它们的容量仅受可用图形内存量的限制


有一个很好的关于如何读写数据到顶点缓冲区的教程,你可以忽略关于绘制顶点缓冲区的所有内容。

让我们澄清一下:你是在尝试完成实时视频处理吗?因为你最近的更新极大地改变了这个问题,我添加了另一个答案

你正在经历的“缓慢”可能是由几个原因造成的。为了获得“实时”效果(在感知意义上),您必须能够处理帧并以33毫秒的速度显示它(大约,对于30帧/秒的视频)。这意味着您必须解码帧,在其上运行合成功能(如您所调用),并在此时间范围内将其显示在屏幕上

如果合成函数太CPU密集型,那么你可以考虑编写一个GPU程序来加速这个任务。但是您应该做的第一件事是确定应用程序的瓶颈在哪里。您可以立即剥离应用程序,让它解码帧并将其显示在屏幕上(不要执行合成功能),只是为了看看它是如何运行的。如果速度慢,那么解码过程可能会占用太多的CPU/RAM资源(可能是您这边的错误?)


我曾经在一个类似的项目中使用过FFMPEG和SDL,我对结果非常满意。演示如何使用这两个库制作基本的视频播放器。基本上,它打开一个视频文件,对帧进行解码并将其渲染到一个表面上进行显示。

这改变了一切。