文号
t30075
阅读
13051
回复
13
收藏
6
高手来。Win编程怎样可以访问显存。
2010/10/28
IP:湖北
先解决我的疑惑,早期的显示器画面是怎样显示出来的?不要回答CRT工作原理。我想知道从前的保留内存里那部分显存的工作情况。那时有必要出现“显卡”吗?

再解决我的疑惑,显卡的概念是怎样从主板中独立出来的?即使目前有板载显卡一说,也仍然继承了“显卡”概念。

还解决我的疑惑,3D图形加速卡出现之前的显卡有啥特别之处?

最后解决我的疑惑,目前的显存有独立显卡自带显存,和主机内存里 抠出一部分做显存。二者可以通过Win编程访问吗?二者在CPU可寻址的内存地址空间里吗?
来自:
软件综合
13
dctyu作者
16年2个月前IP:未同步
263559
3楼
以前玩过directdraw ,做了一个800X600全画面,帧率奇慢。
简直怀疑directdraw 的缓冲区概念如下
在内存缓冲区里做好了一帧画面,然后通过总线把整幅画面从内存“硬”拷贝到显存上。然后再输出。中间的拷贝多此一举。

我能否直接在显存里写内容,即时表现到屏幕。
引用
评论
dctyu作者
16年2个月前IP:未同步
263564
4楼
帧率奇慢的原因还有一个猜测:
既然有标准函数库就应该调用标准函数库。标准函数的实现是通过驱动程序直接与显卡“沟通”的。标准函数是调用显卡程序并在显卡上运行。

如果是自己逐点写显存反而慢。
引用
评论
dctyu作者
16年2个月前IP:未同步
263654
10楼
引用第6楼小俊于2010-10-29 09:42发表的  :
先查得显卡的PCI bus ID和Device ID,获得其BAR地址。BAR1即为frame buffer所在。然后通过设备驱动程序的方法映射到线性地址后即可访问。

顺便讲一句,DDraw和D3D都是直接绘图到显存,不存在先画到主存的问题。


谢谢。这也就是说,独立显卡上的自带显存也是在CPU寻址空间里的。通过DDraw,Win内核先得到显存的实际地址,然后映射为虚拟地址。最后用户程序向指定虚拟地址里写内容便是直接写到了显存。
引用
评论
dctyu作者
16年2个月前IP:未同步
263658
11楼
再问,DDraw程序写显存以后就进入换页,便在屏幕上呈现出来了。
同样是写显存,有通过D3D直接改变显存里的纹理贴图的办法没?
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的