CN111108475B - 一种cocos2dx嵌入cef实现透明网页的方法 - Google Patents

一种cocos2dx嵌入cef实现透明网页的方法 Download PDF

Info

Publication number
CN111108475B
CN111108475B CN201980003323.7A CN201980003323A CN111108475B CN 111108475 B CN111108475 B CN 111108475B CN 201980003323 A CN201980003323 A CN 201980003323A CN 111108475 B CN111108475 B CN 111108475B
Authority
CN
China
Prior art keywords
cef
webpage
cos2dx
data
layer
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
CN201980003323.7A
Other languages
English (en)
Other versions
CN111108475A (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.)
Wuhan Anchenxin Information Technology Co ltd
Original Assignee
Vtron Group Co 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 Vtron Group Co Ltd filed Critical Vtron Group Co Ltd
Publication of CN111108475A publication Critical patent/CN111108475A/zh
Application granted granted Critical
Publication of CN111108475B publication Critical patent/CN111108475B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Abstract

本发明提供了一种cocos2dx嵌入cef实现透明网页的方法,在cocos2dx中创建显示网页层,开启刷新定时器,创建浏览器对象;创建cef事件处理对象并注册;cef将RGBA位图数据回调给网页层,网页层将数据缓存到队列尾部;在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,使用数据初始化或更新纹理;网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则执行上一步。本发明提供的方法,cef离屏渲染回调位图数据,cocos2dx显示位图实现透明网页,填补了cocos2dx在Windows平台下内嵌web的空缺。

Description

一种cocos2dx嵌入cef实现透明网页的方法
技术领域
本发明涉及网页处理技术领域,特别是涉及一种cocos2dx嵌入cef实现透明网页的方法。
背景技术
Cocos2dx是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。Cocos2dx的核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows,Mac OSX 3及Tizen等,省事省力省成本。
在现有cocos2dx框架下,只有在Android端和ios端实现了webview支持网页内嵌打开,并可实现透明网页;然而在Windows平台下,cocos2dx框架没有提供相应的webview功能。因此在Windows下目前只能另辟蹊径,来实现网页内嵌的功能。
因此,在Windows平台下,cocos2dx框架下实现透明网页的加载,填补cocos2dx在Windows平台下内嵌加载网页的空缺,是本领域技术人员需要解决的技术问题。
发明内容
本发明提供了一种cocos2dx嵌入cef实现透明网页的方法,以解决Windows平台下无法在cocos2dx框架下实现透明网页的加载的问题,填补了cocos2dx在Windows平台下内嵌加载网页的空缺。
为解决上述技术问题,本发明的技术方案为:
一种cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:
S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
S5:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S4。
进一步地,在S1之前还包括:初始化cef环境,创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化。
进一步地,S1中开启所述网页层的刷新定时器具体包括:调用ScheduleUpdate开启update定时器。
进一步地,S1中创建浏览器对象具体包括:调用CefBrowserHost::CreateBrowser创建浏览器对象。
进一步地,S3中将渲染后得到的RGBA的位图数据回调给所述网页层进一步包括:cef通过OnPaint回调出渲染后得到的RGBA的位图数据,通知网页层有数据回调。
进一步地,在S3之前还包括:cef通过所述事件处理对象回调出网页显示的大小和位置。
进一步地,S5中所述网页层检测是否有键盘、鼠标事件触发进一步包括:所述网页层注册mouse down、move和up事件的监听,将收到的坐标封装成windows鼠标消息事件,调用cef的发送鼠标消息接口传递给cef内部响应。
进一步地,S5中所述网页层检测是否有键盘、鼠标事件触发还进一步包括:所述网页层重定向主窗口的窗口过程,检测到键盘事件时,调用cef的发送键盘消息接口传递给cef内部响应。
进一步地,S3中将渲染后得到的RGBA的位图数据回调给所述网页层之前还包括:判断是否有位图数据回调,当有位图数据时,将所述位图数据缓存入队列。
进一步地,在S5步骤之后还包括:关闭主窗口时,发送退出消息给cef,等待cef退出循环,调用CefShutdown释放cef环境。
本发明提供了一种cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;S5:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S4。本发明提供的cocos2dx嵌入cef实现透明网页的方法,cef启用离屏渲染功能,将网页内容渲染成RGBA的位图数据后回调给cocos2dx的layer层,在cocos2dx框架下显示位图实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌web的空缺。
附图说明
图1为本发明一种cocos2dx嵌入cef实现透明网页的方法中cocos2dx和cef交互时序图。
图2为本发明一种cocos2dx嵌入cef实现透明网页的方法的实现流程图。
具体实施方式
本发明实施例提供了一种cocos2dx嵌入cef实现透明网页的方法,cef离屏渲染回调位图数据,cocos2dx显示位图数据实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌web的空缺。
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
在Windows下实现透明网页的功能,一般会从设置窗口透明度来实现,但是微软限制只能设置主窗口的透明度,无法修改子窗口透明度,因此,想要在cocos2dx主窗口以子窗口的形式嵌入cef浏览器的这一功能是不能实现透明网页的。
另外设置窗口透明度的方法会将整个窗口都透明化,导致网页中非透明的东西显示不出来。如果采用抠颜色值的方式来实现透明,那么网页中要显示的内容不能使用该颜色值,且抠颜色的效果会出现明显的毛边。因此,想要实现透明网页的功能,只能通过cef提供的离屏渲染功能来回调出带有透明值的rgb数据,cocos2dx能够很好地显示这种数据。
本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,采用谷歌开源浏览器框架cef3的离屏渲染功能来加载网页,并输出RGBA图像,cocos2dx来渲染该图像,当Alpha通道设置为0时,即可显示为透明。cocos2dx捕捉鼠标和键盘的输入事件,传递给cef3来完成响应。基于这种方案,可在cocos2dx框架下实现透明网页的加载,填补了cocos2dx在Windows平台下内嵌加载网页的空缺。
本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,包括以下步骤:
S100:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
S200:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
S300:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
S400:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
S500:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则转去执行S400。
本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,基本实现思路为:
初始化cef环境:创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化;
在cocos2dx的layer中开启update定时器,每帧刷新前检查缓存队列中是否有网页数据;
创建cef事件处理对象CefClient,调用CefBrowserHost::CreateBrowser创建浏览器,并将事件对象注册进去;
cef通过CefClient回调出来获取网页显示的大小和位置;
cef通过OnPaint回调出RGBA的网页数据,通知layer有数据回调;
layer将数据缓存到队列;
Update定时器检测到数据,初次时使用数据创建纹理和精灵,后续直接使用数据更新纹理;
layer注册mouse down,move和up事件,将收到的坐标封装成windows鼠标消息事件,调用SendMouseMoveEvent发送给cef;
layer重定向主窗口的窗口过程,检测到键盘事件时,调用SendKeyEvent转发给cef;
主程退出时,发送退出消息给cef,并等待cef退出自身循环,调用CefShutdown释放cef环境。
本发明实施例中cocos2dx和cef交互主要时序图,其中cocos2dx主线程的流程为:
(1)初始化,创建显示网页层layer;
(2)创建子线程用来执行cef主循环;
(3)ScheduleUpdate开启layer的update定时器,每帧刷新前检查缓存队列中是否有网页数据;
(4)调用CefBrowserHost::CreateBrowser创建浏览器对象;
(5)在update回调中检测缓存队列中是否有数据;若没有数据,则重复检测;若有数据,取出一帧图像,初始时创建纹理和背景精灵,以数据初始化纹理,后续直接更新纹理;
(6)检测是否有鼠标、键盘事件触发,若有,则重组成windows消息,发送给cef处理;若没有,则重复第(5)步。
cef子线程的流程为:
(1)初始化cef环境,开启离屏渲染,创建消息循环对象,创建ClientApp对象,调用CefInitialize完成初始化;
(2)调用cef消息循环,进入循环,分发处理消息;
(3)检测是否有位图数据回调,若有,则返回给cocos2dx主线程,主线程将数据进行缓存;
(4)检测是否退出,若是,则停止cef消息循环,释放cef环境,退出子线程。
本发明实施例提供的cocos2dx嵌入cef实现透明网页的方法,cef启用离屏渲染功能,注册render回调。加载网页成功后,通过其渲染功能,会将网页内容渲染成RGBA的位图数据,通过render的OnPaint回调接口,将该位图数据回调给cocos2dx的layer层。layer拿到该位图数据后,先缓存到内存队列尾部,然后在cocos2dx主线程中开启update定时器,在每一帧渲染前,在定时器回调中获取队列起始位图数据,更新到layer的背景精灵的纹理中,更新完后删除队首位图数据。
对于交互事件的处理过,对于鼠标事件,在cocos2dx的layer注册mouse的down,move和up事件的监听,在回调接口中获取鼠标的坐标,然后将坐标包装成Windows的鼠标事件,调用cef的发送鼠标接口传递给cef内部响应。对于键盘事件,通过win32 APISetWindowLong重新设置cocos2dx主窗口的窗口过程函数为新的接口,在该接口中检测键盘事件,若是键盘事件,直接调用cef的发送键盘消息接口将键盘事件传递给cef内部处理。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种cocos2dx嵌入cef实现透明网页的方法,其特征在于,包括以下步骤:
S1:在cocos2dx中创建并显示网页层,开启所述网页层的刷新定时器,创建浏览器对象;
S2:创建cef事件处理对象,注册所述事件处理对象到所述浏览器对象;
S3:启动cef消息循环,分发处理消息,将渲染后得到的RGBA的位图数据回调给所述网页层,所述网页层将所述数据缓存到队列尾部;
S4:所述网页层在刷新定时器回调中检测缓存队列中是否有网页数据,若无数据,则重复检测;若有数据,则判断背景精灵是否已创建,若未创建,则使用所述数据创建背景精灵和初始化纹理,若已创建,则使用所述数据更新纹理;
S5:所述网页层检测是否有键盘、鼠标事件触发,若有,则重组消息发送给cef;若无,则执行S4。
2.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S1之前还包括:初始化cef环境,创建全局CefApp对象,开启离屏渲染,调用CefInitialize完成初始化。
3.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S1中开启所述网页层的刷新定时器具体包括:调用ScheduleUpdate开启update定时器。
4.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S1中创建浏览器对象具体包括:调用CefBrowserHost::CreateBrowser创建浏览器对象。
5.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S3中将渲染后得到的RGBA的位图数据回调给所述网页层进一步包括:cef通过OnPaint回调出渲染后得到的RGBA的位图数据,通知网页层有数据回调。
6.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S3之前还包括:cef通过所述事件处理对象回调出网页显示的大小和位置。
7.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S5中所述网页层检测是否有键盘、鼠标事件触发进一步包括:所述网页层注册mouse down、move和up事件的监听,将收到的坐标封装成windows鼠标消息事件,调用cef的发送鼠标消息接口传递给cef内部响应。
8.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S5中所述网页层检测是否有键盘、鼠标事件触发还进一步包括:所述网页层重定向主窗口的窗口过程,检测到键盘事件时,调用cef的发送键盘消息接口传递给cef内部响应。
9.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,S3中将渲染后得到的RGBA的位图数据回调给所述网页层之前还包括:判断是否有位图数据回调,当有位图数据时,将所述位图数据缓存入队列。
10.根据权利要求1所述的cocos2dx嵌入cef实现透明网页的方法,其特征在于,在S5步骤之后还包括:关闭主窗口时,发送退出消息给cef,等待cef退出循环,调用CefShutdown释放cef环境。
CN201980003323.7A 2019-12-27 2019-12-27 一种cocos2dx嵌入cef实现透明网页的方法 Active CN111108475B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/129049 WO2021128240A1 (zh) 2019-12-27 2019-12-27 一种cocos2dx嵌入cef实现透明网页的方法

Publications (2)

Publication Number Publication Date
CN111108475A CN111108475A (zh) 2020-05-05
CN111108475B true CN111108475B (zh) 2021-03-09

Family

ID=70426486

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980003323.7A Active CN111108475B (zh) 2019-12-27 2019-12-27 一种cocos2dx嵌入cef实现透明网页的方法

Country Status (2)

Country Link
CN (1) CN111108475B (zh)
WO (1) WO2021128240A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111694619A (zh) * 2020-06-09 2020-09-22 重庆锐云科技有限公司 基于刷新率的定时器实现方法、装置、设备及存储介质
CN114554290A (zh) * 2020-11-27 2022-05-27 青岛海信宽带多媒体技术有限公司 一种iptv浏览器容错处理方法、装置及终端
CN113190151B (zh) * 2021-04-21 2023-04-18 宝宝巴士股份有限公司 基于cocos2d-x的实现翻页效果的方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140157246A1 (en) * 2012-12-04 2014-06-05 Zynga Inc. Building cross-platform asynchronous games
CN104244093B (zh) * 2014-09-03 2020-06-05 深圳市同洲电子股份有限公司 一种图形界面显示方法及播放终端
CN105630510A (zh) * 2016-02-04 2016-06-01 腾讯科技(深圳)有限公司 应用页面的动画处理方法和装置
CN106528174B (zh) * 2016-11-25 2019-11-08 上海野火网络科技有限公司 基于cocos2dx的flash渲染方法和渲染引擎
CN108334273B (zh) * 2018-02-09 2020-08-25 网易(杭州)网络有限公司 信息显示方法及装置、存储介质、处理器、终端
CN109646955B (zh) * 2018-12-20 2022-06-24 网易(杭州)网络有限公司 游戏界面生成方法、装置和存储介质
CN110321193B (zh) * 2019-05-05 2022-03-18 四川盛趣时代网络科技有限公司 一种基于Direct3D共享纹理的交互方法及系统

Also Published As

Publication number Publication date
WO2021128240A1 (zh) 2021-07-01
CN111108475A (zh) 2020-05-05

Similar Documents

Publication Publication Date Title
CN111108475B (zh) 一种cocos2dx嵌入cef实现透明网页的方法
US8350868B2 (en) Method of compositing variable alpha fills supporting group opacity
CN106445508B (zh) 一种游戏引擎
CN107122176B (zh) 一种图形绘制方法及装置
CN108965471B (zh) 一种智能电视上浏览器内存改善方法
CN105069831B (zh) 一种基于Hook技术获取OpenGL渲染画面的方法和系统
US10643580B2 (en) Method and device for switching playing mode of a mobile terminal, storage medium and program
AU2021229220B2 (en) Image processing method and device
US9558014B2 (en) System, method and apparatus for transparently enabling software applications with adaptive user interfaces
US20230004620A1 (en) Page display method
CN116821040B (zh) 基于gpu直接存储器访问的显示加速方法、装置及介质
CN112612436A (zh) 一种投屏切换方法、装置、设备及存储介质
WO2015196756A1 (zh) 一种运行应用程序的方法及设备
US20220035491A1 (en) List display method and apparatus, computer device and computer-readable medium
CN110471700B (zh) 图形处理方法、装置、存储介质及电子设备
CN106406862B (zh) 一种屏幕获取方法及系统
CN115393505A (zh) 渲染方法、引擎、电子设备及存储介质
CN106648602A (zh) 页面加载方法
US20240087206A1 (en) Systems and methods of rendering effects during gameplay
CN104699498B (zh) 基于Android平台的通过列表控件异步加载图片的优化方法
CN111402349B (zh) 渲染方法、渲染装置和渲染引擎
CN111008050B (zh) 页面任务执行方法、装置、终端及存储介质
CN112988357B (zh) 全景影像显示方法、计算机存储介质及电子设备
WO2010140743A1 (ko) 애니메이션 폰트파일 구조 및 휴대용 단말기의 텍스트 출력방법
CN113791857B (zh) Linux系统中应用窗口背景模糊处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20240416

Address after: Room 05, 27th Floor, Building 1, Guannan Fuxing Pharmaceutical Park, No. 58 Guanggu Avenue, Donghu New Technology Development Zone, Wuhan City, Hubei Province, 430000 (Wuhan Area of Free Trade Zone)

Patentee after: Wuhan Anchenxin Information Technology Co.,Ltd.

Country or region after: China

Address before: 233 Kezhu Road, Guangzhou hi tech Industrial Development Zone, Guangdong 510670

Patentee before: VTRON GROUP Co.,Ltd.

Country or region before: China