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

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

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

最后解决我的疑惑,目前的显存有独立显卡自带显存,和主机内存里 抠出一部分做显存。二者可以通过Win编程访问吗?二者在CPU可寻址的内存地址空间里吗?
来自:计算机科学 / 软件综合
13
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
花落一天
14年3个月前 IP:未同步
263543
1&2.根据不知道谁谁谁说的计算鸡原理里面,本来就是输入控制运算储存输出,最开始的是貌似是纸带,后来貌似就渐渐发展出屏幕了,所以那个本来就是功能之一应该是没有显存这个概念的,后来是因为计算鸡模块化设计了,所以显示部分就自动脱离出来了........类似CPU一块,内存一块这样的.
3.没啥特别之处,就是负责显示功能,当然那个时候的低通做工和用料是相当YY的,之所以出现3D卡(当年还有2D卡+3D卡两个单独售卖的时代,参见Voodoo时代的显卡),是因为最初的3D运算是CPU负责的,越来越高的需求让CPU吃不消了,所以就出现了3D卡来分担图形这块的工作
4.不懂
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
adeng2002
14年3个月前 IP:未同步
263553
使用驱动程序开发工具,如WinDriver,例程中就有操作显存的。
或者以前的directdraw
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dctyu作者
14年3个月前 IP:未同步
263559
以前玩过directdraw ,做了一个800X600全画面,帧率奇慢。
简直怀疑directdraw 的缓冲区概念如下
在内存缓冲区里做好了一帧画面,然后通过总线把整幅画面从内存“硬”拷贝到显存上。然后再输出。中间的拷贝多此一举。

我能否直接在显存里写内容,即时表现到屏幕。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dctyu作者
14年3个月前 IP:未同步
263564
帧率奇慢的原因还有一个猜测:
既然有标准函数库就应该调用标准函数库。标准函数的实现是通过驱动程序直接与显卡“沟通”的。标准函数是调用显卡程序并在显卡上运行。

如果是自己逐点写显存反而慢。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
我说要有光
14年3个月前 IP:未同步
263579
使用WinIO可以访问物理内存,我没做过显卡方面的开发,但是直觉上认为应该可以

XXXXXXXXXXXXXXXXXXXXXXXX/utilities_XXXXXXXm
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
14年3个月前 IP:未同步
263592
先查得显卡的PCI bus ID和Device ID,获得其BAR地址。BAR1即为frame buffer所在。然后通过设备驱动程序的方法映射到线性地址后即可访问。

顺便讲一句,DDraw和D3D都是直接绘图到显存,不存在先画到主存的问题。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
アストレア
14年3个月前 IP:未同步
263606
但是有些老式游戏运用在新计算机结构上仍然会做这样的“蠢事”
比如将纹理先用CPU计算好后在送到显卡去这类的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
14年3个月前 IP:未同步
263609
引用第7楼アストレア于2010-10-29 13:11发表的  :
但是有些老式游戏运用在新计算机结构上仍然会做这样的“蠢事”
比如将纹理先用CPU计算好后在送到显卡去这类的。


纹理肯定都是一开始从CPU端传过去的。
GPU使用纹理时直接从显存读。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
我说要有光
14年3个月前 IP:未同步
263627
很久以前显示系统应该是仅仅以字符传递信息的,现在做51单片机开发的话 在C里面用stdio.h的时候  仍然是串口字符输出
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dctyu作者
14年3个月前 IP:未同步
263654
引用第6楼小俊于2010-10-29 09:42发表的  :
先查得显卡的PCI bus ID和Device ID,获得其BAR地址。BAR1即为frame buffer所在。然后通过设备驱动程序的方法映射到线性地址后即可访问。

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


谢谢。这也就是说,独立显卡上的自带显存也是在CPU寻址空间里的。通过DDraw,Win内核先得到显存的实际地址,然后映射为虚拟地址。最后用户程序向指定虚拟地址里写内容便是直接写到了显存。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dctyu作者
14年3个月前 IP:未同步
263658
再问,DDraw程序写显存以后就进入换页,便在屏幕上呈现出来了。
同样是写显存,有通过D3D直接改变显存里的纹理贴图的办法没?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
14年3个月前 IP:未同步
263664
引用第10楼dctyu于2010-10-29 21:28发表的  :

谢谢。这也就是说,独立显卡上的自带显存也是在CPU寻址空间里的。通过DDraw,Win内核先得到显存的实际地址,然后映射为虚拟地址。最后用户程序向指定虚拟地址里写内容便是直接写到了显存。


不是通过DDraw。肯定是显卡驱程做的。DX只是调用显卡驱程。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小俊
14年3个月前 IP:未同步
263665
引用第11楼dctyu于2010-10-29 21:40发表的  :
再问,DDraw程序写显存以后就进入换页,便在屏幕上呈现出来了。
同样是写显存,有通过D3D直接改变显存里的纹理贴图的办法没?


按照常规途径(显卡驱动程序或DX、OpenGL等API),主机端无法直接修改显存上的东西(只能以纹理方式互相拷贝)。GPU可以直接访问显存,所以,可以由主机端发起执行一段shader代码来实现。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
dctyu
学者 笔友
文章
142
回复
2230
学术分
2
2009/02/21注册,6年11个月前活动

小时被老师欺负。老师用“世上有没有两片一模一样的树叶?”欺负我。因为我是耳闻过全同粒子的,并且知道树叶是一个比喻,所以选择"有两片一模一样的树叶",不料被全班BS一盘。当时我真傻,干嘛不好好教育一下在场的每个人呢。明明是老子懂得比老师多。

主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}