利用D3D抓取GPU数据
microsoft 提供的D3D SDK是用来进行3D建模和利用GPU运算的一组接口的集合,
D3D SDK至少有两个优点:
1、提供了一种3D建模的构架,程序员可以很容易的用这种构架来建模自己的3D模型
2、提供了一种GPU和CPU并行运算的解决方案,,为提供应用程序的性能提供了一种思路
这些对于D3D 程序员应该并不陌生,具体可以参见Direct 3D SDK文档。
这篇文章主要想讲一个在D3D编程中经常遇到的一个问题,从GPU中把数据取出,存入本地磁盘中。这个功能的应用也应该比较常见,例如保存游戏录像视频等。实现GPU to CPU拷贝的D3D 方法还是比较多的,但对于视频转存来说,能达到实时转存效果才有真正的利用价值。
这里首先简要介绍一下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)的时候,非常缓慢,基本无法实现实时转存的要求。
那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();
利用D3D抓取GPU数据相关推荐
- matlab抓取网页信息,如何利用Matlab抓取网页数据
如何利用Matlab抓取网页数据 2019-01-01 %朋友需要做金融方面的分析,要求从网站上下载大量的数据,一个一个复制粘贴太费事.我写了一个简单的网络爬虫,主要用到正则表达式,可以自动下载网页源 ...
- PHP利用正则表达式抓取页面数据
PHP利用正则表达式抓取页面数据 (记录一下,00后程序员第一天写博客,2021/4/1) (抓取招头标网站中的数据) <?php header('Content-Type:text/html; ...
- 利用Fiddler抓取APP数据
利用Fiddler抓取APP数据 简杨君 关注 2016.11.03 18:51* 字数 368 阅读 762评论 0喜欢 2 软件:Fiddler 系统:Windows10 手机:MX4 PRO F ...
- 利用D3D抓取显存数据
如何抓取显存的数据呢?在linux下直接通过FB就好,但是在windows下面不是那么好搞的? 这里看到了一些方法,还没有经过验证. microsoft 提供的D3D SDK是用来进行3D建模和利用G ...
- 抓取html 中文乱码,利用代码抓取网页数据,出现中文乱码问题
嗯,多谢你解答.试验了,出现了另外一种乱码,自己又再次琢磨了http://club.excelhome.net/thread-893760-1-1.html这个帖子的第一帖,问题解决了,原因是'因为X ...
- 利用Java抓取网页数据
// // MJViewController.m#import "MJViewController.h"@interface MJViewController ()@end@imp ...
- 如何利用Fiddler抓取websocket数据包?
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指cookie,html,j ...
- python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法
1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...
- pythonallowpos_利用Python抓取并分析京东商品评论数据
2.1 内容简介 本章主要介绍如何利用Python抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色等颜色, 70B到90D ...
最新文章
- Linux -- free 命令 内存适用状态监控
- .NET 2.0 CER学习笔记
- sqlserver、oracle数据库排序空值null问题解决办法
- 一二三系列之状压DP——Max Correct Set(一)Neko Rules the Catniverse (Large Version)(二)Make It Ascending(三)
- 制作MACOSX10.10.3/10.9安装启动盘U盘的教程
- mysql insert id的参数_Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
- html5游戏面试题,关于HTML5的十大面试题
- (转)SQL Server 监控统计阻塞脚本信息
- 中科院分区基础版和升级版究竟有何区别?
- 台式计算机驱动程序未被安装,Win10提示该设备的驱动程序未被安装。(代码28)
- 通过网页获取图片操作步骤
- 八叉网的神奇明链外链技术
- 中科院计算机学院考研真题,2021年862计算机学科中国科学院大学考研真题及详解...
- **蒙特卡洛计算定积分VC++**
- 怎么用u盘重装系统?石大师u盘重装win10系统步骤
- Python写网络爬虫(三)
- android recyclerView Binary XML file line #7: Error inflating class android.support.v7.widget.Recycl
- 古人对梦的解释_中国古代对梦的解释-精选文档
- 信息技术 安全技术 信息安全管理体系 要求
- 1.3T计算机学科视频教程