CN101211258B - 完整获取GDI和DirectX数据的方法 - Google Patents

完整获取GDI和DirectX数据的方法 Download PDF

Info

Publication number
CN101211258B
CN101211258B CN200610169757A CN200610169757A CN101211258B CN 101211258 B CN101211258 B CN 101211258B CN 200610169757 A CN200610169757 A CN 200610169757A CN 200610169757 A CN200610169757 A CN 200610169757A CN 101211258 B CN101211258 B CN 101211258B
Authority
CN
China
Prior art keywords
directx
data
intercepting
directdraw
capturing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN200610169757A
Other languages
English (en)
Other versions
CN101211258A (zh
Inventor
李洪伟
孙成昆
颜毅强
蒋晓华
彭绍平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lenovo Beijing Ltd
Original Assignee
Lenovo Beijing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lenovo Beijing Ltd filed Critical Lenovo Beijing Ltd
Priority to CN200610169757A priority Critical patent/CN101211258B/zh
Priority to DE102007061435A priority patent/DE102007061435A1/de
Priority to US11/966,610 priority patent/US8327387B2/en
Publication of CN101211258A publication Critical patent/CN101211258A/zh
Application granted granted Critical
Publication of CN101211258B publication Critical patent/CN101211258B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/003Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

公开了一种采用过滤驱动获取图形设备接口数据和DirectX数据的方法,所述过滤驱动对图形设备接口引擎和DirectX内核与真实显示驱动是透明的,所述方法包括步骤:对图形设备接口更新,在过滤驱动中通过对应的图形设备接口函数获取图形设备接口数据;对DirectX中的DirectDraw,通过截获DirectDraw部分的帧切换和位块传递操作,来获取DirectDraw应用和视频更新数据;对DirectX中的Direct3D,通过截获Direct3D部分的更新接口,来获取Direct3D应用的数据。利用本发明的方法,在保持DirectX功能可用的同时完整获取Windows GDI和DirectX数据。

Description

完整获取GDI和DirectX数据的方法
技术领域
本发明涉及计算机图形及图像处理领域,具体涉及一种在保持DirectX功能可用的同时完整获取Windows GDI和DirectX数据的方法。
背景技术
在3D和视频处理纳入计算机的常规计算能力后,在实时远程应用中出现了对GDI数据和3D、视频等DirectX数据同步截获的需求。现有获取计算机屏幕的数据的方法有如下几种:
(1)在用户态采用挂钩的方式挂接到系统存在的每个应用程序,过滤与屏幕变化有关的操作并进行处理。由于图形系统的操作数据量很大,使得这种方法的效率较低,难以快速同步获取图形输出。而且,由于挂接到每个进程,使得同步复杂。远程工具VNC的早期版本采用了这种方式。
(2)采用Windows定义的Mirror体系,可以高效获取同步变化。但是这种方法的缺点是系统自动禁止DirectX应用,无法获取DirectX数据。
(3)采用用户态截获DirectX COM接口的方式获取DirectX数据,但是这种方法又无法处理GDI数据。
(4)通过过滤驱动获取GDI数据,可以保持DirectX接口的可用性,与方法(3)配合可以完整截获GDI和DirectX数据。虽然方法(3)和(4)结合后可以截获GDI和DirectX数据,但使用烦琐,且方法3工作在DirectX COM接口上,接口复杂,对通过DirectX直接操作显存的截获很难判断。
因此,需要一种在单一平台下在保持DirectX功能可用的同时完整获取Windows GDI和DirectX数据的技术。
发明内容
鉴于上述问题,提出了本发明。本发明的目的是提供一种在保持DirectX功能可用的同时完整获取Windows GDI和DirectX数据的方法。
在本发明的一个方面,提出了一种采用过滤驱动获取图形设备接口数据和DirectX数据的方法,所述过滤驱动对图形设备接口引擎和DirectX内核与真实显示驱动是透明的,所述方法包括步骤:对图形设备接口更新,在过滤驱动中通过对应的图形设备接口函数获取图形设备接口数据;对DirectX中的DirectDraw,通过截获DirectDraw部分的帧切换和位块传递操作,来获取DirectDraw应用和视频更新数据;对DirectX中的Direct3D,通过截获Direct3D部分的更新接口,来获取Direct3D应用的数据。
优选地,该方法还包括:在获取之前以静态方式或者动态方式加载显示过滤驱动。
优选地,在显示缓冲之前,解码数据/变换缓冲之后的位置,执行对DirectX中的DirectDraw部分的截获。
优选地,在显示缓冲之前,变换缓冲之后的位置,执行对DirectX中的Direct3D部分的截获。
优选地,通过截获更新接口Flip和Blit来实现对DirectX中的DirectDraw部分的截获。
优选地,通过截获更新接口DDFlip和DDBlit来实现对DirectX中的Direct3D部分的截获。
优选地,该方法还包括:将图形设备接口的更新、DirectX中的DirectDraw的更新和DirectX中的Direct3D的更新存储在更新缓冲区中。
优选地,对图形设备接口的更新进行无损压缩,而对DirectX中的DirectDraw的更新和DirectX中的Direct3D的更新进行有损压缩。
利用本发明的方法,定义虚拟的图形过滤,该显示过滤驱动对图形系统提供了GDI和DirectX功能,并将其中涉及本地屏幕更新的接口进行截获,当截获的接口被调用时先根据是否需要本地显示调用真实驱动实现本地更新,然后将更新记录在更新表中进行后继处理。采用这种方式保留了显卡的DirectX功能,并使得系统的DirectX应用可以正常运行。
另外,对GDI功能通过位块传递、位块复制等接口截获处理,对DirectX通过帧切换和帧绘制接口进行截获,图形系统的本地更新就是通过这些接口完成,所以截获这两类接口后就可以同步截获GDI和DirectX更新。由于截获的所有接口处在同一个模块,所以截获完整,处理简单,GDI和DirectX部分同步性好,效率高。
附图说明
从下面结合附图的详细描述中,本发明的上述特征和优点将更明显,其中:
图1示出了根据本发明实施例的方法中所使用的显示过滤驱动与GDI引擎、真实显示驱动以及DirectX内核之间的逻辑关系;
图2示出了根据本发明的方法的总体流程图;
图3示出了在DirectDraw的情况下如何截获显示数据的示意图;
图4示出了在Direct3D的情况下如何截获显示数据的示意图;以及
图5示出了以DDBlit为例用来说明在DDI情况下的处理流程图。
具体实施方式
以下对照附图详细说明本发明的具体实施方式。在下面的说明中省略了本领域公知的一些技术的细节,因为对这些公知技术的详细描述将会导致本发明的一些特点和优点变得不清楚。
图1示出了根据本发明实施例的方法中所使用的显示过滤驱动150与GDI引擎100、真实显示驱动200以及DirectX内核500之间的逻辑关系。
如图1所示,本发明在GDI引擎100和DirectX内核500与真实显示驱动200之间加入了一个过滤层,称为显示过滤驱动150。该过滤驱动实现当前桌面显示系统支持的两大类接口,即显示DDI和显示DirectX,通过安装该显示过滤驱动150并对系统进行初始化,该过滤层对Windows GDI引擎100和DirectX内核500表现为真实显示驱动200,而对真实显示驱动200则表现为Windows GDI引擎100和DirectX内核500。也就是说,这里的显示过滤驱动150对GDI引擎100和真实显示驱动200是透明的。
图2示出了根据本发明的方法的总体流程图。如图2所示,首先加载显示过滤驱动150(S110)。然后,在操作系统的运行过程中实时截获DDI、DirectDraw和Direct3D下的显示数据(S120),并进行更新处理(S130)。
该显示过滤驱动150安装时在系统配置中被设置为当前物理显卡的驱动程序,或者截获系统的模块加载入口。在运行时刻发现加载模块为物理显卡驱动时首先加载该显示过滤驱动150,系统加载显示过滤驱动150后后截获真实驱动的接口。具体来说,对Windows GDI更新,该显示过滤驱动150通过对应的DDI进行截获;对DirectX中的DirectDraw,该显示过滤驱动150通过截获显示驱动核心的DirectDraw部分的帧切换和位块传递操作,实现截获DirectDraw应用和视频更新数据;对DirectX的Direct3D,则通过截获显示驱动核心的Direct3D部分的表示(Present)等更新接口,实现截获Direct3D应用的数据。
在配置系统使得系统为当前显卡加载显示过滤驱动150的过程中,可以采用两种方法配置系统,即静态方法和动态方法。
【静态方法】
安装程序获取当前系统的主显示设备的PND DeviceID(即插即用设备标识),枚举并匹配显卡注册项{4d36e968-e325-11ce-bfc1-08002be10318}下每个注册项的DeviceID。对于匹配的注册项,修改其Settings(设置)键下的InstalledDisplayDrivers注册项,将该Key的值修改为显示过滤驱动150的名字。操作系统通过该名字获得显卡驱动的模块名并加载到系统中,这样显示过滤驱动150就被加载到系统中。
【动态方法】
截获系统的模块加载功能,在发现正在加载的模块为显卡驱动时,首先加载该显示过滤驱动150,然后由显示过滤驱动150加载显卡驱动。
下面分别描述如何截获DDI、DirectDraw和Direct3D下的显示数据。
系统统加载显示过滤驱动150后,在驱动入口函数DrvEnableDriver中,显示过滤驱动150加载真实驱动,并将真实驱动返回的DDI接口函数表复制一份,对需要截取屏幕更新的DDI函数,将其在函数表中的值修改成指向过滤驱动对应函数的指针,同时保存原始函数指针。这样,显示过滤驱动150实现了对真实显示驱动200调用的过滤功能。
图3示出了在DirectDraw的情况下如何截获显示数据的示意图。如图3所示,在视频和游戏中常见的处理过程中本发明的方法要进行截获的截获点处于显示缓冲之前,解码数据/变换缓冲之后。而解码数据/变换缓冲中的数据是视频数据和/或游戏场景。
对DirectDraw来说,显示数据的截获是通过修改DirectDraw函数表指针来实现的。DirectDraw作为扩充集合,在DDI函数表中,DrvEnableDirectDraw是DirectDraw功能的,在DrvEnableDirectDraw调用中,将DD_CALLBACKS、DD_SURFACECALLBACKS和DD_PALETTECALLBACKS结构中的回调函数指针指向本发明提供的函数,从而在相应的Surface创建、显示和管理接口处获得调用,并在调色板变化时也获得调用。具体而言,要截获的的两个关键更新接口为Flip和Blit,对应的DDI接口名字是DDFlip和DDBlit。
在图3中,视频和游戏程序会将要显示的内容进行处理,比如对压缩的视频数据进行解码,对游戏中的下一个场景进行计算,然后将数据生成到缓冲中。如果当前的游戏或者视频是全屏模式,会调用DirectDraw的flip函数进行屏幕数据更新。如果为窗口模式则调用blit进行更新。这两种用户程序的输出处理最终会调用到显示驱动提供的DDFlip和DDBlit接口中,此时过滤驱动会获得调用,显示过滤驱动150将本次更新调用记录在更新调用表300中,以便进行后继处理400。
图4示出了在Direct3D的情况下如何截获显示数据的示意图。图4中的处理过程与DirectDraw的情况类似,3D物体的复杂过程,例如对材质、形状和纹理进行变换后最终也表现为一个输出缓冲,即变换缓冲。在这种情况下,显示数据的截获点处于显示缓冲之前,变换缓冲之后的位置。只要截获了DirectDraw的DDFlip和DDBlit接口,就可以实现Direct3D的截获。
Direct3D的处理与此类似。Direct3D允许对组成3D物体的模型进行材质、纹理的叠加处理,并进行坐标、位置等变换和进行阴影处理,这些复杂的操作结果最终表现为一个缓冲区,等待显示。与DirectX应用程序接口(API)不同的是,在Direct3D应用程序中统一使用Present接口缓冲区的显示,但在真实驱动中并不存在这个Present接口,而是仍然使用DDFlip和DDBlt进行输出。所以,只要截获了DDFlip和DDBlt,可以不截获其它涉及3D模型变换的接口,就可以截获Direct3D输出。
在处理更新过程中,当需要本地屏幕时,显示过滤驱动150的截获接口首先获得调用。对于GDI和DirectX数据,由于它们明显不同,所以需要进行不同的更新处理和后继处理。
【处理GDI更新】
GDI是一种累计更新方式,即只对变化的部分进行更新,所以处理GDI的更新方式就是记录引起GDI屏幕变化的区域和进行的操作,并备份操作需要的源数据,一起保存到更新表中。由于GDI总的更新量较少,通常可以连续保存多个变化。
【处理DirectDraw和Direct3D更新】
与GDI更新不同的是,DirectDraw和Direct3D的更新通常是整帧更新,即变化区内的整个数据都会得到完整刷新,即使许多部分与上一帧完全相同。这是因为这种更新的画面通常由多部分组成,在输出前需要进行某些实现特效的变换合成。这种应用的数据通常是视频或者3D游戏的整屏更新,以帧为基础。这种更新也保存到更新表300中。但是,通常在系统资源和带宽限制下,只保存最新的一个或者几个更新,如果来不及处理通常会用后来的更新覆盖前面的。
根据一种实现,将保存的GDI更新和DirectX更新同步保存在更新表中,而且对每个更新进行时序编号。对GDI更新进行无损压缩,同时对DirectX更新进行快速有损压缩。例如,通过网络将压缩的数据发送到一个或者多个远端,并将远端的鼠标反馈回来,就可以实现远程投影或者远程控制。
图5示出了以DDBlit函数为例说明在DDI的情况下的处理流程图。
首先调用DDBlit函数(S110)。然后,判断工作模式是否需要本地显示(S120)。
如果当前的工作模式是需要本地显示(S120:是),调用真实驱动的更新函数,在某些应用中可能不需要本地显示(S120:否),则跳过调用真实驱动的DDBlit的过程。
然后,判断更新缓冲区300的目标是否为物理显示区(S140)。如果更新缓冲区的目标不是物理显示区(S140:否),一定是中间步骤的操作,流程返回。否则(S140:是),复制点阵数据到更新缓冲区(S150),并在更新表中进行记录。
接下来,对获得的点阵进行后继处理400(S160),这个步骤可以同步在DDBlit的调用中执行,也可以根据需要进行异步处理。
以上所述,仅为本发明中的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变换或替换,都应涵盖在本发明的包含范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。

Claims (8)

1.一种采用过滤驱动获取图形设备接口数据和DirectX数据的方法,所述过滤驱动对图形设备接口引擎和DirectX内核与真实显示驱动是透明的,所述方法包括步骤:
加载显示过滤驱动;
对图形设备接口更新,在过滤驱动中通过对应的图形设备接口函数获取图形设备接口数据;
对DirectX中的DirectDraw,通过截获DirectDraw部分的帧切换和位块传递操作,来获取DirectDraw应用和视频更新数据;
对DirectX中的Direet3D,通过截获Direct3D部分的更新接口,来获取Direct3D应用的数据。
2.如权利要求1所述的方法,其特征在于,所述显示过滤驱动是以静态方式或者动态方式加载的。
3.如权利要求1所述的方法,其特征在于,在显示缓冲之前,解码数据/变换缓冲之后的位置,执行对DirectX中的DirectDraw部分的截获。
4.如权利要求1所述的方法,其特征在于,在显示缓冲之前,变换缓冲之后的位置,执行对DirectX中的Direct3D部分的截获。
5.如权利要求3所述的方法,其特征在于,通过截获更新接口Flip和Blit来实现对DirectX中的DirectDraw部分的截获。
6.如权利要求4所述的方法,其特征在于,通过截获更新接口DDFlip和DDBlit来实现对DirectX中的Direct3D部分的截获。
7.如权利要求1所述的方法,其特征在于,还包括:将图形设备接口的更新、DirectX中的DirectDraw的更新和DirectX中的Direct3D的更新存储在更新缓冲区中。
8.如权利要求7所述的方法,其特征在于,对图形设备接口的更新进行无损压缩,而对DirectX中的DirectDraw的更新和DirectX中的Direct3D的更新进行有损压缩。
CN200610169757A 2006-12-28 2006-12-28 完整获取GDI和DirectX数据的方法 Active CN101211258B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN200610169757A CN101211258B (zh) 2006-12-28 2006-12-28 完整获取GDI和DirectX数据的方法
DE102007061435A DE102007061435A1 (de) 2006-12-28 2007-12-20 Verfahren zum Erfassen von GDI und DirectX Daten
US11/966,610 US8327387B2 (en) 2006-12-28 2007-12-28 Method for acquisition of GDI and directX data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200610169757A CN101211258B (zh) 2006-12-28 2006-12-28 完整获取GDI和DirectX数据的方法

Publications (2)

Publication Number Publication Date
CN101211258A CN101211258A (zh) 2008-07-02
CN101211258B true CN101211258B (zh) 2010-05-19

Family

ID=39465989

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200610169757A Active CN101211258B (zh) 2006-12-28 2006-12-28 完整获取GDI和DirectX数据的方法

Country Status (3)

Country Link
US (1) US8327387B2 (zh)
CN (1) CN101211258B (zh)
DE (1) DE102007061435A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9639963B2 (en) * 2008-12-08 2017-05-02 Microsoft Technology Licensing, Llc Command remoting techniques
US20110063309A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation User interface for co-processing techniques on heterogeneous graphics processing units
US9830889B2 (en) 2009-12-31 2017-11-28 Nvidia Corporation Methods and system for artifically and dynamically limiting the display resolution of an application
GB2478583B (en) * 2010-03-11 2012-05-09 Displaylink Uk Ltd Improvements relating to operating systems
CN101882077B (zh) * 2010-05-19 2013-03-20 广东威创视讯科技股份有限公司 高效率绘制与渲染基本图形的方法及装置
CN103902444B (zh) * 2012-12-27 2016-03-02 腾讯科技(深圳)有限公司 3d引擎兼容性测试方法及装置
CN103905394B (zh) * 2012-12-27 2018-09-07 腾讯科技(深圳)有限公司 一种保护用户信息的方法和装置
CN106354247A (zh) * 2015-07-17 2017-01-25 上海乐相科技有限公司 一种头戴式智能眼镜显示控制方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5485617A (en) * 1993-12-13 1996-01-16 Microsoft Corporation Method and system for dynamically generating object connections
CN1123930A (zh) * 1994-04-28 1996-06-05 东芝株式会社 支援并行程序设计的装置以及设计并行程序的方法
CN1150844A (zh) * 1994-06-14 1997-05-28 Lm爱立信电话有限公司 为远程通信交换机建立软件的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6677964B1 (en) * 2000-02-18 2004-01-13 Xsides Corporation Method and system for controlling a complementary user interface on a display surface
US8683024B2 (en) * 2003-11-26 2014-03-25 Riip, Inc. System for video digitization and image correction for use with a computer management system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5485617A (en) * 1993-12-13 1996-01-16 Microsoft Corporation Method and system for dynamically generating object connections
CN1123930A (zh) * 1994-04-28 1996-06-05 东芝株式会社 支援并行程序设计的装置以及设计并行程序的方法
CN1150844A (zh) * 1994-06-14 1997-05-28 Lm爱立信电话有限公司 为远程通信交换机建立软件的方法

Also Published As

Publication number Publication date
CN101211258A (zh) 2008-07-02
US20080163263A1 (en) 2008-07-03
US8327387B2 (en) 2012-12-04
DE102007061435A1 (de) 2008-07-03

Similar Documents

Publication Publication Date Title
CN101211258B (zh) 完整获取GDI和DirectX数据的方法
CN101465115B (zh) 一种大屏幕显示系统的网络显示方法
US8878833B2 (en) Systems, methods, and apparatus for recording of graphical display
JP4005623B2 (ja) ウィンドウ表示システム、ウィンドウ表示方法、プログラム開発支援装置及びサーバ装置
US5754242A (en) Data formatting system for processing multiple independent input data streams for high resolution screen displays
EP3951595A1 (en) Method and apparatus for graphics rendering
US7053905B2 (en) Screen display processing apparatus, screen display processing method and computer program
KR100989010B1 (ko) 그래픽 데이터 및 디지털 문서 프로세싱의 시각적표현들을 생성하는 시스템 및 방법
US20220365796A1 (en) Streaming per-pixel transparency information using transparency-agnostic video codecs
CN101105746B (zh) 采用过滤驱动获取图形设备接口调用的方法
JP4177434B2 (ja) ウィンドウ表示システム、情報処理システム、クライアント装置、電話機、情報機器、家電機器及び機器
CN107729244B (zh) 多系统的测试方法、装置和移动终端及测试设备
CN1822655A (zh) 在电视机嵌入式Linux上进行人机交互界面快速开发的方法
US9324299B2 (en) Atlasing and virtual surfaces
CN114968152A (zh) 减少virtio-gpu额外性能损耗的方法
CN103246544A (zh) 虚拟硬件驱动终端及驱动方法
CN103036980A (zh) 用于远程服务的数据传输设备及方法
TWI405120B (zh) Use the filter driver to get the graphical device interface call method
CN103067449A (zh) 远程服务中的数据传输设备及方法
CN103019641A (zh) 在远程控制过程中传输数据的设备及方法
JP4177420B2 (ja) 情報処理システム、クライアント装置、電話機、情報機器、家電機器及び機器
EP3259661B1 (en) Systems and methods for providing adapted multi-monitor topology support in a virtualization environment
CN115114019A (zh) 应用的业务功能使用方法、装置、终端、存储介质及产品

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant