利用D3D抓取显存数据
来源:互联网 发布:一点通打印软件 编辑:程序博客网 时间:2024/06/05 11:28
如何抓取显存的数据呢?在linux下直接通过FB就好,但是在windows下面不是那么好搞的?
这里看到了一些方法,还没有经过验证。
microsoft 提供的D3D SDK是用来进行3D建模和利用GPU运算的一组接口的集合,
D3D SDK至少有两个优点:
1、提供了一种3D建模的构架,程序员可以很容易的用这种构架来建模自己的3D模型
2、提供了一种GPU和CPU并行运算的解决方案,,为提供应用程序的性能提供了一种思路
D3D 渲染的基本流程:
1. D3D setting states//设置渲染环境2. g_pd3dDevice->beginscene();3. D3D 管线渲染4. g_pd3dDevice->EndScene();
至此,D3D的渲染过程已经结束,渲染处理的最终数据被存于D3D surface(这是在GPU中开辟的存储区域), 下面可以根据具体的需求来对该surface进行后处理:
1 直接显示:g_pd3dDevice->present();
2 转存到本地磁盘,即GPU to CPU的copy.
这里给出比较常见的一种处理方法:
g_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackbuffer);pBackbuffer->LockRect(&Source,NULL,0);copy(Dest,Source);pBackbuffer->UnLock();这种方法缺点很严重,就是由于IPtrD3dsurface lock的内存是位于显卡中,这样在做copy(Dest,Source)的时候,非常缓慢,基本无法实现实时转存的要求。
这个方法本人试过了差不多一张1080P的需要使用50ms以上,这个速度超级慢
那microsoft有没有提供更好的解决方案呢?
这个微软利用了另外的方式做的
代码如下:
g_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackbuffer);g_pd3dDevice->CreateOffscreenPlainSurface(d3dpp.BackBufferWidth,d3dpp.BackBufferHeight,d3dpp.BackBufferFormat,D3DPOOL_SYSMEM,&g_p2DSurface,NULL);g_pd3dDevice->GetRenderTargetData(pBackbuffer, g_p2DSurface);g_p2DSurface->LockRect(&Source,NULL,0);copy(Dest,Source);g_p2DSurface->UnLock();
backbuffer的位置如下:
这个方法貌似不错,但是具体我还没有实现,有会的朋友欢迎拍砖。
0 0
- 利用D3D抓取显存数据
- 利用D3D抓取GPU数据
- 利用D3D抓取GPU数据
- 利用D3D抓取GPU数据
- D3D中的AGP内存、系统内存、显存
- 利用WebClient进行数据抓取
- 利用WebClient进行数据抓取
- 利用Java抓取网页数据
- 利用bs模块抓取数据
- 利用Jsoup抓取网络数据
- 利用Fiddler抓取APP数据
- 操作显存数据(1601)
- D3D中的AGP内存、系统内存、显存的理解
- D3D中的AGP内存、系统内存、显存的理解
- D3D中的AGP内存、系统内存、显存的理解
- keras系列︱利用fit_generator最小化显存占用比率/数据Batch化
- 对D3D中AGP显存、内存、显存三种内存的解释
- 关于D3D中AGP显存,内存,显存三种内存的解释
- leetcode oj java 49. Group Anagrams
- 【cocos2dx 3.3 lua】06 抽奖转盘效果
- nodejs为其他模块添加EventEmitter
- win7下安装金典指纹机服务的步骤
- springmvc配置文件配置说明
- 利用D3D抓取显存数据
- MySQL 小结(二)
- PAT乙级1061
- opencv学习(二十二)之双边滤波bilateralFilter
- 样式脚本本地化开发方法①【前端开发技巧】
- easyui-datagrid获取行和列数据
- deskclock
- HDU 1024 MAX SUM PLUS PLUS
- Windows平台下新版blast(2.2.24+)本地化构建+数据库下载+序列间的相似性检索