直接视频缓冲区访问

4
当涉及使用显卡在屏幕上渲染时,如果我理解正确,只有三个选项可用。这些是:
1. DirectX(或XNA) 2. OpenGL 3. Windows Driver Kit和创建最小实现的图形驱动程序
我对DirectX或OpenGL的经验非常少,但据我所知,您必须编写像素着色器程序,告诉渲染流水线如何处理每个像素。这些着色器是用HLSL编程的。但据我所知,无论是DirectX还是OpenGL都不能返回指向内存的指针,我可以从我的C#程序中将一些byte[]缓冲区写入其中并得到渲染。或者我在这里弄错了吗?
WDK可能是更好的选择,因为可以实现绝对最小的图形驱动程序实现,该实现什么也不做,只返回指向内存的指针,我可以在其中写入RGB数据。因此,在一方面,我可以摆脱DirectX或OpenGL提供的所有抽象(我不需要),但是在另一方面,驱动程序开发的复杂性并不是一个时间节省者。
此外,在搜索更多信息时,我发现在DOS的早期,有一个类似于0B00的地址,允许开发人员直接绘制到屏幕缓冲区。它已经消失了,我想不再可用,但是出于兼容性原因,我已经阅读了这些内存空间仍然被保留。是否可能以某种方式利用它?
从C#获取访问视频内存的最简单方法是什么,以便我可以直接写入屏幕?DirectX或OpenGL是否提供此类功能,使我能够直接复制和渲染字节数组到某个地方

你是想在屏幕上进行绘制还是从屏幕上进行捕获? - Aesthete
我正在尝试在屏幕上绘制,只需要写入访问权限,我根本不需要读取屏幕内存中的实际数据。 - user1540509
1
你最好到http://gamedev.stackexchange.com上询问,因为那里可能会有更多了解这种东西的人。 - jcoder
@JohnB 谢谢,我会尝试在那里提问。 - user1540509
1个回答

0

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

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


我在问题中没有看到任何关于客户端/服务器网络的内容? - Aesthete
我所说的客户端内存是指程序可以访问的内存(在CPU和RAM中),而服务器端内存是指显卡上的内存。这与网络无关。 - Oskar
好的,显卡并没有在“提供”任何东西,所以这有点误导。 - Aesthete
这是一个术语。我会编辑答案以防止任何未来的混淆。感谢您的评论。 - Oskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接