发明内容
有鉴于此,本发明的目的在于提供一种基于图形绘制引擎的资源设置方法和装置,以使其在不修改图形应用程序本身逻辑的情况下,实现图形绘制引擎使用资源的设置。
为实现上述目的,本发明提供了如下方案:
一种基于图形绘制引擎的资源设置方法,其包括:取得图形绘制引擎接口控制权;利用图形绘制引擎接口控制权捕获资源设置的时机;根据图形应用程序中图形绘制引擎实例的运行期特征信息进行资源设置。
优选的,资源设置时机达到后,用运行期特征信息作为如何实施资源设置的依据。
优选的,所述的资源设置的方法包括:对资源进行修改;用新创建的资源替代原资源;插入一个或多个新创建的资源。
优选的,所述的利用图形绘制引擎接口控制权捕获资源设置时机的方法包括:当图形应用程序调用图形绘制引擎接口对资源进行设置时,利用对图形绘制引擎接口的控制权捕获该设置过程,并以是否捕获到该设置过程作为是否可以对所述资源进行设置操作的标准。
优选的,所述的取得图形绘制引擎接口控制权的方法是以代理方式实现的,该代理方式包括:实现可以被图形应用程序当作原有图形绘制引擎一样来调用的代理图形绘制引擎,用该代理图形绘制引擎来替换图形应用程序当前的图形绘制引擎,当使用图形绘制引擎的图形应用程序调用图形绘制引擎的某个接口时,实际执行的是代理图形绘制引擎接口,由代理图形绘制引擎接口负责完成实际的图形绘制引擎接口的工作。
优选的,所述的取得图形绘制引擎接口控制权的方法是以修改接口地址的方式实现的,该修改接口地址的方式是:将图形绘制引擎接口地址指向附加应用实现的接口地址。
优选的,所述的取得图形绘制引擎接口控制权的方法是以修改接口内容的方式实现的,该修改接口内容的方式是:将原图形绘制引擎接口的指令内容修改为附加应用程序实现的指令内容。
一种基于图形绘制引擎的资源设置装置,其包括:接口控制单元,用于取得图形绘制引擎接口控制权;监视单元,用于利用图形绘制引擎接口控制权捕获资源设置的时机;配置单元,根据图形应用程序中图形绘制引擎实例的运行期特征信息对进行资源设置。
优选的,根据图形应用程序对图形绘制引擎的实际运行行为,所述的配置单元可以具有一判断模块,在检测到资源设置的时机达到后,判断是否需要实施资源设置动作。
优选的,所述的实施的资源设置包括:对资源进行修改;用新创建的资源替代原资源;插入一个或多个新创建的资源。优选的,在图形应用程序调用图形绘制引擎接口对资源进行设置时,利用对图形绘制引擎接口的控制权捕获该设置过程,并以是否捕获到该设置过程作为是否可以对所述资源进行设置操作的标准。
优选的,所述的接口控制单元以代理方式取得图形绘制引擎接口控制权,该接口控制单元实现可以被图形应用程序当作原有图形绘制引擎一样来调用的代理图形绘制引擎,用该代理图形绘制引擎来替换图形应用程序当前的图形绘制引擎,当使用图形绘制引擎的图形应用程序调用图形绘制引擎的某个接口时,实际执行的是代理图形绘制引擎接口,由代理图形绘制引擎接口负责完成实际的图形绘制引擎接口的工作。
优选的,所述的接口控制单元以修改接口地址的方式取得图形绘制引擎接口控制权,该接口控制单元将图形绘制引擎接口地址指向附加应用实现的接口地址。
优选的,所述的接口控制单元以修改接口内容的方式取得图形绘制引擎接口控制权,该接口控制单元将原图形绘制引擎接口的指令内容修改为附加应用程序实现的指令内容。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明将用于扩展或修改图形应用程序资源的附加应用程序以独立于所述图形应用程序和图形绘制引擎的形式设置,通过对图形绘制引擎接口的控制实现资源自由设置,在不修改图形应用程序的前提下,为满足附加定制应用的需求提供有效的解决方案;
附加应用程序独立设置保证了图形应用程序、图形绘制引擎的完整性,避免了破坏程序本身逻辑及由其造成的兼容性降低等问题,且在卸载附加应用程序后对图形应用程序、图形绘制引擎不会造成任何影响。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明实施例提供的对图形绘制引擎使用资源设置的方法包括以下步骤:
S110:附加应用程序取得图形绘制引擎接口控制权;
上述的附加应用程序是独立设置于图形应用程序、图形绘制引擎外的第三方软件,该附加应用程序在使用图形绘制引擎的应用中,拦截图形绘制引擎的接口调用,从而接管了图形绘制引擎的接口控制权,使图形绘制引擎接口的调用都要以附加应用程序的逻辑实现相应的实际接口的调用。
S130:附加应用程序利用图形绘制引擎接口控制权捕获资源设置的时机;
在图形应用程序设置资源的过程中,由于图形应用程序是通过调用图形绘制引擎的资源设置接口来设置各种资源的,而附加应用取得了图形绘制引擎的接口控制权,且其具有自定义的资源设置接口,因此当图形应用程序向图形绘制引擎的资源设置接口发出调用指令时,本发明的附加应用程序通过接管的图形绘制引擎接口控制权捕获资源设置的时机,使其直接跳到附加应用程序的资源设置接口来执行。
S150:根据图形应用程序中图形绘制引擎实例的运行期特征信息进行资源数据的设置。
上述的特征信息包括资源的数据标识符(如:数据自定义特征码、数据散列码、数据校验和)、资源的属性(表明该资源是模型资源,还是图像资源,或是音频资源、以及可通过图形绘制引擎接口控制的设备资源),图形绘制引擎实例的运行状态信息(如:镜头变换数据、世界变换数据),图形绘制引擎实例的运行行为信息。上述的资源包括图形绘制引擎实例中使用的模型数据、图像数据、音频数据,以及可通过图形绘制引擎接口控制的设备运行参数。
上述的图形绘制引擎实例的运行行为信息指图形应用程序对图形绘制引擎接口的调用特征,包括某个或某些特定的接口被调用、被调用接口的调用参数、被调用接口的调用顺序、以及调用次数。
上述的运行期内执行的资源相关的调用包括纹理设置指令、渲染状态设置指令、镜头变换设置指令、模型变换设置指令等等,相应的,特征信息包括资源调用指令中的参数数据信息、被各指令设置的图形绘制引擎中的各参数数据信息、被调用的指令本身以及指令的操作对象的特征等资源相关的可辨识信息。
上述资源的特征信息可以是唯一代表某一个位图的特征码,也可以是代表某个时刻描述图形绘制引擎行为的参数数据,本发明的附加应用程序可以通过计算或提取等方式主动或被动地得到这些特征信息。上述指令及特征信息的表述仅为举例说明,并非用以限定。
所述的附加应用程序可以根据特征信息识别到图形应用程序在操作某个资源或在执行一组特定任务的操作,再利用识别结果对其进行相应的设置工作,实现设置资源和定制行为的目的。
具体而言,本发明的方法还可以包括以下步骤:
S140:获取图形应用程序中图形绘制引擎实例的运行期特征信息;和/或
S120:附加应用程序加载资源数据列表和与特征信息对应的目标数据。
附加应用程序从本地磁盘、光盘、外部存储设备、网络等各种渠道加载资源数据列表和各种用于设置资源的目标数据,在该资源数据列表中建立有目标数据和特征信息的一一对应关系。
利用资源数据列表的一一对应关系,附加应用程序可以在步骤S150中以特征信息为查询词,在资源数据列表中找到与其对应的目标数据,再利用目标数据对资源进行设置,从而使图形应用程序本应调用某特定资源,结果调用的是与该特定资源的特征信息对应的目标数据。至此,附加应用程序调用图形绘制引擎的资源设置接口完成了资源设置操作。
S160:图形绘制引擎对目标数据进行设置并输出。
在本发明具体实施例中,图形绘制引擎以目标数据替代图形应用程序欲调用的资源进行设置并输出,从而改变了图形应用程序调用的部分或全部资源或改变图形应用程序的绘制行为,实现了对图形应用程序的扩展。
具体而言,上述设置资源数据的具体实现方式请参见代码说明1所示。另需说明的是,在本发明说明书中的代码说明均用于表现本发明的实现手段,即不代表其具有唯一性,也非用于限定本发明。
代码说明1:设置资源数据 |
VOID ModifyRes(LPVOID lpResBuf){DWORD dwRes ID;//资源的特征信息//得到该资源的特征信息dwResID=GetResID(lpResBuf);//根据特征信息判断该资源是否需要设置if(IsModify(dwResID)==TRUE){ |
LPVOID lpModifyData;//修改的目标数据//根据特征信息得到修改的目标数据lpModifyData=GetMidifyData(dwResID);//最后把资源数据修改为目标数据ModifyResData(lpResBuf,lpModifyData);}} |
请参阅图1所示,是本发明提供的对图形绘制引擎使用资源设置的方法,需要说明的是,本发明所例举的步骤顺序并非限定且不可改变,而是仅用于方便说明之用,如步骤S110与步骤S120间即可顺序互换,与之类似的替代方案早已在现有技术中广为解释,在此不再一一赘述。
在本发明的方法中,还进一步包括有在资源设置时机达到后,用运行期特征信息作为如何实施资源设置的依据。资源设置的方法包括:对资源进行修改;用新创建的资源替代原资源;插入一个或多个新创建的资源。
上述的步骤可参见代码说明2所示:
代码说明2:检索资源数据并计算特征信息 |
VOID IndexRes(LPVOID lpResBuf){//先判断该资源是否被检索过,没有检索则先进行检索if(IsIndex(lpResBuf)==FALSE) |
{//对资源数据进行检索IndexResData(lpResBuf);//计算特征信息CopumteResID(lpResBuf);}} |
针对上述方法在捕获资源设置的时机时,应对所调用资源是否进行过检索进行检查,如果没有进行过检索,则需要先进行相应的检索工作,如代码说明3所示。
代码说明3:捕获资源设置时机(监视资源设置接口的调用) |
VOID NewSetRes(LPVOID lpResBuf){DWORD dwResID;//先判断该资源是否被检索过,没有检索则检索if(InIndex(lpResBuf)==FALSE){//对资源数据进行检索IndexRes(lpResBuf);} |
//得到资源特征信息dwResID=GetResID(lpResBuf);//判断是否需要修改资源数据if(IsModifyRes(dwResID)==TRUE){ModifyResData(lpResBuf dwResID);}//先执行附加逻辑,包括,计算特征信息,设置资源数据步骤DoOther(lpResBuf);//最后调用实际图形绘制引擎的资源设置接口来设置资源lpSaveDrawDev->SetRes(lpResBuf);……} |
特别需要说明的是,上述取得图形绘制引擎接口控制权的方法具有多种,在本发明中仅例举以下三种方法,即代理方式、修改接口地址方式、以及修改接口内容的方式。
所述的代理方式具有以下步骤:实现可以被图形应用程序当作原有图形绘制引擎一样来调用的代理图形绘制引擎,用该代理图形绘制引擎来替换图形应用程序当前的图形绘制引擎,当使用图形绘制引擎的图形应用程序调用图形绘制引擎的某个接口时,实际执行的是代理图形绘制引擎接口,由代理图形绘制引擎接口负责完成实际的图形绘制引擎接口的工作。
通过以上步骤,使所有的图形绘制引擎接口的调用都要通过代理图形绘制引擎的接口来执行,其具体实现方式参见代码说明4。
代码说明4:取得接口控制权(代理方式) |
//代理图形绘制引擎的接口定义,其接口定义和实际的接口定义完全一致的class OwnDrawDev{void Begin(..);void Present(...);void End(..);void SetRes();...};//附加应用保存的实际图形绘制引擎RealDrawDev*lpSaveDrawDev;//该函数用代理的图形绘制引擎替换实际的图形绘制引擎OwnDrawDev*ModifyInterface(RealDrawDev*lpDrawDev){OwnDrawDev*lpNewDrawDev;//实现代理图形绘制引擎LpNewDrawDev=new OwnDrawDev;//保存实际的图形绘制引擎lpSaveDrawDev=lpDrawDev; |
//将代理图形绘制引擎返回给使用图形绘制引擎的应用return OwnDrawBev;} |
所述的修改接口地址方式具有以下步骤:将图形绘制引擎的接口地址指向附加应用程序实现的接口地址。
这样,当图形应用程序调用图形绘制引擎的接口时,首先跳到附加应用程序实现的接口地址执行,然后附加应用程序再调用原来保存的图形绘制引擎接口地址完成实际接口的调用,其具体实现方式参见代码说明5。
代码说明5:取得接口控制权(修改接口地址方式) |
//附加应用保存的实际图形绘制引擎RealDrawDev*lpSaveDrawDev;VOID ModifyInterface2(RealDrawDev*lpDrawDev){//保存实际的图形绘制引擎对象lpSaveDrawDev=lpDrawDev;//将的图形绘制引擎的接口替换成附加应用新定义的接口lpImageDev->Begin=NewBegin;lpImageDev->End=NewEnd;lpImageDev->SetRes=NewSetRes;lpImageDev->Present=NewPresent;…………………… |
所述的修改接口内容的方式具有以下步骤:将原图形绘制引擎接口的指令内容修改为附加应用实现的指令内容。
上述修改接口内容方式参见代码说明6。
代码说明6:取得接口控制权(修改接口内容的方式) |
LPVOID lpFirstCmd;//接口的第一条指令LPVOID lpJmpCmd;//接口的跳转指令VOID ModifyInterface3(RealDrawDev*lpDrawDev){//保存接口的第一条指令lpFirstCmd=lpImageDev->Present[0];//然后将接口的第一条指令修改为跳转指令lpImageDev->Present[0]=lpJmpCmd;//修改其他接口的内容……………………return;}//附加应用定义的接口实现VOID NewSetRes() |
{//先执行附加应用的逻辑DoAdd();……//然后执行实际接口的第一条指令call lpFirstCmd;//最后调用跳转指令,跳回到实际的接口地址继续执行call lpRealLoadImage;} |
请参阅图2是本发明实施例提供的装置的示意图,图3是图2所示的装置与图形应用程序、图形绘制引擎间的结构示意图。
如图所示,本发明提供了一种基于图形绘制引擎的资源设置装置U120,该装置可对图形绘制引擎使用的资源进行设置,而不需对图形应用程序自身逻辑进行设置。上述装置U120包括有:接口控制单元U121、监视单元U122、目标数据U125、及配置单元U124。
上述的接口控制单元U121,用于取得图形绘制引擎U130接口控制权,接管图形绘制引擎U130的接口控制,使图形绘制引擎U130接口的调用直接跳转到资源设置装置U120的逻辑实现实际接口的调用。
上述的监视单元U122,用于利用图形绘制引擎接口控制权捕获资源设置的时机,其在图形应用程序U110向图形绘制引擎U130发送接口调用指令时拦截该指令,将图形应用程序U110所欲调用的资源告知信息分析单元U123。
上述的配置单元U124,根据图形应用程序中图形绘制引擎实例的运行期特征信息进行资源设置。进一步,本发明的装置还可以包括信息分析单元U123,用于获取图形应用程序U110中图形绘制引擎U130实例的运行期特征信息。
在本发明具体实施例中,本发明的装置U120还设置有目标数据U125,该目标数据U125用于设置图形应用程序U110欲调用的资源的数据。另外,在配置单元设置有资源数据列表,在该资源数据列表中建立目标数据U125和特征信息的一一对应关系,在监视单元U122捕获资源设置的时机后,根据信息分析单元U123提供的特征信息在资源数据列表中查找对应的目标数据U125,并将该目标数据U125通过接口控制单元U121提供给图形绘制引擎U130。
具体而言,上述资源数据列表和各种用于设置资源的目标数据U125可以从本地磁盘、光盘、外部存储设备、网络等各种渠道加载。上述的配置单元U124利用资源数据列表的一一对应关系,以特征信息为查询词在资源数据列表中找到与其对应的目标数据,从而使图形应用程序U110本应调用某特定资源,结果调用的是与该特定资源的特征信息对应的目标数据U125,图形绘制引擎U130调用目标数据U125后,对目标数据U125进行设置并输出,从而改变了图形应用程序U110调用的部分或全部资源,实现了对图形应用程序的扩展。
在本发明提供的装置仅对图形应用程序U110调用的部分资源进行设置时,配置单元U124具有一判断模块,在检测到资源设置的时机达到后,判断模块对资源是否需要设置进行判断,使资源数据列表中不存在映射关系的特征信息所对应的资源不进行设置。
为实现上述判断模块对资源是否需要设置进行判断,该判断模块利用信息分析单元U123提供的特征信息在资源数据列表中检索该特征信息是否存在,并以该特征信息是否存在做为判断是否需要实施资源设置动作的标准,如果列表中存在该特征信息则进行设置。
当图形应用程序调用图形绘制引擎接口对资源进行设置时,利用对图形绘制引擎接口的控制权捕获该设置过程,并以是否捕获到该设置过程作为是否可以对所述资源进行设置操作的标准。
上述的接口控制单元U121具有多种接管图形绘制引擎U130接口控制权的方式,本发明中例举代理方式、修改接口地址的方式、修改接口内容的方式三种。
具体而言,以代理方式取得图形绘制引擎U130接口控制权,该接口控制单元U121实现可以被图形应用程序当作原有图形绘制引擎一样来调用的代理图形绘制引擎,用该代理图形绘制引擎来替换图形应用程序当前的图形绘制引擎,当使用图形绘制引擎的图形应用程序调用图形绘制引擎的某个接口时,实际执行的是代理图形绘制引擎接口,由代理图形绘制引擎接口负责完成实际的图形绘制引擎接口的工作。
以修改接口地址的方式取得图形绘制引擎U130接口控制权,该接口控制单元U121将图形绘制引擎U130的接口地址指向附加应用程序实现的接口地址。
以修改接口内容的方式取得图形绘制引擎U130接口控制权,该接口控制单元U121将原图形绘制引擎接口的指令内容修改为附加应用实现的指令内容。
以上对本发明所提供的基于图形绘制引擎接口控制的资源设置方法、装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。