一種渲染引擎的繪制方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例公開了一種渲染引擎的繪制方法及裝置,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。本發(fā)明實(shí)施例方法包括:創(chuàng)建基于主窗口的子窗口;通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;將圖像在主窗口中進(jìn)行顯示。
【專利說明】一種渲染引擎的繪制方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)COM組件的【技術(shù)領(lǐng)域】,尤其涉及一種渲染引擎的繪制方法。
【背景技術(shù)】
[0002]在Windows系統(tǒng)的軟件開發(fā)中,COM組件技術(shù)是應(yīng)用非常普遍和重要的技術(shù)。它把功能相同的代碼封裝為COM組件,這樣使用不同編程語言開發(fā)的程序就可以很方便的通過調(diào)用該組件來實(shí)現(xiàn)某個功能,而這類程序就是該COM組件的宿主程序。COM組件內(nèi)部負(fù)責(zé)顯示功能的接口就是所謂的渲染引擎,一般分為微軟系的比如⑶1、⑶I+以及DX等,而非微軟系的主要是OpenGL渲染引擎。由于各有優(yōu)點(diǎn),⑶1、⑶I+的使用簡單,但效率不高,DX則由于是微軟的標(biāo)準(zhǔn),許多顯卡廠商開發(fā)公開的接口往往只有OpenGL版本,而OpenGL則效率高,可以應(yīng)用顯卡的新特性,但是它的使用方法相對繁瑣,因此為了滿足不同的要求,越來越多的組件提供了上述兩種渲染引擎,供宿主程序選擇使用渲染方式。
[0003]宿主程序使用COM組件進(jìn)行渲染的一種常用的方法是宿主程序的自定義繪制功能,比如宿主程序通過COM組件的窗口構(gòu)造渲染對象,并在該對象上繪制圖形圖像。傳統(tǒng)開發(fā)組件的方法是為組件創(chuàng)建唯一的一個窗口,所以的組件內(nèi)部需要繪制的圖形圖像都在是繪制到該窗口上。由于操作系統(tǒng)的限制,尤其在使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充,比如需要在COM組件窗口上繪制一個矩形,最后呈現(xiàn)出來的一個帶白色底色的矩形區(qū)域。
[0004]然而,上述提及的由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實(shí)施例提供了一種渲染引擎的繪制方法及裝置,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
[0006]本發(fā)明實(shí)施例提供的一種渲染引擎的繪制方法,包括:
[0007]創(chuàng)建基于主窗口的子窗口 ;
[0008]通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入所述子窗口的緩沖區(qū);
[0009]將所述繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與所述繪制數(shù)據(jù)相對應(yīng)的圖像;
[0010]將所述圖像在所述主窗口中進(jìn)行顯示。
[0011]優(yōu)選地,
[0012]創(chuàng)建基于主窗口的子窗口具體包括:
[0013]對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非所述OpenGL,則將所述主窗口設(shè)置為唯一的繪制載體,若為所述OpenGL,則創(chuàng)建基于所述主窗口的所述子窗口。
[0014]優(yōu)選地,
[0015]判斷宿主程序所采用的渲染引擎之前還包括:
[0016]COM組件提供所述宿主程序設(shè)置所述渲染引擎的接口,使得所述宿主程序自主設(shè)置所述渲染引擎。
[0017]優(yōu)選地,
[0018]通過使用OpenGL進(jìn)行圖像繪制之前還包括:
[0019]對所述OpenGL進(jìn)行初始化,所述初始化包括所述子窗口的像素格式設(shè)置。
[0020]優(yōu)選地,
[0021]將所述圖像在所述主窗口中進(jìn)行顯示具體包括:
[0022]通過非所述OpenGL的所述渲染引擎將所述圖像在所述主窗口中進(jìn)行顯示。
[0023]優(yōu)選地,
[0024]將所述圖像在所述主窗口中進(jìn)行顯示之后還包括:
[0025]所述宿主程序根據(jù)所述圖像進(jìn)行自定義繪制。
[0026]本發(fā)明實(shí)施例提供的一種渲染引擎的繪制裝置,包括:
[0027]創(chuàng)建模塊,用于創(chuàng)建基于主窗口的子窗口 ;
[0028]子窗口繪制模塊,用于通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入所述子窗口的緩沖區(qū);
[0029]拷貝模塊,用于將所述繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與所述繪制數(shù)據(jù)相對應(yīng)的圖像;
[0030]顯示模塊,用于將所述圖像在所述主窗口中進(jìn)行顯示。
[0031]優(yōu)選地,
[0032]所述創(chuàng)建模塊具體包括:
[0033]判斷子模塊,用于對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非所述OpenGL,則將所述主窗口設(shè)置為唯一的繪制載體,若為所述OpenGL,則觸發(fā)創(chuàng)建子模塊;
[0034]所述創(chuàng)建子模塊,用于創(chuàng)建基于所述主窗口的所述子窗口。
[0035]優(yōu)選地,
[0036]所述渲染引擎的繪制裝置還包括:
[0037]初始化模塊,用于對所述OpenGL進(jìn)行初始化,所述初始化包括所述子窗口的像素格式設(shè)置;
[0038]繪制模塊,用于所述宿主程序根據(jù)所述圖像進(jìn)行自定義繪制。
[0039]優(yōu)選地,
[0040]顯示模塊,具體用于通過非所述OpenGL的所述渲染引擎將所述圖像在所述主窗口中進(jìn)行顯示。
[0041]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
[0042]本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制方法及裝置,其中,方法包括:創(chuàng)建基于主窗口的子窗口 ;通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;將圖像在主窗口中進(jìn)行顯示。本實(shí)施例中,通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,實(shí)現(xiàn)了通過構(gòu)造子窗口并在子窗口的后臺緩存中渲染組件圖像,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
【專利附圖】
【附圖說明】
[0043]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0044]圖1為本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制方法的一個實(shí)施例的流程示意圖;
[0045]圖2為本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制方法的另一個實(shí)施例的流程示意圖;
[0046]圖3為本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制裝置的一個實(shí)施例的結(jié)構(gòu)示意圖;
[0047]圖4為本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制裝置的另一個實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0048]本發(fā)明實(shí)施例提供了一種渲染引擎的繪制方法及裝置,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
[0049]為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點(diǎn)能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,下面所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而非全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0050]請參閱圖1,本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制方法的一個實(shí)施例包括:
[0051]101、創(chuàng)建基于主窗口的子窗口;
[0052]本實(shí)施例中,當(dāng)宿主程序需要進(jìn)行自定義繪制時,首先需要創(chuàng)建基于主窗口的子窗口,該子窗口可以是RWnd,可以理解的是,前述的主窗口為COM組件的每個組件都有的一個默認(rèn)的窗口,該窗口是在組件開發(fā)時,由開發(fā)框架提供的。在宿主程序中進(jìn)行組件的自定義繪制時,需要的繪制載體就是這個默認(rèn)的窗口,例如為DWnd。比如VS2010開發(fā)平臺中的ActiveX框架中,提供的默認(rèn)窗口對象就是組件的繪制載體,此處具體不做限定。
[0053]102、通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);
[0054]當(dāng)創(chuàng)建基于主窗口的子窗口之后,需要通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū),需要說明的是,此時,步驟101創(chuàng)建的子窗口 RWnd隱藏,該子窗口可以是不需要顯示出來的,然后,使用OpenGL進(jìn)行組件的圖形圖像繪制,這些繪制數(shù)據(jù)將繪制到子窗口 RWnd的后臺緩沖區(qū),即GL_Back內(nèi)。
[0055]103、將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;
[0056]當(dāng)通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū)之后,需要將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,需要說明的是,從前述的后臺緩沖區(qū)拷貝繪制數(shù)據(jù)到組件的內(nèi)存數(shù)據(jù)區(qū),獲取后臺緩沖區(qū)的數(shù)據(jù)大小,在組件中創(chuàng)建同等大小的內(nèi)存區(qū)域,并進(jìn)行數(shù)據(jù)的拷貝。
[0057]104、將圖像在主窗口中進(jìn)行顯示。
[0058]當(dāng)將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像之后,需要將圖像在主窗口中進(jìn)行顯示。
[0059]可以理解的是,前述的將圖像在主窗口中進(jìn)行顯示的具體過程將在后續(xù)實(shí)施例中進(jìn)行詳細(xì)的描述,此處不再詳細(xì)贅述。
[0060]本實(shí)施例中,通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,實(shí)現(xiàn)了通過構(gòu)造子窗口并在子窗口的后臺緩存中渲染組件圖像,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
[0061]上面是對渲染引擎的繪制方法進(jìn)行詳細(xì)的描述,下面將對圖像在主窗口中進(jìn)行顯示進(jìn)行詳細(xì)的描述,請參閱圖2,本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制方法的另一個實(shí)施例包括:
[0062]201、C0M組件提供宿主程序設(shè)置渲染引擎的接口 ;
[0063]本實(shí)施例中,當(dāng)宿主程序需要進(jìn)行自定義繪制時,首先COM組件提供宿主程序設(shè)置渲染引擎的接口,使得宿主程序自主設(shè)置渲染引擎。
[0064]202、對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非OpenGL,則執(zhí)行步驟203,若為OpenGL,則執(zhí)行步驟204 ;
[0065]本實(shí)施例中,當(dāng)宿主程序需要進(jìn)行自定義繪制時,首先對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非OpenGL,則執(zhí)行步驟203,若為OpenGL,則執(zhí)行步驟204。
[0066]需要說明的是,前述的非OpenGL,可以是⑶1、⑶I+或者DX的渲染引擎等,此處具體不做限定。
[0067]203、將主窗口設(shè)置為唯一的繪制載體;
[0068]當(dāng)宿判斷主程序所采用的渲染引擎為非OpenGL之后,則將主窗口設(shè)置為唯一的繪制載體,可以理解的是,組件安裝默認(rèn)的方式,是把主窗口 DWnd作為唯一的繪制載體,任何的繪制內(nèi)容都直接顯示到主窗口 DWnd中,將主窗口設(shè)置為唯一的繪制載體為本領(lǐng)域技術(shù)人員公知技術(shù),此處便不再詳細(xì)贅述。
[0069]此時,將主窗口設(shè)置為唯一的繪制載體之后可以是直接進(jìn)行步驟209。
[0070]204、創(chuàng)建基于主窗口的子窗口;
[0071]當(dāng)宿判斷主程序所采用的渲染引擎為OpenGL之后,首先需要創(chuàng)建基于主窗口的子窗口,該子窗口可以是RWnd,可以理解的是,前述的主窗口為COM組件的每個組件都有的一個默認(rèn)的窗口,該窗口是在組件開發(fā)時,由開發(fā)框架提供的。在宿主程序中進(jìn)行組件的自定義繪制時,需要的繪制載體就是這個默認(rèn)的窗口,例如為DWnd。比如VS2010開發(fā)平臺中的ActiveX框架中,提供的默認(rèn)窗口對象就是組件的繪制載體,此處具體不做限定。
[0072]205、對OpenGL進(jìn)行初始化;
[0073]當(dāng)創(chuàng)建基于主窗口的子窗口之后,需要對OpenGL進(jìn)行初始化,初始化包括子窗口的像素格式設(shè)置。
[0074]需要說明的是,進(jìn)行使用OpenGL渲染的初始化操作,包括設(shè)置RWnd的象素格式為支持OpenGL渲染,以及支持雙緩沖,創(chuàng)建OpenGL渲染所需要的繪圖描述表對象,即HGLRC,使得OpenGL的函數(shù)調(diào)用將失敗,設(shè)置雙緩沖是因?yàn)樽哟翱诓恍枰@示圖像,只要把組件的圖像圖形顯示到后臺即可,前述的HGLRC為本領(lǐng)域技術(shù)人員公知的技術(shù)術(shù)語,此處不再詳細(xì)贅述,
[0075]206、通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);
[0076]當(dāng)創(chuàng)建基于主窗口的子窗口之后,需要通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū),需要說明的是,此時,步驟101創(chuàng)建的子窗口 RWnd隱藏,該子窗口可以是不需要顯示出來的,然后,使用OpenGL進(jìn)行組件的圖形圖像繪制,這些繪制數(shù)據(jù)將繪制到子窗口 RWnd的后臺緩沖區(qū),即GL_Back內(nèi)。
[0077]207、將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;
[0078]當(dāng)通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū)之后,需要將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,需要說明的是,從前述的后臺緩沖區(qū)拷貝繪制數(shù)據(jù)到組件的內(nèi)存數(shù)據(jù)區(qū),獲取后臺緩沖區(qū)的數(shù)據(jù)大小,在組件中創(chuàng)建同等大小的內(nèi)存區(qū)域,并進(jìn)行數(shù)據(jù)的拷貝。
[0079]208、通過非OpenGL的渲染引擎將圖像在主窗口中進(jìn)行顯示;
[0080]當(dāng)將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像之后,需要通過非OpenGL的渲染引擎將圖像在主窗口中進(jìn)行顯示,可以理解的是,將步驟207中生成的與繪制數(shù)據(jù)相對應(yīng)的圖像,通過非OpenGL的渲染引擎,例如GDi渲染引擎將圖像在主窗口中進(jìn)行顯示。
[0081 ] 209、宿主程序根據(jù)圖像進(jìn)行自定義繪制。
[0082]當(dāng)步驟208的通過非OpenGL的渲染引擎將圖像在主窗口中進(jìn)行顯示或步驟203的將主窗口設(shè)置為唯一的繪制載體之后,需要宿主程序根據(jù)圖像進(jìn)行自定義繪制,可以理解的是,前述的宿主程序根據(jù)圖像進(jìn)行自定義繪制時,需要獲取組件句柄,通過該句柄構(gòu)造圖像的對象,并進(jìn)行繪制。
[0083]本實(shí)施例中,通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,實(shí)現(xiàn)了通過構(gòu)造子窗口并在子窗口的后臺緩存中渲染組件圖像,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題,以及對宿主程序所采用的渲染引擎進(jìn)行判斷,進(jìn)行與非OpenGL或與OpenGL相對應(yīng)的操作,不僅保證了 OpenGL的繪制高效,又實(shí)現(xiàn)了多渲染引擎的兼容性的功能。
[0084]請參閱圖3,本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制裝置的一個實(shí)施例包括:
[0085]創(chuàng)建模塊301,用于創(chuàng)建基于主窗口的子窗口 ;
[0086]子窗口繪制模塊302,用于通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);
[0087]拷貝模塊303,用于將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;
[0088]顯示模塊304,用于將圖像在主窗口中進(jìn)行顯示。
[0089]本實(shí)施例中,通過子窗口繪制模塊302使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);拷貝模塊303將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,實(shí)現(xiàn)了通過構(gòu)造子窗口并在子窗口的后臺緩存中渲染組件圖像,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題。
[0090]上面是對渲染引擎的繪制裝置各模塊進(jìn)行詳細(xì)的描述,下面將附加模塊進(jìn)行詳細(xì)的描述,請參閱圖4,本發(fā)明實(shí)施例中提供的一種渲染引擎的繪制裝置的另一個實(shí)施例包括:
[0091]創(chuàng)建模塊401,用于創(chuàng)建基于主窗口的子窗口 ;
[0092]本實(shí)施例中,創(chuàng)建模塊401還可以進(jìn)一步包括:
[0093]判斷子模塊4011,用于對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非OpenGL,則將主窗口設(shè)置為唯一的繪制載體,若為OpenGL,則觸發(fā)創(chuàng)建子模塊4012 ;
[0094]創(chuàng)建子模塊4012,用于創(chuàng)建基于主窗口的子窗口。
[0095]初始化模塊402,用于對OpenGL進(jìn)行初始化,初始化包括子窗口的像素格式設(shè)置;
[0096]子窗口繪制模塊403,用于通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);
[0097]拷貝模塊404,用于將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像;
[0098]顯示模塊405,用于將圖像在主窗口中進(jìn)行顯示,進(jìn)一步地,顯示模塊405,具體用于通過非OpenGL的渲染引擎將圖像在主窗口中進(jìn)行顯示。
[0099]繪制模塊406,用于宿主程序根據(jù)圖像進(jìn)行自定義繪制。
[0100]本實(shí)施例中,通過子窗口繪制模塊403使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入子窗口的緩沖區(qū);拷貝模塊4043將繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與繪制數(shù)據(jù)相對應(yīng)的圖像,實(shí)現(xiàn)了通過構(gòu)造子窗口并在子窗口的后臺緩存中渲染組件圖像,解決了由于操作系統(tǒng)的限制,使用OpenGL作為渲染引擎,當(dāng)宿主程序直接在該窗口上繪制會出現(xiàn)白色的填充的技術(shù),導(dǎo)致了顯示效果受到較為嚴(yán)重的影響的技術(shù)問題,以及判斷子模塊4011對宿主程序所采用的渲染引擎進(jìn)行判斷,進(jìn)行與非OpenGL或與OpenGL相對應(yīng)的操作,不僅保證了 OpenGL的繪制高效,又實(shí)現(xiàn)了多渲染引擎的兼容性的功能。
[0101]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
[0102]在本申請所提供的幾個實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0103]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
[0104]另外,在本發(fā)明各個實(shí)施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨(dú)物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0105]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,可以存儲在一個計(jì)算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0106]以上所述,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種渲染引擎的繪制方法,其特征在于,包括: 創(chuàng)建基于主窗口的子窗口; 通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入所述子窗口的緩沖區(qū); 將所述繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與所述繪制數(shù)據(jù)相對應(yīng)的圖像; 將所述圖像在所述主窗口中進(jìn)行顯示。
2.根據(jù)權(quán)利要求1所述的渲染引擎的繪制方法,其特征在于,創(chuàng)建基于主窗口的子窗口具體包括: 對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非所述OpenGL,則將所述主窗口設(shè)置為唯一的繪制載體,若為所述OpenGL,則創(chuàng)建基于所述主窗口的所述子窗口。
3.根據(jù)權(quán)利要求2所述的渲染引擎的繪制方法,其特征在于,判斷宿主程序所采用的渲染引擎之前還包括: COM組件提供所述宿主程序設(shè)置所述渲染引擎的接口,使得所述宿主程序自主設(shè)置所述渲染引擎。
4.根據(jù)權(quán)利要求1所述的渲染引擎的繪制方法,其特征在于,通過使用OpenGL進(jìn)行圖像繪制之前還包括: 對所述OpenGL進(jìn)行初始化,所述初始化包括所述子窗口的像素格式設(shè)置。
5.根據(jù)權(quán)利要求2所述的渲染引擎的繪制方法,其特征在于,將所述圖像在所述主窗口中進(jìn)行顯示具體包括: 通過非所述OpenGL的所述渲染引擎將所述圖像在所述主窗口中進(jìn)行顯示。
6.根據(jù)權(quán)利要求1所述的渲染引擎的繪制方法,其特征在于,將所述圖像在所述主窗口中進(jìn)行顯示之后還包括: 所述宿主程序根據(jù)所述圖像進(jìn)行自定義繪制。
7.—種渲染引擎的繪制裝置,其特征在于,包括: 創(chuàng)建模塊,用于創(chuàng)建基于主窗口的子窗口 ; 子窗口繪制模塊,用于通過使用OpenGL進(jìn)行圖像繪制,并將繪制數(shù)據(jù)導(dǎo)入所述子窗口的緩沖區(qū); 拷貝模塊,用于將所述繪制數(shù)據(jù)拷貝至COM組件的存儲區(qū),并生成與所述繪制數(shù)據(jù)相對應(yīng)的圖像; 顯示模塊,用于將所述圖像在所述主窗口中進(jìn)行顯示。
8.根據(jù)權(quán)利要求7所述的渲染引擎的繪制裝置,其特征在于,所述創(chuàng)建模塊具體包括: 判斷子模塊,用于對宿主程序所采用的渲染引擎進(jìn)行判斷,若為非所述OpenGL,則將所述主窗口設(shè)置為唯一的繪制載體,若為所述OpenGL,則觸發(fā)創(chuàng)建子模塊; 所述創(chuàng)建子模塊,用于創(chuàng)建基于所述主窗口的所述子窗口。
9.根據(jù)權(quán)利要求7所述的渲染引擎的繪制裝置,其特征在于,所述渲染引擎的繪制裝置還包括: 初始化模塊,用于對所述OpenGL進(jìn)行初始化,所述初始化包括所述子窗口的像素格式設(shè)置; 繪制模塊,用于所述宿主程序根據(jù)所述圖像進(jìn)行自定義繪制。
10.根據(jù)權(quán)利要求7所述的渲染引擎的繪制裝置,其特征在于,顯示模塊,具體用于通 過非所述OpenGL的所述渲染引擎將所述圖像在所述主窗口中進(jìn)行顯示。
【文檔編號】G06F9/44GK104331297SQ201410715317
【公開日】2015年2月4日 申請日期:2014年11月28日 優(yōu)先權(quán)日:2014年11月28日
【發(fā)明者】陳泓坤 申請人:廣東威創(chuàng)視訊科技股份有限公司