是否可以学习OpenGL上下文的分配内存范围?据推测,应该使用来自另一个进程的mmap()访问此内存范围。这项技术可以运作,还是有根本问题呢?
更新我们正在使用具有现代X11安装的GNU / Linux系统,并且可以选择其驱动程序支持此类技巧的视频卡制造商。
答案 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存储器范围,这几乎与点击帧缓冲设备相同。