使用知道OpenGL上下文和可视ID的mmap()访问视频RAM

时间:2012-01-03 16:08:22

标签: opengl video mmap

是否可以学习OpenGL上下文的分配内存范围?据推测,应该使用来自另一个进程的mmap()访问此内存范围。这项技术可以运作,还是有根本问题呢?

更新我们正在使用具有现代X11安装的GNU / Linux系统,并且可以选择其驱动程序支持此类技巧的视频卡制造商。

3 个答案:

答案 0 :(得分:3)

嗯,有无数的原因导致它不起作用。

首先,“分配的OpenGL上下文的内存范围”总是更改。 OpenGL上下文分配新内存并在其决定时解除分配。

其次,我不相信OpenGL驱动程序能够在这样的内存映射条件下生存。多个OpenGL上下文可以共存,但仅仅因为它们彼此都知道,因此驱动程序可以对它们进行补偿。上下文极不可能吸收另一个上下文所做的更改。

第三,GPU经常使用图形内存。即使您可以在GPU内存上使用mmap(这本身不太可能),但是当您这样做时,可能会失去很多性能。 GPU内存比CPU内存大得多。

您似乎正在尝试执行基于IPC的图形。您最好的选择是让图形系统成为您自己通过IPC方法进行通信的过程,而不是尝试通过IPC与OpenGL交谈。

答案 1 :(得分:0)

取决于操作系统和驱动程序。这可能是X-server。虽然X服务器,显示驱动程序和openGL的组合意味着它可以在绘制时移动卡上特定对象的内存。

更简单的方法可能是使用openGL pixel/vertex buffer并获取缓冲区指针

答案 2 :(得分:0)

  

是否可以学习OpenGL上下文的已分配内存范围?

我认为你要求访问OpenGL上下文保存其对象和渲染输出的内存。

没有。 OpenGL上下文是一个抽象结构,它的内存位于完全不同的机器和/或体系结构上。

除此之外,OpenGL上下文的内容没有标准甚至公共内存布局。如果你只对渲染结果感兴趣,你可以点击帧缓冲设备(/dev/fb…),虽然性能不如用glReadPixels读回帧缓冲内容。类似于点击PCI存储器范围,这几乎与点击帧缓冲设备相同。