直接视频缓冲区访问

时间:2012-08-06 12:13:10

标签: c# opengl directx video-memory

当我使用视频卡在屏幕上渲染内容时,如果我理解正确的话,只有三个选项可用。这些是

  1. DirectX(或XNA)
  2. 的OpenGL
  3. Windows驱动程序工具包并创建最少的图形驱动程序实现
  4. 我对DirectX或OpenGL的经验很少,但据我所知,你必须编写一个像素着色器程序,告诉渲染管道如何处理每个像素。这些着色器在HLSL中编程。但据我所知,DirectX和OpenGL都无法返回指向内存的指针,我可以从我的C#程序中编写一些byte[]缓冲区并将其渲染。或者我错了?

    WDK可能是一个更好的选择,因为它可以实现绝对最少的图形驱动程序实现,它只会返回指向我可以写入RGB数据的内存的指针。所以一方面我可以摆脱DirectX或OpenGL提供的所有抽象(我不需要),但是在驱动程序开发的另一个复杂性上并不是节省时间。

    另外,根据我在搜索更多相关信息时发现的信息,在DOS的旧时代,有一个地址0B00或类似的地方,允许开发人员直接绘制到屏幕缓冲区。它已经消失了,我想不再可用了,但我已经阅读了兼容性原因这个内存空间仍然保留。有可能以某种方式利用它吗?

    从C#访问视频内存的最简单方法是什么,以便我可以直接在屏幕上书写? DirectX或OpenGL是否提供了这样的功能,这使我能够直接复制某处的字节数组并将其呈现?

1 个答案:

答案 0 :(得分:0)

通过使用OpenGL或Direct3D的内置纹理渲染功能,您可以将像素数据从客户端内存复制到服务器端内存,然后让它在屏幕上渲染纹理。

注意:对于客户端内存,我指的是程序可访问的内存(在CPU和RAM中),而服务器端内存则指的是显卡上的内存。这与网络无关