一种图像处理方法、电子设备及存储介质与流程

未命名 09-08 阅读:144 评论:0
一种图像处理方法、电子设备及存储介质1.本技术是分案申请,原申请的申请号是202210193791.9,原申请日是2022年2月28日,原申请的全部内容通过引用结合在本技术中。
技术领域
:2.本技术涉及图像处理
技术领域
:,尤其涉及一种图像处理方法、电子设备及存储介质。
背景技术
::3.随着屏幕技术的发展,手机、平板等电子设备的屏幕分辨率越来越高,从而可以显示更高分辨率的图像,提供更好的视觉体验。与此同时,电子设备在显示图像之前,需要对图像进行渲染处理。其中,针对高分辨率的图像,在渲染过程中则会产生更高的算力和功耗的开销,进一步则可能导致电子设备出现发热或卡顿的现象,从而影响用户体验。4.与此同时,在现有技术中,提供有一些可以降低渲染负载的方案。但是,现有技术中降低渲染负载的方案,往往以牺牲图像的清晰度为代价。从而会导致最终展示的图像模糊。技术实现要素:5.本技术实施例提供一种图像处理方法、电子设备及存储介质,在降低渲染负载的同时,可以兼顾图像的画质。6.第一方面,本技术实施例提供一种图像处理方法,该方法可以应用于电子设备,该电子设备上运行有应用程序。该方法包括:接收应用程序下发的第一绑定指令,第一绑定指令中的操作类型不是只读类型、且第一绑定指令中的第一帧缓冲标识指示用于在屏渲染的第一帧缓冲。接收到第一绑定指令,则表明即将要进行在屏渲染。接收应用程序下发的第一渲染指令,第一渲染指令指示绘制第一图像内容。执行第二渲染指令,在第一帧缓冲中绘制第二图像内容,第二渲染指令指示绘制第二图像内容,第二图像内容是基于第一图像内容生成的,第二图像内容的分辨率高于第一图像内容的分辨率。7.综上所述,采用本技术实施例的方法,电子设备在确定即将要进行在屏渲染后,当接收到渲染指令时,不是直接将渲染指令指示绘制的第一图像内容绘制到在屏渲染的第一帧缓冲中,而是将第二图像内容绘制到第一帧缓冲中。其中,第二图像内容是对第一图像内容提升分辨率后的内容。如此,可以在将第一图像内容提升分辨率后再绘制到第一帧缓冲中,从而可以提升显示的图像画质。8.在第一方面的一种可能的设计方式中,第一图像内容在第二帧缓冲中渲染得到,第二帧缓冲用于离屏渲染,第二帧缓冲绑定有第一纹理,第一纹理的大小满足预设条件。其中,纹理的大小可以表示存储在该纹理中的图像内容的分辨率。9.也就是说,采用本实施例的方法,电子设备针对在第二帧缓冲中渲染得到的第一图像内容,可以先提升分辨率,然后绘制到第一帧缓冲中。其中,第二帧缓冲绑定的纹理附件的大小满足预设条件。如此,可以将分辨率满足一定条件的图像内容,在提升分辨率后绘制到第一帧缓冲中。从而实现有针对性的提升分辨率。10.在第一方面的另一种可能的设计方式中,第一纹理的大小包括第一纹理的宽度和第一纹理的高度。第一纹理的大小满足预设条件,包括:第一纹理的宽度大于第一预设值和第一纹理的高度大于第一预设值。和/或,第一纹理的大小满足预设条件,包括:第一纹理的宽度和第一纹理的高度的比值,与电子设备的显示屏的宽度和显示屏的高度的比值之差在预设范围内。11.也就是说,采用本实施例的方法,电子设备可以将大小较大的,和/或,宽高比接近屏幕宽高比的纹理中存储的图像内容,先提升分辨率,然后绘制到第一帧缓冲。应理解,存储在大小较大的,和/或,宽高比接近屏幕宽高比的纹理中的图像内容,通常是较为复杂的内容(如游戏主场景)。这些较复杂的内容通常决定了图像的画质,通过对其提升分辨率然后绘制到第一帧缓冲中,则可以极大的改善整体画质。12.在第一方面的另一种可能的设计方式中,第一图像内容存储在第一纹理中,第二图像内容存储在第二纹理中,第一渲染指令中包括第一纹理标识,第一纹理标识指示第一纹理。在第一渲染指令中携带第一纹理标识,则可以指示待绘制的图像内容是第一纹理中存储的图像内容,即第一图像内容。在执行第二渲染指令之前,方法还包括:将第一渲染指令中的第一纹理标识修改为第二纹理标识,得到第二渲染指令,第二纹理标识指示第二纹理。13.也就是说,采用本实施例的方法,电子设备可以通过修改第一渲染指令中携带的纹理的标识,以改变待绘制的图像内容。在将第一纹理标识修改为第二纹理标识后,则指示待绘制的图像内容是第二纹理中存储的图像内容,如第二图像内容。如此,可以准确指示将提升分辨率后的第二图像内容绘制到第一帧缓冲中。14.在第一方面的另一种可能的设计方式中,电子设备还可以在将第二图像内容绘制到第一帧缓冲的过程中,进一步对第一图像内容进行锐化处理和/或降噪处理,以进一步提升图像画质。具体的,第一渲染指令中还包括第一程序标识,第一程序标识指示第一可执行程序program,第一program用于根据第一program绑定的第一着色器绘制图像,第一着色器中未集成第一模型,第一模型用于图像的锐化处理和/或降噪处理。也就是说,第一program不能用于对图像进行锐化处理和/或降噪处理。相应的,在上述将第一渲染指令中的第一纹理标识修改为第二纹理标识的基础上,还可以将第一渲染指令中的第一程序标识修改为第二程序标识,得到第二渲染指令。第二程序标识指示第二program,第二program根据第二program中绑定的第二着色器绘制图像,第二着色器中集成有第一模型。也就是说,第二program可以用于对图像进行锐化处理和/或降噪处理。执行第二渲染指令,在第一帧缓冲中绘制第二图像内容,包括:执行第二渲染指令,在第一帧缓冲中绘制经锐化处理后的第二图像内容,和/或,在第一帧缓冲中绘制经降噪处理后的第二图像内容。15.也就是说,采用本实施例的方法,电子设备可以在通过提升分辨率来提升画质的基础上,进一步通过锐化处理和/或降噪处理来提升画质。进一步提升渲染的效果。16.在第一方面的另一种可能的设计方式中,在接收应用程序下发的第一绑定指令之前,方法还包括:接收应用程序下发的第一创建命令,第一创建命令用于创建第三帧缓冲,第一创建命令中包括第三帧缓冲绑定的第三纹理的大小,第三纹理的大小满足预设条件。存储第三纹理的大小。第一纹理的大小满足预设条件,包括:第一纹理的大小等于第三纹理的大小。17.也就是说,采用本实施例的方法,可以在在屏渲染之前,记录下满足预设条件的纹理的大小,即第三纹理的大小。然后,仅需确定第一纹理的大小等于第三纹理的大小,即可高效确定第一纹理的大小是否满足预设条件。18.在第一方面的另一种可能的设计方式中,在接收应用程序下发的第一绑定指令之前,方法还包括:接收应用程序下发的第二绑定指令,第二绑定指令中的操作类型不是只读类型、且第二绑定指令中的第二帧缓冲标识未指示第一帧缓冲。存储第二帧缓冲标识。19.然后,接收应用程序下发的第三绑定指令,第三绑定指令中的操作类型不是只读类型、且第三绑定指令中的第三帧缓冲标识未指示第一帧缓冲。将存储的第二帧缓冲标识替换为第三帧缓冲标识。20.也就是说,采用本实施例的方法,可以在每次接收到指示在非第一帧缓冲(即为离屏帧缓冲)中执行绘制操作的绑定指令后,则存储指示绑定的帧缓冲的帧缓冲标识。如此,可以始终记录最近的绘制操作针对的帧缓冲,以便后续针对在该帧缓冲中渲染得到的内容先提升分辨率,然后绘制到第一帧缓冲中。21.进一步的,在接收应用程序下发的第二绑定指令之后,方法还包括:接收应用程序下发的第三渲染指令,第三渲染指令中指示执行的渲染操作包括绘制操作。在存储第二帧缓冲标识,包括:响应于接收到第三渲染指令,存储第二帧缓冲标识。22.也就是说,采用本实施例的方法,电子设备进一步根据渲染指令确定需要执行的渲染操作包括绘制操作的情况下,才存储帧缓冲标识。如此,可以使得存储的帧缓冲标识准确指示最近的执行绘制操作的帧缓冲。23.在第一方面的另一种可能的设计方式中,由于分辨率较高的内容通常绘制在第一帧缓冲的离屏帧缓冲中,因此,在接收应用程序下发的第一绑定指令之后,方法还包括:判断待处理帧缓冲绑定的待处理纹理的大小是否满足预设条件,待处理帧缓冲是存储的帧缓冲标识指示的帧缓冲。如此,针对记录的帧缓冲标识指示的帧缓冲进行预设条件的判断,则有极大的可能确定出第二帧缓冲。如果满足条件,则第二帧缓冲是待处理帧缓冲,第一图像内容是在待处理帧缓冲中渲染得到的,第一纹理是待处理纹理。相应的,执行第二渲染指令,包括:若待处理纹理的大小满足预设条件,执行第二渲染指令。从而实现将待处理帧缓冲中渲染得到的图像内容,在提升分辨率后绘制到第一帧缓冲中。24.在第一方面的另一种可能的设计方式中,在执行第二渲染指令之前,还包括:处理第一图像内容,生成第二图像内容。25.也就是说,采用本实施例的方法,电子设备可以在执行第二渲染指令之前,提升第一图像内容的分辨率,为后续执行第二渲染指令做准备。26.在第一方面的另一种可能的设计方式中,处理第一图像内容,包括:调用第三program处理第一图像内容,第三program用于根据第三program中绑定的第三着色器绘制图像,第三着色器中集成有第二模型的算法源码,第二模型用于提升图像的分辨率。27.也就是说,采用本实施例的方法,电子设备可以将用于提升图像分辨率的模型集成在着色器中,然后绑定在program中。从而便于实现渲染。28.在第一方面的另一种可能的设计方式中,采用第一标记来指示已完成模型(例如第一模型、第二模型)初始化。第一帧缓冲的绑定指令(即第一绑定指令)中,通常会包括绘制大小,该绘制大小可以限制在第一帧缓冲中完成渲染的图像内容的大小。在接收应用程序下发的第一绑定指令之后,方法还包括:获取第一标记,第一标记指示已完成模型初始化,模型包括第二模型。若未获取到第一标记,则存储绘制大小,若获取到第一标记,则不存储绘制大小。29.也就是说,采用本实施例的方法,电子设备可以在模型未初始化的情况下,存储第一绑定指令中携带的绘制大小,以用于后续模型初始化。30.在第一方面的另一种可能的设计方式中,在调用第三program处理第一图像内容之前,方法还包括:根据第三纹理的大小和绘制大小初始化第三program中的第二模型。经过初始化后的第二模型,可以实现将第三纹理的大小的图像内容,提升分辨率为绘制大小后输出。在初始化第三program中的第二模型后,调用第三program处理第一图像内容。31.在第一方面的另一种可能的设计方式中,在初始化第三program中的第二模型后,方法还包括:存储第一标记。即,记录已完成模型初始化。32.在第一方面的另一种可能的设计方式中,由于在接收应用程序下发的第一绑定指令和接收应用程序下发的第一渲染指令之间,需要做提升分辨率等处理,为了避免这中间绑定的帧缓冲发生改变,在接收应用程序下发的第一绑定指令之后,可以存储第二标记,第二标记指示当前绑定的是第一帧缓冲。在接收应用程序下发的第一渲染指令之后,方法还包括:获取第二标记。相应的,执行第二渲染指令,包括:若获取到第二标记,则执行第二渲染指令。33.也就是说,采用本实施例的方法,在接收到应用程序下发的第一渲染指令后,只有当绑定的帧缓冲依然是第一帧缓冲时,才执行第二渲染指令。如此,可以避免渲染出错。34.在第一方面的另一种可能的设计方式中,在存储第二标记之后,方法还包括:在接收到应用程序下发的第四绑定指令后,删除第二标记,第四绑定指令中的第四帧缓冲标识未指示第一帧缓冲。如此,可以在绑定的帧缓冲不是第一帧缓冲后,及时删除第二标记。35.在第一方面的另一种可能的设计方式中,第二模型有多个,多个第二模型一一对应集成在多个第三着色器中,多个着色器一一绑定在多个第三program中;在调用第三program处理第一图像内容之前,方法还包括:根据用户设置的增强等级和/或增强方式选择目标模型,目标模型是多个第二模型中的一个。相应的,调用第三program处理第一图像内容,包括:调用目标模型所在的第三program处理第一图像内容。36.也就是说,采用本实施例的方法,电子设备可以根据用户设置来动态选择目标模型,以用于当前帧的处理。从而可以提升处理的灵活性。37.第二方面,本技术实施例提供一种电子设备,所述电子设备上运行有应用程序,所述电子设备包括:存储器和一个或多个处理器,所述存储器与所述处理器耦合;其中,所述存储器中存储有计算机程序代码,所述计算机程序代码包括计算机指令,当所述计算机指令被所述处理器执行时,使得所述电子设备执行如第一方面及其任一种可能的设计方式所述的方法。38.第三方面,本技术实施例提供一种芯片系统,该芯片系统应用于包括显示屏和存储器的电子设备;所述芯片系统包括一个或多个接口电路和一个或多个处理器;所述接口电路和所述处理器通过线路互联;所述接口电路用于从所述电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括所述存储器中存储的计算机指令;当所述处理器执行所述计算机指令时,所述电子设备执行如第一方面及其任一种可能的设计方式所述的方法。39.第四方面,本技术实施例还提供一种计算机存储介质,该计算机存储介质包括计算机指令,当所述计算机指令在电子设备上运行时,使得电子设备执行如第一方面及其任一种可能的设计方式所述的方法。40.第五方面,本技术提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面及其任一种可能的设计方式所述的方法。41.可以理解地,上述提供的第二方面所述的电子设备,第三方面所述的芯片系统,第四方面所述的计算机存储介质,第五方面所述的计算机程序产品所能达到的有益效果,可参考第一方面及其任一种可能的设计方式中的有益效果,此处不再赘述。附图说明42.图1为本技术实施例一种图像显示的原理示意图;43.图2为本技术实施例另一种图像显示的原理示意图;44.图3a为本技术实施例一种图像处理方法的流程示意图;45.图3b为本技术实施例一种图像处理的原理示意图;46.图3c为本技术实施例另一种图像处理方法的流程示意图;47.图4a为本技术实施例另一种图像处理方法的流程示意图;48.图4b为本技术实施例另一种图像处理的原理示意图;49.图5为本技术实施例一种画质增强设置的界面示意图;50.图6为本技术实施例另一种图像处理方法的流程示意图;51.图7为本技术实施例提供的一种电子设备的软件结构框图;52.图8为本技术实施例提供的一种图像处理方法的原理示意图;53.图9a-图9b为本技术实施例提供的另一种图像处理方法的流程图;54.图10为本技术实施例提供的另一种图像处理方法的原理示意图;55.图11为本技术实施例提供的一种芯片系统的组成示意图。具体实施方式56.以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。57.在用户使用电子设备中的游戏、建模、家居设计等需要显示大量且复杂的图像的应用中,电子设备需要完成大量的渲染处理,然后显示图像。58.常规技术中,当应用程序(如游戏应用)需要显示图像时,可以向电子设备的中央处理器(centralprocessingunit,cpu)发出针对该图像的渲染命令。cpu可以根据这些渲染命令,控制电子设备的图形处理器(graphicsprocessingunit,gpu)对该图像进行渲染,渲染后的数据可存储至电子设备的默认帧缓冲(providedframebuffer)中。默认帧缓冲可以是电子设备在内存中为当前需要显示的图像配置的存储空间,可在图像渲染前创建,默认帧缓冲中包含的内容可以全部在屏幕上呈现。也就是说,在电子设备需要显示某一图像时,可以根据默认帧缓冲中存储的该图像对应的数据,控制显示屏显示该图像。59.在一些渲染场景中,一帧图像中包括较多(或复杂)的图形元素,或者包括较多(或复杂)的图像效果(如阴影),导致往往需要多个步骤才能完成渲染。那么,若全在默认帧缓冲中完成渲染,则可能因为在默认帧缓冲中依次完成多个渲染步骤而导致图像无法一次性完全显示。因此,在上述渲染场景中,则需要创建多个离屏帧缓冲来实现渲染。电子设备创建多个离屏帧缓冲后,可以将多个渲染步骤分解在多个离屏帧缓冲中完成,再将多个离屏帧缓冲中的渲染结果绘制到(贴到)默认帧缓冲中。该多个离屏帧缓冲与默认帧缓冲作用类似,用于图像渲染。只是该多个离屏帧缓冲中的内容不会直接在屏幕上呈现,实现离屏渲染(off-screenrendering),而默认帧缓冲中的内容会直接在屏幕上呈现,实现在屏渲染(on-screenrendering)。在屏渲染,又称为当前屏幕渲染,指的是渲染操作是在当前用于显示的屏幕缓冲区(即默认帧缓冲)中进行。离屏渲染,指的是渲染操作是在当前用于显示的屏幕缓冲区(即默认帧缓冲)以外开辟的缓冲区(即离屏帧缓冲)中进行。60.参见图1,以电子设备是手机为例,图像a包含较复杂的图形元素和效果,渲染图像a之前,可以创建两个离屏帧缓冲(fb1,fb2)。在执行对图像a的渲染时,可以在fb1中完成一些渲染步骤,实现对图像a的一部分几何图形和/或效果的渲染,在fb2中完成另一些渲染步骤,实现对图像a中的另一部分几何图形和/或效果的渲染。然后将fb1和fb2中的渲染结果绘制到默认帧缓冲(fb0)中。其中,fb1和fb2上的渲染结果不会直接在屏幕上呈现,实现离屏渲染。最后,fb0上的内容会直接在屏幕上呈现,实现在屏渲染。61.针对一些高负载的渲染场景,例如,高分辨率游戏的渲染场景,为了降低渲染负载,会采用较低的分辨率在离屏帧缓冲中实现离屏渲染。与此同时,由于用户界面(userinterface,ui)元素,如游戏界面的操作控件(手柄),其线条较细。若将ui在较低分辨率的离屏帧缓冲中实现离屏渲染,然后绘制到默认帧缓冲中,则会导致最终在屏幕上显示的ui的效果较差。例如,线条不清晰。因此,为了提升渲染效果,通常会在默认帧缓冲中绘制ui。这样,在将离屏帧缓冲的渲染结果绘制到默认帧缓冲后,则可以由离屏帧缓冲中绘制到默认帧缓冲的渲染结果和在默认帧缓冲中绘制的ui构成完整的界面图像。如此,虽然可以在提升渲染效果的同时,降低渲染负载,但是由于在离屏渲染时采用了较低的分辨率,则会导致电子设备显示的图像的画质相对模糊。62.结合图1,并以高分辨率游戏的渲染场景为例。先需要说明的是,在游戏渲染过程中,渲染游戏主场景的功耗是最高的。其中,游戏主场景是游戏图像的主体,其通常包括人物、建筑、山体等内容,以及针对这些内容而添加的效果(如针对建筑物添加的光照效果)而构成。因此,在fb1、fb2中以较低的分辨率完成游戏主场景以及图像的整体效果(如阴影效果、泛光(bloom)效果、暗黑效果)等内容的渲染,可以极大的降低渲染负载。但是,由于游戏主场景是游戏图像主体,其决定了游戏画质,在离屏帧缓冲中采用较低的分辨率来渲染游戏主场景,将影响最终显示的游戏画质。63.基于上述问题,参见图2,本技术提供一种图像处理方法,该方法可应用于手机、平板等有图像渲染需求的电子设备。具体地,在将离屏帧缓冲中的渲染结果绘制到默认帧缓冲之前,确认离屏帧缓冲中绘制有预设内容的目标帧缓冲(如fb2)。其中,预设内容是指图像中渲染所需功耗高、且决定图像画质的内容,如游戏主场景。将该目标帧缓冲中的渲染结果进行画质增强处理,如提高分辨率。这样,预设内容也得到了增强。然后,在将离屏帧缓冲中的渲染结果绘制到默认帧缓冲中时,对于目标帧缓冲,则是将增强后的结果绘制到默认帧缓冲中。最后,由离屏帧缓冲中绘制到默认帧缓冲的渲染结果和在默认帧缓冲中绘制的ui构成完整的界面图像。64.采用本技术实施例的方法,电子设备在离屏帧缓冲中采用较低的分辨率来完成预设内容的渲染,从而可以降低渲染负载。与此同时,电子设备将在离屏帧缓冲中渲染得到的预设内容进行画质增强处理后,再绘制到默认帧缓冲中。那么,最终电子设备的显示屏中显示的是画质提升后的预设内容。如此,电子设备可以在降低渲染负载的同时,保证画质的清晰度。65.本技术实施例提供的图像处理方法,可以应用于电子设备中,电子设备可以是手机、平板电脑、桌面型计算机、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、上网本,以及蜂窝电话、个人数字助理(personaldigitalassistant,pda)、人工智能(artificialintelligence,ai)设备、可穿戴式设备、车载设备、智能家居设备和/或智慧城市设备等电子设备。本技术实施例对该设备的具体形态不作特殊限制。66.为了便于说明,下文实施例中,将以电子设备中的游戏应用为例来说明本技术方案。应理解,当应用程序是其他需要显示大量且复杂的图像的应用,如建模应用时,其实现原理也与之类似。本文中将不再一一列举。67.示例性的,在游戏应用中,预设内容是游戏主场景。并且,游戏应用可使用opengl图形库完成渲染相关的处理。在其他的不同于opengl的渲染引擎/渲染环境下,如vulkan图形库中,实施机制类似,仅对应的函数可能存在差异。68.在游戏开始运行(加载)时,游戏应用进入资源分配阶段,游戏应用会向cpu下发创建帧缓冲资源命令,cpu控制gpu创建图像对应的帧缓冲(fb),为后续的图像渲染做准备。在此需要说明的是,默认帧缓冲和离屏帧缓冲可以统称为fb,下文中凡是直接出现fb,而未区分离屏帧缓冲和默认帧缓冲的地方,则可以理解为包括默认帧缓冲和离屏帧缓冲。69.在资源分配阶段结束后,游戏应用需要渲染某个图像时,可以向cpu下发渲染命令。在该渲染命令中,可以指示渲染图像所需要调用的fb,以及在fb中需要执行的渲染操作。70.本技术实施例,cpu拦截游戏应用下发的渲染命令,并确定所需调用的fb。当cpu确定出需要调用默认帧缓冲(如fb0)时,则表明即将开始在默认帧缓冲(如fb0)中完成相应的渲染步骤,如将离屏帧缓冲中的渲染结果绘制到默认帧缓冲(如fb0)中,在默认帧缓冲(如fb0)中绘制ui等。此时,cpu可以在离屏帧缓冲中确定出绘制预设内容的目标帧缓冲。然后,cpu向gpu发送对目标帧缓冲中的渲染结果进行画质增强处理的命令。gpu根据该画质增强处理的命令,对目标帧缓冲中的渲染结果进行画质增强处理,提升游戏主场景的画质。cpu根据gpu进行画质增强处理后得到的结果,修改渲染命令,并发送给gpu。gpu执行修改后的渲染命令,则可以将增强后的游戏主场景绘制到默认帧缓冲(如fb0)上。71.需要说明的是,在本技术实施例中,也可以由神经网络计算处理器(neural-networkprocessingunits,npu)来替代上述gpu完成相应的处理。其处理原理和具体实现与gpu类似,本文中不再赘述。72.需要在此说明的是,在游戏渲染中,在后的渲染步骤可能需要叠加在前的渲染步骤的渲染结果。并且,在绘制ui前,应该已经在离屏帧缓冲中完成了图像中除ui之外所有内容的渲染。因此,在每一帧图像的渲染过程中,游戏主场景通常应该被绘制在ui绘制前、最后的绘制操作(游戏主场景必须经过绘制操作才能完成渲染)针对的离屏帧缓冲中。但是,在离屏帧缓冲中完成游戏主场景的绘制后,可能还会叠加bloom、阴影等整体效果,这些整体效果也需要通过绘制操作来完成,并且会绘制在绘制游戏主场景之后的离屏帧缓冲中。即,在上述特殊情况下,在ui绘制前、最后的绘制操作针对的离屏帧缓冲中绘制的可能是bloom、阴影等整体效果。基于此,在确定离屏帧缓冲中绘制有预设内容的目标帧缓冲(如fb2)时,仅需确定在ui绘制前、最后的渲染操作针对的离屏帧缓冲,是不是绘制有预设内容的目标帧缓冲(如fb2),基本就可以准确的确定出目标帧缓冲。73.应理解,实际实施时,并不以上述确定目标帧缓冲的方式为限。示例性的,也可以当在每个离屏帧缓冲中渲染时,确定该离屏帧缓冲是否为目标帧缓冲。74.下文实施例中,将主要以确定ui绘制前、最后的绘制操作针对的离屏帧缓冲是否为目标帧缓冲(即绘制有游戏主场景的fb)的方式为例,并结合附图对本技术实施例提供的方案进行详细说明。75.示例性的,参考图3a,为本技术实施例提供的一种图像处理方法的流程示意图。该方法应用于电子设备,该电子设备可以包括应用程序、cpu、gpu和内部存储器(下面简称内存)。在图3a中,以游戏主场景在fb2完成渲染,fb0为默认帧缓冲为例,来说明本技术方案。即,fb0用于在屏渲染,fb1、fb2用于离屏渲染。并且,为了方便说明,可以将fb0称为第一帧缓冲,将绘制有游戏主场景的目标帧缓冲(如fb1或者fb2)称为第二帧缓冲。76.游戏应用在资源分配阶段中,会向cpu下发创建帧缓冲资源命令。创建帧缓冲资源命令用于创建图像对应的fb,为后续的图像渲染做准备。77.在创建帧缓冲资源命令中,可调用glgenframebuffer函数来指示创建fb,并为创建的fb赋予帧缓冲标识,如id值。并且,每个fb需要绑定纹理作为渲染指令的写入载体。例如,在纹理中写入颜色、深度和模板等信息。可调用glgentextures函数来指示创建纹理,并为创建的纹理赋予纹理标识,如纹理id。可调用glteximage2d函数为创建好的纹理配置宽度和高度,该宽度*高度则为纹理的大小。可调用glframebuffertexture2d函数用于将创建好的纹理绑定到fb上。纹理绑定在fb后,该纹理可被称为纹理附件。在本实施例中,cpu会拦截游戏应用下发的创建帧缓冲资源命令。78.301、cpu响应于接收到游戏应用下发的创建fb2资源命令,确定创建fb2资源命令中指示绑定的纹理附件1的大小。79.其中,创建fb2资源命令可以称为第一创建命令,将第一创建命令指示创建的fb称为第三fb,将第三fb绑定的纹理称为第三纹理。80.在本实施例中,响应于拦截到创建帧缓冲资源命令,cpu可以通过识别创建帧缓冲资源命令中glteximage2d函数携带的宽度值和高度值,确定当前创建的帧缓冲绑定的纹理附件的大小为宽度*高度。该纹理附件的大小也可以理解为当前创建的帧缓冲的分辨率。81.以如下创建fb2资源命令为例:82.unsignedintfb2;//定义一个帧缓冲对象,变量名定义为fb2;83.glgenframebuffers(1,&fb2);//创建帧缓冲fb2;84.glbindframebuffer(gl_framebuffer,fb2);//绑定fb2,其中gl_framebuffer用于指示fb2类型为可读可写类型;85.unsignedinttexturecolor;//定义一个纹理,变量名定义为texturecolor;86.glgentextures(1,&texturecolor1);//创建纹理texturecolor1;87.glbindtexture(gl_texture_2d,texturecolor1);//绑定纹理texturecolor1,其中gl_texture_2d用于指示纹理类型为2d纹理;88.glteximage2d(gl_texture_2d,0,gl_rgb,1280,626,0,gl_rgb,gl_unsigned_byte,null);//给纹理texturecolor1分配一个1280*626大小的内存空间,即texturecolor1的大小为1280*626;其中函数中的第2个参数(即0)可以用于指示纹理级别,函数中的第3个因子(即gl_rgb)可以用于指示目标纹理格式,函数中的第7个因子(即gl_rgb)可以用于指示入参的纹理格式,函数中的第8个因子(即gl_unsigned_byte)可以用于指示入参纹理数据类型;89.glframebuffertexture2d(gl_framebuffer,gl_color_attachment0,gl_texture_2d,texturecolor1,0);//将纹理texturecolor1绑定到帧缓冲fb2上。90.上述创建fb2资源命令的示例中,fb2绑定的纹理附件1为texturecolor1。glteximage2d函数中包括宽度(width),如1280,和高度(height),如626。纹理附件1的大小即为宽度*高度指示的大小,如1280*626。91.为了方便说明,可以将目标帧缓冲绑定的纹理称为第一纹理,第一纹理的大小同样包括第一纹理的宽度和第一纹理的高度。并且,在目标帧缓冲中渲染得到的渲染结果是存储在第一纹理中的。92.302、cpu确定纹理附件1的大小满足预设条件。93.其中,预设条件为确定绘制游戏主场景所使用的fb的分辨率的条件。若纹理附件的大小满足预设条件,则表明该纹理附件的大小是绘制游戏主场景所使用的fb的分辨率。若纹理附件的大小不满足预设条件,则表明该纹理附件的大小不是绘制游戏主场景所使用的fb的分辨率。94.纹理附件的大小越大,即fb的分辨率越大,则可以在fb中绘制分辨率更高的内容。通常情况下,游戏主场景的画质决定了游戏的画质,因此,渲染游戏主场景所使用的fb的分辨率应该是离屏渲染过程中的最大分辨率。基于此,可以设置预设条件包括:纹理附件的大小中的宽度值超过第一预设值,高度值超过第二预设值。95.在一些实施例中,针对每种游戏,都可以通过抓帧手段获取到该游戏在不同机型上运行时游戏主场景的分辨率。然后,根据获取到的游戏主场景的分辨率来设置第一预设值和第二预设值。如此,可以使设置的预设条件,适用于各种机型。96.示例性的,游戏a在机型1中,游戏主场景的分辨率为1280*840,游戏a在机型2中,游戏主场景的分辨率为1320*960。那么,可以设置第一预设值为1250(小于不同机型里游戏主场景的分辨率的宽度值),第二预设值为800(小于不同机型里游戏主场景的分辨率的高度值)。97.进一步的,若第一预设值和第二预设值设置的过低,则会导致判定结果不准确。例如,将绘制bloom效果,而非游戏主场景的fb确定为绘制游戏主场景所使用的fb。因此,为了提高判定结果的准确性,可以根据游戏在不同机型上运行时、不同画质等级对应的游戏主场景的分辨率来设置第一预设值和第二预设值。98.示例性的,游戏a在机型1中运行时,默认画质(可记为第一级画质)下游戏主场景的分辨率为1280*840,默认画质的低一级画质(可记为第二级画质)下游戏主场景的分辨率为1080*820。游戏a在机型2中运行时,第一级画质下游戏主场景的分辨率为1320*960,第二级画质下游戏主场景的分辨率为1080*640。那么可以设置第一预设值为1250(小于不同机型里第一级画质下游戏主场景的分辨率的宽度值,且高于不同机型里第二级画质下游戏主场景的分辨率的宽度值),第二预设值为850(小于不同机型里第一级画质下游戏主场景的分辨率的高度值,且高于不同机型里第二级画质下游戏主场景的分辨率的高度值)。99.并且,游戏主场景是游戏图像的主体,其应该与游戏图像的尺寸接近。因此,渲染游戏主场景所使用的fb的分辨率宽高比应该与电子设备的屏幕宽高比近似相等。基于此,可以设置预设条件包括:纹理附件的大小中宽度值和高度值的比值与屏幕宽高比(即宽度值和高度值的比值)的差值在预设范围内。100.以预设条件中的第一预设值为1200,第二预设值为600,预设范围为-0.1至0.1,屏幕宽高比为16:9为例,假设创建fb1资源命令中glteximage2d函数携带的纹理附件的大小为1000*500,则不满足上述预设条件。假设创建fb2资源命令中glteximage2d函数携带的纹理附件的宽度为1280,高度为626,则满足上述预设条件。101.本实施例以游戏主场景绘制在fb2中为例来说明,那么自然可以确定出fb2绑定的纹理附件1的大小满足预设条件。102.在确定满足预设条件后,则可以存储游戏主场景的分辨率(如303)。在确定不满足预设条件后,则无可以跳过存储游戏主场景的分辨率。103.303、cpu存储纹理附件1的大小,示例性的存储为分辨率1。104.若纹理附件的大小满足预设条件,则当前创建的fb对应的纹理附件的大小即为游戏主场景的分辨率。将该纹理附件的大小存储到内存中,则相当于存储了游戏主场景的分辨率。本实施例中,fb2绑定的纹理附件1的大小满足预设条件,那么将纹理附件1的大小存储到内存中之后,则相当于记录了游戏主场景的分辨率为纹理附件1的大小。也就是说,分辨率1即为游戏主场景的分辨率。后续渲染过程中,可使用该分辨率1来识别游戏主场景的渲染。105.应注意,凡是可以用于绘制游戏主场景的fb,其绑定的纹理附件的大小都应该是存储到内存中的分辨率1。因此,通过记录分辨率1,可以用于后续准确识别游戏主场景的渲染。106.304、cpu向gpu发送创建fb2资源命令。107.cpu在接收到创建帧缓冲资源命令后,会将创建帧缓冲资源命令发送给gpu。gpu根据创建帧缓冲资源命令,可以创建相应的fb,并为该创建的fb分配标识(如fb的id)。以及,可以创建该fb绑定的纹理附件,并为该纹理附件分配大小和标识(如纹理的id)。在完成fb及其绑定的纹理附件的创建后,gpu还会存储创建的fb的标识、纹理附件的标识以及纹理附件的大小的对应关系,用于后续根据fb的标识(如绘制id)查询对应的纹理附件的大小和标识。108.上述304的执行时机并不以图3a所示为限,实际实施时,也可以在301-303之间执行304,或者可在301之前执行304。109.应当理解的是,游戏应用在资源分配阶段中,会根据渲染需求,向cpu下发多个创建帧缓冲资源命令。例如,依次下发创建fb1资源命令,创建fb2资源命令,创建fb3资源命令……。上述301-304中,仅以创建fb2资源命令为例来说明了fb2存储游戏主场景的分辨率的具体实现。实际实施时,在资源分配阶段中,从游戏应用下发第一个创建帧缓冲资源命令开始,cpu就会执行类似上述301及其后续步骤(仅需替换其中的fb2),直至确定出满足预设条件后,游戏应用后续下发的每个创建帧缓冲资源命令,则不再执行上述301-303的步骤(仅需替换其中的fb2),但需要将创建帧缓冲资源命令发送给gpu,以创建相应的fb并存储对应关系。110.在资源分配阶段结束后,游戏应用需要显示第n帧(如第1帧)图像时,会向cpu下发渲染命令,以在相应的fb中完成渲染。示例性的,针对第n帧图像的渲染,游戏应用先后依次向cpu下发如下多个渲染命令:下发针对fb1的渲染命令,以在fb1上完成对第n帧图像的一部分内容的渲染;下发针对fb2的渲染命令,以在fb2上完成对第n帧图像的另一部分内容(本实施例中为游戏主场景)的渲染;以及,下发针对fb0的渲染命令,以及在fb0上完成ui绘制。111.进一步的,在针对每个fb的渲染命令中,包括如下两部分指令:fb的绑定指令和渲染指令。其中,游戏应用先下发fb的绑定指令,以绑定相应的fb。然后下发渲染指令,以在当前绑定的fb上完成渲染操作。112.游戏应用可调用glbindframebuffer函数来下发fb的绑定指令。glbindframebuffer函数携带有类型(target)和id两个参数。类型用于指示渲染操作的操作类型,操作类型可以为只读类型(gl_read_framebuffer),只写类型(gl_draw_framebuffer),可读可写类型(gl_framebuffer)。其中,只写类型和可读可写类型都是可写的。在渲染过程中,写即为绘制,因此,只写类型(gl_draw_framebuffer)和可读可写类型(gl_framebuffer)都可以称为绘制类型。id用于指示需要绑定的fb的id。113.一方面,由于需要对ui绘制前,在离屏帧缓冲中渲染得到的游戏主场景进行画质增强,在一帧图像的渲染开始之后,可以通过记录绘制id(最后的绘制操作针对的离屏帧缓冲的id),以方便确定ui绘制前、最后的绘制操作针对的离屏帧缓冲是否为目标帧缓冲(即绘制有游戏主场景的fb,本实施例中为fb2)。具体记录绘制id的实现如下文305-310所示:114.305、cpu响应于接收到游戏应用下发的fb2的绑定指令,确定操作类型为绘制类型,确定指示绑定的fb不是fb0。115.其中,fb2的绑定指令也可以称为第二绑定指令,将第二绑定指令中携带的帧缓冲标识记为第二帧缓冲标识。116.由于游戏主场景的渲染也需要绘制操作来完成,则渲染游戏主场景时,在fb的绑定指令中指示的操作类型应该是绘制类型。基于此,在游戏应用下发任一fb的绑定指令后,cpu拦截绑定指令,根据该绑定指令确定操作类型是否为绘制类型。若操作类型是gl_draw_framebuffer或者gl_framebuffer,则是绘制类型。本实施例中,游戏主场景绘制在fb2上,那么fb2的绑定指令中携带的操作类型自然是绘制类型。反之,若操作类型是gl_read_framebuffer,则不是绘制类型。117.以fb2的绑定指令中glbindframebuffer函数是glbindframebuffer(gl_framebuffer,fb2)为例,其中操作类型为gl_framebuffer,即可读可写类型,属于绘制类型。那么可以确定操作类型是绘制类型。118.需要说明的是,当指示绑定的fb是fb0时,则表明即将开始ui绘制,此时则需要执行一些与画质增强处理强相关的步骤,如记录ui的分辨率用于初始化画质增强模型,确定是否存在进行画质增强处理的需求等。而当指示绑定的fb是fb1,fb2……等离屏帧缓冲时,则无需执行这些步骤。可见,指示绑定的fb是fb0和指示绑定的fb不是fb0时,需要执行的操作是不同的。基于此,在拦截到绑定指令后,还需要确定指示绑定的fb是否为fb0。当前拦截到的是fb2的绑定指令,即指示绑定的是fb0,而不是fb0。119.在确定操作类型为绘制类型,且确定指示绑定的fb不是fb0后,则执行下述306-309。若确定操作类型不是绘制类型,在无需执行306-309。若确定操作类型是绘制类型,但确定指示绑定的fb不是fb0,则可以执行一些与画质增强处理强相关的步骤(可参见下述311-317)120.306、cpu将fb2的id存储到内存中。121.若绑定fb2的glbindframebuffer函数中,目标类型的值是gl_draw_framebuffer或者gl_framebuffer,即为绘制类型,cpu可以将当前指示绑定的fb的id,即glbindframebuffer函数中的id存到内存中。此时存储的id为当前帧图像的渲染过程中,最新指示执行绘制类型的渲染操作的fb。122.以glbindframebuffer函数中的id是2为例,即指示绑定的是id为2的fb(如fb2),则将2存储到内存中。123.307、cpu向gpu发送fb2的绑定指令。124.cpu在接收到绑定指令后,会将绑定指令发送给gpu。gpu根据绑定指令则可以完成fb的绑定。后续在接收到渲染指令后,则可以在绑定的fb上执行渲染操作。125.以cpu当前拦截到的是fb2的绑定指令为例,则将该fb2的绑定指令发送给gpu。gpu根据fb2的绑定指令可以绑定fb2,后续在接收到渲染指令后,则可以在fb2上执行渲染操作。126.上述307的执行时机并不以图3a所示为限,实际实施时,也可以在305和306之间执行307,或者可在305之前执行307。127.前述305中只是根据绑定指令确定了操作类型为绘制类型,但是实际上只有游戏应用向cpu下发渲染指令时,才能准确确定是否真的要在当前绑定的fb中执行绘制操作。128.游戏应用在下发fb的绑定指令后,进一步会下发渲染指令。在渲染指令中,若指示执行绘制操作,如通过gldrawelements函数来指示渲染,则表明真的要在当前绑定的fb中执行绘制操作。此时,cpu可记录绘制id。示例性的,可执行下述308和309。在渲染指令中,若未指示执行绘制操作,例如不包括gldrawelements函数,那么则不记录绘制id。129.308、cpu响应于接收到游戏应用下发的渲染指令1,从内存中读取fb2的id。130.其中,渲染指令1指示执行绘制操作。该渲染命令1也可以称为第三渲染命令。131.若cpu拦截到的渲染指令指示执行绘制操作,cpu则从内存中读取当前记录的fb的id。如fb2的id。132.309、cpu存储fb2的id,示例性的存为绘制id。133.其中,绘制id指示当前帧的渲染过程中,截止当前最后的绘制操作针对的fb的id。由于游戏主场景需要通过绘制操作而渲染得到,在记录绘制id后,则后续仅需判断绘制id指示的fb是否为目标帧缓冲即可。134.应注意,在另一些实施例中,也可以在接收到fb2的绑定指令之后,则将fb2的id存为绘制id。从而可以省略后续308和309。135.310、cpu向gpu发送渲染指令1。136.cpu在拦截到渲染指令1后,将渲染指令1发送给gpu后。gpu执行渲染指令1,则可以在当前绑定的fb上执行绘制操作。例如,当前绑定的是fb2,则可以执行渲染指令1,在fb2上绘制游戏主场景。137.上述310的执行时机并不以图3a所示为限,实际实施时,也可以在308和309之间执行310,或者可在308之前执行310。138.前述305-310仅以fb2的渲染命令(包括fb2的绑定指令和渲染指令)为例说明了记录绘制id的具体实现,而在一帧图像的渲染过程中,游戏应用会下发针对各个fb的渲染命令。例如,针对fb1的渲染命令,针对fb2的渲染命令……。在实际实施时,cpu在拦截针对任一fb的渲染命令(包括fb的绑定指令和渲染指令)后,都会确定操作类型是否为绘制类型,以及确定指示绑定的fb是否为fb0,并基于确定结果执行存储fb的id的步骤,例如执行306。进一步的,会确定渲染指令是否指示执行绘制操作,并基于确定结果存储绘制id,例如执行308-309。并且,后存储的fb的id会覆盖先存储的fb的id,后存储的绘制id也会覆盖先存储的绘制id。示例性的,在执行完310之后,cpu拦截到fb3的绑定指令(也可以称为第三绑定指令),此时,确定出操作类型是绘制类型,以及确定指示绑定的是fb3而不是fb0,则可以存储fb3的id(也可以称为第三帧缓冲标识)。从而覆盖掉306中存储的fb2的id。之后,cpu拦截到指示执行绘制操作的渲染指令,则可以从内存中读取fb3的id,并将fb3的id存为绘制id。从而覆盖掉309中存储的绘制id。如此,可以绘制id始终指示截止当前最新的绘制操作针对的唯一fb。在下文实施例中,以最终的绘制id是fb2的id为例来说明。139.在此需要说明的是,上述305-310中,在先根据绑定指令确定操作类型为绘制类型,再根据渲染指令确定渲染操作为绘制操作的情况下,才最终将当前绑定的fb的id存储为绘制id。从而可以提高存储的绘制id的准确性。但是,在另一些实施例中,也可以在仅根据绑定指令确定操作类型为绘制类型的情况下,或者在仅根据渲染指令确定渲染操作为绘制操作的情况下,则将当前绑定的fb的id存储为绘制id。从而可以简化方案流程。140.另一方面,由于需要在ui绘制(或者在将游戏主场景绘制到默认帧缓冲,下文中相同)前,对游戏主场景进行画质增强,则cpu在接收到针对各个fb的渲染命令后,都需要确定是否即将开始ui绘制。确定是否即将开始ui绘制的具体实现可参见下文311:141.311、cpu响应于接收到游戏应用下发的fb0的绑定指令,确定操作类型是绘制类型,确定指示绑定的fb是fb0。142.其中,fb0的绑定指定也可以称为第一绑定指令。143.在游戏应用下发任一fb的绑定指令后,cpu可以拦截绑定指令,并根据该绑定指令确定当前绑定fb是否用于ui绘制。用于ui绘制,应该满足下列条件:144.其一,ui绘制,则自然需要绘制操作才能完成渲染,那么,绑定指令中渲染操作的操作类型应该是绘制类型。即,gl_draw_framebuffer或者gl_framebuffer。而不能是gl_read_framebuffer。145.其二,ui绘制,需要在默认帧缓冲(如fb0)中完成,那么,绑定指令中的id应该指示默认帧缓冲。在同一型号的电子设备中,默认帧缓冲通常是固定的。不同型号的电子设备,默认帧缓冲可能不同。例如,机型a中的默认帧缓冲为fb0,机型b中的默认帧缓冲为fb100。本实施例中,默认帧缓冲为fb0,则需确定指示绑定的fb为fb0。146.基于此,cpu可以通过识别绑定指令中的操作类型和id,确定当前绑定fb是否用于绘制ui。若绑定指令中的操作类型是gl_draw_framebuffer或者gl_framebuffer,且绑定指令中的id是预设id(默认帧缓冲的id),则确定当前绑定fb是用于绘制ui的。147.以fb0的绑定指令中glbindframebuffer函数为glbindframebuffer(gl_framebuffer,fb0)为例。其中操作类型为gl_framebuffer,即为可绘制类型。fb的id为fb0,即指示绑定fb0。因此,可确定当前绑定fb是用于绘制ui的。148.312、cpu向gpu发送fb0的绑定指令。149.cpu在拦截到绑定指令后,会将绑定指令发送给gpu。gpu根据绑定指令则可以完成fb的绑定。后续在接收到渲染指令后,则可以在绑定的fb上执行渲染操作。150.以cpu当前拦截到的是fb0的绑定指令为例,则将该fb0的绑定指令发送给gpu。gpu根据fb0的绑定指令可以绑定fb0,后续在接收到渲染指令后,则可以在fb2上执行渲染操作。151.上述312的执行时机并不以图3a所示为限。例如,cpu也可以在拦截到绑定指令之后,则先向gpu发送绑定指令,然后再确定当前绑定fb是否用于绘制ui。又例如,cpu可以在执行下述313-317之间的任意时机,如314之后,向gpu发送绑定指令。152.在确定当前绑定fb是用于绘制ui后,需要执行下述313-317,以完成与画质增强处理强相关的处理。153.313、cpu确定画质增强模型未初始化,则存储fb0的绑定指令中的绘制大小,示例性的存为分辨率2。154.其中,画质增强模型用于画质增强的运算。将目标帧缓冲中的渲染结果输入到画质增强模型后,运行画质增强模型,可以输出得到增强后的结果。增强后的结果的分辨率,高于目标帧缓冲的渲染结果的分辨率。155.通常情况下,在首次确定出需要进行画质增强处理时,如首次确定出目标帧缓冲时,才会对画质增强模型初始化,如此才能保证初始化后的画质增强模型被有效利用。cpu在确定当前绑定的fb用于绘制ui之后,会确定画质增强模型是否初始化。若确定画质增强模型未初始化,那么需要存储分辨率2(即ui的分辨率,下同),以用于初始化画质增强模型。反之,若确定画质增强模型已初始化,那么无需存储分辨率2。156.在一种具体的实现方式中,cpu可以记录全部变量,用于指示画质增强模型已初始化和/或者指示画质增强模型未初始化。然后,cpu可查询该全局变量,基于查询结果确定画质增强模型是否初始化。示例性的,cpu在完成画质增强模型的初始化时,则记录全局变量a。cpu查询到全局变量a(也可以称为第一标记),则表明画质增强模型已初始化,则无需存储分辨率2。反之,cpu未查询到全局变量a,则表明画质增强模型未初始化,则需要存储分辨率2,以用于后续初始化画质增强模型。157.图3a中,游戏应用完成资源加载并在进入渲染阶段后,cpu首次确定出当前绑定的fb用于绘制ui时(如311),很显然还并未首次确定出需要进行画质增强处理。此时,cpu会确定出画质增强模型未初始化(如313)。158.对于针对默认帧缓冲(如fb0)的渲染命令,除了包括绑定指令和渲染指令之外,还可以包括分辨率设置指令。示例性的,在分辨率设置指令中,调用glviewport函数来限定在执行渲染操作时的绘制大小。该绘制大小即为绘制ui的分辨率,简称ui的分辨率。159.示例性的,glviewport函数具体为glviewport(x0,y0,w0,h0),x0、y0为原点(如左上顶点)坐标,w0、h0分别为绘制大小的宽度值和高度值。本技术实施例中,需要对目标帧缓冲中的渲染结果进行画质增强处理,再将增强后的内容绘制到默认帧缓冲中,也即贴到ui上。因此,需要使增强后的内容的分辨率与ui的分辨率相匹配。通过存储ui的分辨率,则可以用于初始化画质增强模型输出的内容的分辨率。160.在一种具体的实现方式中,游戏应用先调用glviewport函数下发分辨率设置指令,然后调用glbindframebuffer函数下发绑定指令。在该实现方式中,cpu在接收到glviewport函数限制的绘制大小之后,则缓存该绘制大小。然后,cpu在接收到glbindframebuffer函数指示的操作类型和id后,若确定出当前绑定fb用于绘制ui,则可以获取缓存的绘制大小,并将该绘制大小存为ui的分辨率。如此,可成功保存ui的分辨率。161.314、cpu向内存中记录标记位1,该标记位1指示当前绑定的是fb0。162.其中,标记位1也可以称为第二标记。163.在本技术实施例中,cpu在拦截到fb0的绑定指令后,除了需要向gpu发送fb0的绑定指令,以实现fb0的绑定之外,还需要执行其他若干步骤(如312、下文中的315-317等)。然后才会处理渲染指令。因此,为了确定在执行完若干步骤之后,后续接收到渲染指令时,当前绑定的fb还是fb0,cpu在确定出当前绑定的fb用于绘制ui之后,可以向内存中记录标记位1,用于指示当前绑定的是fb0,即默认帧缓冲。后续,若绑定的fb发生变化,cpu则可以清除掉该标记位1。示例性的,在接收到游戏应用下发的指示绑定其他fb(除fb0之外的fb)的绑定指令(也可以称为第四绑定指令,也就是说,第四绑定指令中的第四帧缓冲标识未指示fb0)之后,则可以删除标记位1。164.315、cpu从内存中读取绘制id和分辨率1,绘制id为fb2的id。165.cpu确定出当前绑定的fb用于绘制ui,则表明即将开始ui绘制,也即将开始将离屏帧缓冲中的渲染结果绘制到默认帧缓冲中。此时,cpu从内存中读取绘制id和分辨率1,即游戏主场景的分辨率,以用于确定绘制id指示的fb(也可以称为待处理帧缓冲)是否为目标帧缓冲。本实施例中,以最终的绘制id是fb2的id为例,那么读取到的绘制id为fb2的id,绘制id指示的fb即为fb2。166.316、cpu从gpu中读取fb2的id对应的纹理附件1的大小和纹理附件1的id。167.gpu在创建fb后,还会存储创建的fb的标识(如id)、纹理附件的标识(如id)以及纹理附件的大小的对应关系。可参见304中相关部分的说明。168.gpu在读取到绘制id后,则可以根据绘制id从gpu存储的对应关系中获取到与该绘制id对应的纹理附件(即,绘制id指示的fb绑定的纹理附件,也可以称为待处理纹理)的id和纹理附件的大小。本实施例中,以绘制id是fb2的id为例,那么获取到的则是纹理附件1的大小和纹理附件1的id。169.317、cpu确定纹理附件1的大小和分辨率1相同,确定画质增强模型未初始化。170.只有当绘制id指示的fb绑定的纹理附件的大小与游戏主场景的分辨率一致时,绘制id指示的fb才能用于渲染游戏主场景。反之,则不能。基于此,若检测出绘制id对应的纹理附件的大小和游戏主场景的分辨率一致,则确定绘制id指示的fb是目标帧缓冲,绘制id指示的fb上绘制的内容包括游戏主场景,则存在画质增强处理的需求。也就是说,目标帧缓冲绑定的纹理(如第一纹理)需要满足预设条件。此时,则需要再次确定画质增强模型是否初始化。若已初始化,则接下来无需初始化画质增强模型,而可以直接将初始化的画质增强模型用于画质增强处理。若未初始化,则接下来首先需要初始化画质增强模型,然后才能使用。171.本实施例中,以绘制id是fb2的id为例,那么绘制id对应的纹理附件即为fb2绑定的纹理附件1。并且,存储的游戏主场景的分辨率,即分辨率1也是纹理附件1的大小。很显然,绘制id对应的纹理附件的大小与游戏主场景的分辨率相同。172.若检测出绘制id对应的纹理附件的大小和预设内容的分辨率不一致,则确定绘制id指示的fb不是目标帧缓冲,绘制id指示的fb上绘制的内容不包括游戏主场景,而可能是一些后期效果(如bloom),则不存在画质增强处理的需求。针对这种情况,则按照正常渲染流程,将离屏帧缓冲中的渲染结果绘制到fb0中,以及在fb0中绘制ui即可。本文中对这种情况不多赘述。173.游戏应用在下发fb0的绑定指令后,紧接着会下发将离屏帧缓冲中的渲染结果绘制到fb0上的渲染指令。需要说明的是,若当前帧图像的离屏渲染在多个离屏帧缓冲中完成,那么应用程序会下发将多个离屏帧缓冲中的渲染结果都绘制到fb0上的渲染指令。但是,在本技术实施例中,只需要将目标帧缓冲中的渲染结果进行画质增强处理后,再绘制到fb0中。而其它离屏帧缓冲的渲染结果无需进行画质增强处理,仅需按照正常的渲染流程绘制到fb0中即可。因此,在下文中,主要针对将目标帧缓冲的渲染结果绘制到fb0中的过程做详细说明。174.游戏应用在下发将目标帧缓冲中的渲染结果绘制到fb0上的渲染指令(也可以称为第一渲染指令)之后,cpu会拦截该渲染指令。在将目标帧缓冲中的渲染结果(也可以称为第一图像内容)绘制到fb0上的渲染指令中,可调用glbindtexture函数来指示存储目标帧缓冲中的渲染结果的纹理附件,例如,glbindtexture函数中包括纹理附件的标识(如id)。以及可调用gluseprogram来指示此次渲染使用的可执行程序(program)。program是跑在gpu上的程序,作用是指示gpu着色器如何绘制图形,例如涂成什么颜色。本实施例中,目标帧缓冲为fb2,则将目标帧缓冲中的渲染结果绘制到fb0上的渲染指令具体为:将fb2中的渲染结果(包括游戏主场景,可记为渲染结果1,也就是说,第一图像内容是渲染结果1)绘制到fb0上的渲染指令(可记为渲染指令2,也就是说,第一渲染指令是渲染指令2)。参见图3b,渲染指令2中包括如下内容:175.glbindtexture(gl_texture_2d,120)//指示从id为120的纹理附件中获取游戏主场景;176.gluseprogram(101)//101指示使用id为101的program来完成渲染。177.cpu在执行完317,并且拦截到渲染指令2后,可通过下述318-321来初始化画质增强模型:178.318、响应于接收到游戏应用下发的渲染指令2,cpu若从内存中读取到标记位1,则进一步读取分辨率2。179.cpu在拦截到渲染指令后,可以从内存中读取标记位1。若可以读取到标记位1,则表明当前绑定的fb还是fb0。此时,则能正常进行画质增强处理,例如,可进一步读取ui的分辨率,即分辨率2,以初始化画质增强模型。反之,若未读取到标记位1,则表明当前绑定的fb已经发生了变化。此时,则丢弃当前的渲染指令,不做处理。180.需要在此说明的是,在另一些实施例中,也可以省略前述314,相应的,cpu在接收到渲染指令2后,可以读取ui的分辨率。如此,可以简化方案的流程。181.319、cpu向gpu发送资源初始化命令1。182.本技术实施例中,画质增强模型(同下文中的第一画质增强模型,也可以称为第二模型)的算法源码集成在着色器1(shader1,也可以称为第三着色器)中。并且,会将shader1的编译结果绑定(或附加)到program1(也可以称为第三program)上。后续,在需要使用画质增强模型时,则可以调用program1,使用program1绑定的shader1中的算法对图像中的顶点(vertex)和/或片段(fragment)进行着色操作,实现对游戏主场景的画质增强。183.其中,资源初始化命令1可以指示创建program1。创建program1包括:创建shader1,将画质增强模型的算法源码集成在shader1中。还包括:创建program1,将shader1绑定在program1上。还包括:确定program1的id。应理解,gpu在创建相应的资源(如fb、纹理、program)时,可以为资源设置相应的id,即确定id。184.如下所示为资源初始化命令1的一个示例:185.g_algoshader=glcreateshader(gl_compute_shader)//创建着色器对象algoshader;186.glshadersource(algoshader,1,&algoshaderbuffer,null)//将画质增强模型的算法源码集成到着色器对象algoshader中;187.glcompileshader(algoshader)//编译着色器algoshader的算法源码;188.g_algoprogram=glcreateprogram()//创建program;189.glattachshader(algoprogram,algoshader)//将着色器的编译结果绑定(或附加)到program上。190.进一步的,渲染结果通常是存储在纹理中的,使用画质增强模型处理游戏主场景后的渲染结果(即增强后的游戏主场景)同样也是。例如,增强后的游戏主场景存在纹理2(也可以称为第二纹理)中。相应的,还可以通过资源初始化命令1指示创建纹理2以及确定纹理2的id。需要说明的是,纹理2用于存储增强后的游戏主场景,而增强后的游戏主场景需要绘制到fb0上,即贴到ui上。那么,增强后的游戏主场景的分辨率应该和ui的分辨率相等。所以,用于存储增强后的游戏主场景的纹理2应该也要和ui的分辨率相等,即为分辨率2。191.如下所示为资源初始化命令1中创建纹理的一个示例:192.glgentextures(1,&algotexture)//创建纹理对象algotexture;193.glbindtexture(gl_texture_2d,algotexture)//设置纹理对象algotexture的类型为gl_texture_2d类型,即2d类型;194.gltexstorage2d(gl_texture_2d,1,gl_rgba8,width,height);//为纹理对象分配大小的宽度width和高度height,该大小为ui的分辨率。195.gpu在接收到资源初始化命令1后,可以创建纹理2、shader1以及program1,将画质增强模型的算法集成在shader1中,将shaer1绑定在program1上。并且,确定纹理2的id以及program1的id。gpu在完成这些初始化过程后,可以将纹理2的id以及program1的id返回给cpu,以供cpu后续向gpu请求进行画质增强处理。196.320、cpu接收gpu返回的纹理2的id和program1的id。197.321、cpu将分辨率1和分辨率2传递给gpu。198.例如,cpu可以调用gluniform函数将分辨率1和分辨率2传递给gpu199.gpu在接收到分辨率1和分辨率2后,可以对画质增强模型初始化。gpu可以将分辨率1和分辨率2配置为program1中画质增强模型的模型参数,以指示画质增强模型在进行画质增强处理时,将输入的分辨率1的内容提升为分辨率2的内容后输出。也就是说,gpu需要根据分辨率1和分辨率2来初始化画质增强模型。200.322、cpu向gpu发送画质增强命令,画质增强命令中携带有纹理附件1的id和program1的id。201.cpu向gpu发送画质增强命令,画质增强命令中携带有用于存储游戏主场景的纹理附件的id,以指示待处理的游戏主场景的存储位置。其中,存储游戏主场景的纹理附件即为目标帧缓冲绑定的纹理附件。本实施例中,目标帧缓冲为fb2,fb2绑定的纹理附件为纹理附件1,那么,画质增强命令中携带有纹理附件1的id。以及,画质增强命令中还携带有program1的id,以指示使用program1来完成画质增强处理。202.gpu在接收到画质增强命令后,调用program1对游戏主场景进行画质增强处理,得到增强后的游戏主场景。本实施例中,fb2为目标帧缓冲,游戏主场景即为在fb2中渲染得到的渲染结果1。那么,gpu执行画质增强命令,则可以将渲染结果1增强得到增强后的渲染结果(可记为渲染结果2,也可以称为第二图像内容)。也就是说,第二图像内容是基于第一图像内容生成的。并且,gpu可将增强后的游戏主场景存储到纹理2中。203.经过上述步骤,在将游戏主场景绘制到fb0上之前,需要先对游戏主场景(即第一图像内容)进行画质增强处理,生成增强后的游戏主场景(即第二图像内容),然后将增强后的游戏主场景绘制到fb0上。这样,才能在屏幕中显示增强后的游戏主场景。具体可参见下文323-324:204.323、cpu将渲染指令2中纹理附件1的id替换为纹理2的id,得到渲染指令3。205.其中,纹理附件1的id也可以称为第一纹理标识,纹理附件2的id也可以称为第二纹理标识,渲染指令3也可以称为第二渲染指令。206.cpu修改渲染指令,将glbindtexture函数中的纹理id,替换为纹理2的id。207.本实施例中,目标帧缓冲为fb2,则存储增强前的游戏主场景纹理附件即为fb2绑定的纹理附件1,glbindtexture函数中携带的即为纹理附件1的id。cpu可以纹理2的id替换纹理附件1的id,得到渲染指令3。208.参见图3b,假设纹理2的id为140。cpu将渲染指令2中glbindtexture函数中的120,替换为140,得到替换后的glbindtexture函数具体为glbindtexture(gl_texture_2d,140),从而可以指示从id为140的纹理中获取增强后的游戏主场景。209.324、cpu向gpu发送渲染指令3。210.cpu将修改后的渲染指令发送给gpu,以指示gpu将纹理2中存储的内容(即增强后的游戏主场景)绘制到fb0上。gpu在接收到修改后的渲染指令后,则可以实现将增强后的游戏主场景绘制到fb0上。211.当将所有的离屏帧缓冲中的内容都绘制到fb0上,且在fb0上完成ui绘制后,则可在显示屏中显示完整的一帧图像。212.至此,则完成了游戏应用中一帧图像的画质增强。213.在上述图3a所示的实施例中,在游戏主场景渲染完成之后,ui绘制之前,将渲染得到的游戏主场景作为画质增强的输入,通过gpu对画质增强模型的运算,提升画面质感,输出高质量的图像。214.在上述图3a所示的流程中,详细说明了从游戏应用的资源加载阶段开始,到完成一次画质增强处理的完整实现。接着,只要游戏应用的进程未被清理掉,则在后续帧图像的渲染过程中,可以继续使用已初始化的画质增强模型进行画质增强处理。也就是说,后续则无需再次初始化画质增强模型了。215.示例性的,参见图3c,为本技术实施例提供的一种图像处理方法的流程示意图。本实施例中,主要针对完成图3a中第一次的画质增强处理后,接着第二次及以后的画质增强处理的过程进行说明。在本实施例中,仍以游戏主场景在fb2完成渲染,fb0为默认帧缓冲为例来说明。如图3c所示,该方法可以包括:216.305a、cpu响应于接收到游戏应用下发的到fb2的绑定指令,确定操作类型为绘制类型,确定指示绑定的fb不是fb0。参见305。217.306a、cpu将fb2的id存储到内存中。参见306。218.307a、cpu向gpu发送fb2的绑定指令。参见307。219.308a、cpu响应于接收到游戏应用下发的渲染指令1,从内存中读取fb2的id。参见308。220.309a、cpu存储fb2的id,示例性的存为绘制id。参见309。221.310a、cpu向gpu发送渲染指令1。参见310。222.311a、cpu响应于接收到游戏应用下发的fb0的绑定指令,确定操作类型是绘制类型,确定指示绑定的fb是fb0。参见311。223.312a、cpu向gpu发送fb0的绑定指令。参见312。224.313a、cpu确定画质增强模型已初始化。225.在图3a第一次进行画质增强处理时,已经对画质增强模型初始化了。那么,在后续各帧图像的渲染过程中,则无需使用ui的分辨率来完成初始化。因此,在本实施例中,确定出画质增强模型已初始化后,则无需执行图3a的313中将fb0的绑定指令中的绘制大小存储为分辨率2的步骤。226.314a、cpu向内存中记录标记位1,该标记位1指示当前绑定的是fb0。参见314。227.315a、cpu从内存中读取绘制id和分辨率1,绘制id为fb2的id。参见315。228.316a、cpu从gpu中读取fb2的id对应的纹理附件1的大小和纹理附件1的id。参见316。229.317a、cpu确定纹理附件1的大小和分辨率1相同,确定画质增强模型已初始化。230.在图3a第一次进行画质增强处理时,已经对画质增强模型初始化了。那么,在后续各帧图像的渲染过程中,都会确定出画质增强模型已经初始化。231.318a、cpu响应于接收到游戏应用下发的渲染指令2,从内存中读取标记位1。参见318。232.由于画质增强模型已经初始化了,因此可以省略掉图3a中初始化的步骤,如319-321。233.322a,cpu若读取到标记位1,向gpu发送画质增强命令,画质增强命令中携带有纹理附件1的id和program1的id。参见322。234.323a、cpu将渲染指令2中纹理附件1的id替换为纹理2的id,得到渲染指令3。参见323。235.324a、cpu向gpu发送渲染指令3。参见324。236.至此,则完成了另一帧图像的画质增强。237.后续,针对任一帧图像的渲染,都可以重复按照上述图3c所示的流程来处理。直至游戏应用被清理后,再次启动时,则需要先按照上述图3a所示的流程来处理、再按照图3c所示的流程来处理。238.前述图3a-图3c的实施例中,以不同帧图像的渲染过程中,均在同样的fb(如fb2)中完成游戏主场景的渲染来说明。但是实际中,不同帧图像的渲染过程中,可以在不同的fb中完成游戏主场景的渲染。例如,在第一帧图像的渲染过程中,在fb2中完成该帧图像中游戏主场景的渲染。在第二帧图像的渲染过程中,在fb4中完成该帧图像中游戏主场景的渲染。本技术实施例对此不作具体限定。239.前述图3a-图3c的实施例中,仅在将游戏主场景绘制到fb0前,对游戏主场景进行画质增强处理(记为第一阶段的画质增强处理)。在另一些实施例中,为了进一步提升画质,还可以在将增强后的游戏主场景绘制到fb0的过程中,继续画质增强处理(记为第二阶段的画质增强处理)。在第一阶段的画质增强处理过程(即图3a-图3c的实施例)中,主要是提升游戏主场景的分辨率。而第二阶段的画质增强处理过程中,主要是对游戏主场景进行锐化、降噪等处理。240.示例性的,参见图4a,为本技术实施例提供的一种图像处理方法的流程示意图。本实施例中,会先后依次完成第一阶段的画质增强处理和第二阶段的画质增强处理。与图3a中不同的是,本实施例中涉及两个阶段的画质增强处理,因此需要初始化分别用于两个阶段的画质增强模型,即第一画质增强模型和第二画质增强模型。其中,图3a-图3c中的画质增强模型即为该第一画质增强模型,用于第一阶段的画质增强处理,主要实现提升分辨率。第二画质增强模型则用于第二阶段的画质增强处理,主要实现图像锐化和/或降噪。241.与第一画质增强模型类似:第二画质增强模型的算法源码集成在shader2中。并且,会将shader2的编译结果绑定(或附加)到program2上。后续,在需要使用第二画质增强模型时,则可以调用program2,使用program2绑定的shader2中的算法对图像中的顶点(vertex)和/或片段(fragment)进行着色操作,实现第二阶段的画质增强处理。242.具体的,如图4a所示,在完成301-320(可参见图3a中的说明)之后,还包括401和402:243.401、cpu向gpu发送资源初始化命令2。244.其中,资源初始化命令2可以指示创建program2(也可以称为第二program)。创建program2包括:创建shader2(也可以称为第二着色器),将第二画质增强模型(也可以称为第一模型)的算法源码集成在shader2中。还包括:创建program2,将shader2绑定在program2上。还包括:确定program2的id(也可以称为第二程序标识)。245.gpu在接收到资源初始化命令2后,可以创建shader2以及program2,将画质增强模型的算法源码集成在shader2中,将shaer2绑定在program2上。并且,确定program2的id。gpu在完成这些初始化过程后,可以将program2的id返回给cpu,以供cpu后续向gpu请求进行第二阶段的画质增强处理。246.402、cpu接收gpu返回的program2的id。247.进一步的,如图4a所示,在完成321(可参见图3a中的说明)后,gpu需要初始化第一画质画质增强模型和第二画质增强模型,而不只是初始化第一画质增强模型。248.关于第一画质增强模型的初始化,可参见图3a中的相关说明,此处不再赘述。249.在使用第一画质增强模型实现第一阶段的画质增强处理后,可继续使用第二阶段的画质增强模型实现第二阶段的画质增强处理,以将增强后的游戏主场景进行锐化、降噪等处理后绘制到fb0上。也就是说,第一画质增强模型的输出即为第二画质增强模型的输入。那么。第二画质增强模型的输入内容(即游戏主场景)对应的分辨率应该是ui的分辨率,即分辨率2。并且,使用第二画质增强模型无需再提升分辨率。因此,第二画质增强模型的输出内容对应的分辨率应该也是ui的分辨率,即分辨率2。基于此,gpu在接收到分辨率1和分辨率2后,将分辨率2配置为program2中第二画质增强模型的模型参数,以指示第二画质增强模型在进行画质增强处理时,将输入的分辨率2的内容依然以分辨率2输出。从而完成对第二画质增强模型的初始化。250.需要说明的是,在第一画质增强模型和第二画质模型的初始化时,可能还需要初始化一些其他模型参数,例如,锐化参数。这些模型参数也可以由cpu传递给gpu。然后gpu将模型参数存入相应的画质增强模型中,从而实现这些参数的初始化。251.如图4a所示,在模型初始化完成后,首先需要执行321和322(可参见图3a中的说明),以完成第一阶段的画质增强处理。然后,还需要进一步完成第二阶段的画质增强处理。具体的,图3a中的323具体可以为403:252.403、cpu将渲染指令2中纹理附件1的id替换为纹理2的id,将渲染指令2中携带的program的id替换为program2的id,得到渲染指令3。253.其中,渲染指令2中携带的program可以称为第一program,渲染指令2中携带的program的id也可以称为第一程序标识。第一程序标识指示第一program,第一program用于根据第一program绑定的第一着色器绘制图像,第一着色器中未集成第一模型,第一模型用于图像的锐化处理和/或降噪处理。254.本实施例中,在将增强后的游戏主场景绘制到fb0上的过程中,会做进一步的画质增强处理,如锐化处理。因此,在将glbindtexture函数中的纹理id,替换为纹理2的id的基础上,还需要将gluseprogram函数中的id替换为program2的id。这样,才能指示gpu使用program2将增强后的游戏主场景再次增强后绘制到fb0,以完成第二阶段中的画质增强处理。255.参见图4b,游戏应用向cpu下发的将fb2中的渲染结果绘制到fb0上的渲染指令包括如下内容:256.glbindtexture(gl_texture_2d,120)//指示从id为120的纹理附件中获取游戏主场景;257.gluseprogram(101)//指示使用id为101的program来完成绘制。258.gpu需要将渲染指令中glbindtexture函数中的id替换为纹理2的id。参见图4b,纹理2的id为140,则替换后的glbindtexture函数具体为glbindtexture(gl_texture_2d,140),从而可以指示从纹理2中获取增强后的游戏主场景。以及,cpu需要将渲染指令中gluseprogram函数中的id替换为program2的id。参见图4b,program2的id为110,则替换后的gluseprogram函数具体为gluseprogram(110),从而可以指示使用program2将增强后的游戏主场景再次增强后绘制到fb0上。259.如图4a所示,在完成上述403后,cpu可以执行324(可参见图3a),向gpu发送修改后得到的渲染指令3。260.gpu在接收到渲染指令3后,则可以在将增强后的游戏主场景再次进行锐化和/或降噪等处理后绘制到fb0上,即将经过锐化处理和/或降噪处理后的游戏主场景绘制到fb0中,进一步提升游戏画质。261.在一些场景中,当游戏改版之后,在将游戏主场景的绘制到fb0的过程中,则可能不再适宜做锐化、降噪等画质增强处理。例如,在游戏改版后,游戏图像的风格由明亮风格转变为暗黑风格,此时,若在将游戏主场景绘制到fb0的过程中,采用锐化的画质增强模型来对游戏主场景完成锐化处理并绘制到fb0上。那么最终呈现的游戏图像则可能不是暗黑风格了。如此,显然是不合适的。262.基于此,在一些实施例中,在上述图4a所示的实施例的403之前,cpu可以对将游戏主场景绘制到fb0上的program进行校验。校验该program是否为预期的program。若为预期的program,则表明将游戏主场景的绘制到fb0的过程,适合进一步进行画质增强处理。此时则可以继续执行403。若不是预期的program,则在第二阶段不做画质增强处理。如此,可以提升画质增强处理的合理性。263.至此,需要说明的是,在另一些实施例中,也可以仅在第二阶段做画质增强处理,而在第一阶段不做画质增强处理。或者,在又一些实施例中,可以在一个阶段(如第一阶段或者第二阶段)中,同时完成提升分辨率,以及锐化和/或降噪的画质增强处理。本技术实施例对此不作具体限定。264.在本技术实施例中,画质增强模型可以是为游戏应用配置的固定模型。例如,为游戏应用1配置画质增强模型a,为游戏应用2配置画质增强模型2。或者,针对同一游戏应用,画质增强模型是可以动态调整的。例如,可以根据用户设置的增强等级和/或增强方式来动态调整画质增强模型。又例如,可以根据电子设备的负载参数,如温度,动态调整画质增强模型。本技术实施例对此不做具体限定。265.参见图5,以根据用户设置的画质增强等级和/或画质增强方式来动态调整画质增强模型为例,来进一步说明本技术实施例的图像处理方法的具体实现。在游戏应用的设置(如游戏助手)中,可以提供画质增强的设置项。如图5所示,在手机上启动游戏应用后,在设置中提供有两种增强方式(图中椭圆虚线所示):自适应画质方式和固定增强档方式。266.在固定增强档方式下,电子设备可以根据用户选择的增强等级来选择画质增强模型。继续参见图5,待选的增强等级(即增强档)有“低”、“中”和“高”三个。若用户选择增强等级“中”,那么则需要匹配增强效果适中的画质增强模型。267.在自适应画质方式下,电子设备可以在渲染的过程中,采集电子设备的温度、cpu的负载、gpu的负载等负载参数。例如,电子设备可以定期采集电子设备的温度。又例如,电子设备可以在每次显示完一帧图像后,采集cpu的负载和/或gpu的负载。然后根据这些负载参数自动选择相匹配的画质增强模型。在一种具体的实现方式中,电子设备可以根据这些负载参数预估电子设备在渲染下一帧图像时的负载,然后根据预估结果自动选择相匹配的画质增强模型。通常情况下,画质增强模型的增强效果越强,则往往需要更高的功耗。因此,在自动选择相匹配的画质增强模型时,若负载参数反映的电子设备的负载越低,如温度越低,则选择增强效果更强的画质增强模型。从而可以在电子设备的负载较低时,保证画质增强的效果。在自适应画质方式下,电子设备根据实时采集的负载参数来动态调整画质增强模型。如此,在负载不同时,可以选择不同的画质增强模型来完成画质增强的运算,以平衡增强效果和电子设备的负载。268.也就是说,在动态调整画质增强模型的实施例中,提供有多个画质增强模型供选择。那么,需要针对多个画质增强模型来创建对应的资源(如program)以及初始化。269.在一种具体的实现方式中,可以集中完成针对所有画质增强模型对应的资源的创建,以及集中完成所有画质增强模型的初始化。如图6所示,在完成301-318(可参见图3a中的说明)之后,可以集中完成资源创建和画质增强模型初始化。270.319、cpu向gpu发送资源初始化命令1。参见图3a。271.320、cpu接收gpu返回的program3的id。参见图3a。272.在完成上述针对一个画质增强模型的资源创建之后,可以接着针对下一个画质增强模型完成资源创建。如501-502所示:273.601、cpu向gpu发送资源初始化命令3。274.602、cpu接收gpu返回的program3的id。275.需要说明的是,在602之后还可以继续针对下一个画质增强模型完成资源创建,此处不再一一罗列。关于针对画质增强模型创建资源的具体实现,可参见图3a中的相关说明。此处不再赘述。但是,需要说明的是,针对一帧图像的渲染,仅会输出一个增强后的游戏主场景,因此,只需创建一个纹理,如纹理2即可。而无需针对每个画质增强模型均创建纹理资源。276.在完成针对所有画质增强模型的资源创建后,cpu可以记录画质增强模型及其资源的对应关系。例如,画质增强模型和绑定有该模型的program的id的对应关系。从而方便后续发送画质增强指令时,确定携带的program的id。277.如图6所示,在完成资源创建后,则可以执行321,将分辨率1和分辨率2发送给gpu。gpu在接收到分辨率1和分辨率2后,则可以初始化画质增强模型。关于画质增强模型的初始化,可参见图3a中的相关说明,此处不再赘述。278.如图6所示,方法还包括603:279.603、cpu确定当前选择的目标模型。280.cpu可以根据用户设置的增强等级和/或增强方式来选择目标模型。281.上述603的执行时机并不以图6所示为限,实际实施时,只要在604之前确定即可。282.进一步的,在动态调整画质增强模型的实施例中,若相邻两次画质增强处理采用的画质增强模型不同,且该不同的画质增强模型的增强效果差异较明显,那么则会导致画质瞬变。例如,从画质较差瞬变到画质极好。为了解决该问题,在一些实施例中,在动态调整画质增强模型时,可以采用多级渐变的方式来调整,使得画质增强的效果可以平滑过渡。也就是说,若此次选出的模型与上一次使用的模型为预设组合,cpu可以调整此次选择的模型,使调整后的目标模型与上一次使用的模型对应的增强效果的差值小于预设差异值。其中,预设组合中两个模型对应的增强效果的差异大于预设差异值。283.如图6所示,图3a中的322具体为:284.604、cpu向gpu发送画质增强命令,画质增强命令中携带有纹理附件1的id和目标模型对应的目标program的id。285.例如,目标模型是画质增强模型3,为画质增强模型3创建的program为program3,那么,可以在画质增强指令中携带program3的id。286.采用本实施例中,则可以每次都采用与用户设置相匹配的画质增强模型来完成画质增强处理。287.上述图6的实施例中,以集中完成资源创建和画质增强模型初始化为例来说明。实际实施时,也可以一次仅针对当前选择的目标模型完成对应的资源创建和初始化。此后,当选择的目标模型发生改变后,则需要再次针对变化后的目标模型完成对应的资源创建和初始化。本技术实施例对此不作具体限定。288.图7为本技术实施例提供的一种电子设备的软件结构框图。如图7所示,该电子设备可以包括应用层701,框架层702,系统库703,以及硬件层704等。289.其中,应用层701也可以称为应用程序层,或者应用(application,app)层。在一些实现中,应用程序层可以包括一系列应用程序包。应用程序包可以包括相机,图库,日历,通话,地图,导航,wlan,蓝牙,音乐,视频,短信息等应用程序。应用程序包还可以包括需要通过渲染图像向用户展示图片或者视频的应用程序。比如,该应用层701中包括的应用程序可以为游戏类应用程序,例如等。290.框架层702也可以称为应用程序框架层。该框架层702可以为应用层701的应用程序提供应用编程接口(applicationprogramminginterface,api)和编程框架。框架层702包括一些预先定义的函数。291.示例性的,框架层702可以包括窗口管理器,内容提供器,视图系统,资源管理器,通知管理器,活动管理器,输入管理器等。窗口管理器提供窗口管理服务(windowmanagerservice,wms),wms可以用于窗口管理、窗口动画管理、surface管理以及作为输入系统的中转站。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。该数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。活动管理器可以提供活动管理服务(activitymanagerservice,ams),ams可以用于系统组件(例如活动、服务、内容提供者、广播接收器)的启动、切换、调度以及应用进程的管理和调度工作。输入管理器可以提供输入管理服务(inputmanagerservice,ims),ims可以用于管理系统的输入,例如触摸屏输入、按键输入、传感器输入等。ims从输入设备节点取出事件,通过和wms的交互,将事件分配至合适的窗口。292.系统库703可以包括多个功能模块。例如:表面管理器(surfacemanager),媒体框架(mediaframework),标准c库(standardclibrary,libc),嵌入式系统的开放图形库(openglforembeddedsystems,opengles)、vulkan、sqlite、webkit等。293.其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2d和3d图层的融合。媒体框架支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:动态图像专家组4(movingpicturesexpertsgroup,mpeg4),h.264,动态影像专家压缩标准音频层面3(movingpictureexpertsgroupaudiolayer3,mp3),高级音频编码(advancedaudiocoding,aac),自适应多码解码(adaptivemulti-rate,amr),联合图像专家组(jointphotographicexpertsgroup,jpeg,或称为jpg),便携式网络图形(portablenetworkgraphics,png)等。opengles和/或vulkan提供应用程序中2d图形和3d图形的绘制和操作。sqlite为电子设备的应用程序提供轻量级关系型数据库。在一些实现中,系统库703中的opengl提供渲染功能,可根据应用程序下发的渲染命令对待显示的图像进行渲染。294.在如图7的示例中,电子设备中还可以包括硬件层704。该硬件层704中可以包括处理器,如中央处理器(centralprocessingunit/processor,cpu),图形处理器(graphicsprocessingunit,gpu),神经网络计算处理器(neural-networkprocessingunits,npu)等。295.进一步的,参见图8,框架层中可以设置一个或多个功能模块,用于实现本技术实施例提供的图像处理方案。示例性的,框架层中可以设置有拦截模块,识别模块,决策模块、配置模块以及画质增强模块等。并且,硬件层中的cpu可以控制框架层中的上述各个模块实现其各自的功能,gpu或者npu可以根据框架层中各个模块处理后的指令所调用的图形库(如opengles)中的api执行相应的渲染处理。下面将结合各个模块,对本技术实施例提供的图像处理方法做进一步详细说明。296.如图8所示,应用层中的游戏应用在加载资源的过程中,会下发创建帧缓冲资源命令,创建帧缓冲资源命令用于创建图像对应的帧缓冲,为后续的图像渲染做准备。游戏应用在资源加载结束后,需要显示图像时,会下发渲染命令。应理解,渲染命令可以包括先后依次下发的fb的绑定指令和渲染指令。297.框架层中的拦截模块可以拦截游戏应用下发的创建帧缓冲资源命令和渲染命令。拦截模块还可以在拦截到创建帧缓冲资源命令和渲染命令后,都会发送给框架层中的识别模块。以及,将渲染命令发送给框架层中的决策模块。298.识别模块可以根据接收到的创建帧缓冲资源命令确定出游戏主场景的分辨率,并存储到内存中。识别模块还可以根据接收到的渲染命令确定ui的分辨率以及绘制id,并存储到内存中。其中,游戏主场景的分辨率和ui的分辨率可以用于初始化画质增强模型。游戏主场景的分辨率和绘制id可以用于确定是否需要进行画质增强处理。299.决策模块可以根据接收到的渲染命令确定是否需要进行画质增强处理,即确定绘制id对应的纹理附件的大小是否和游戏主场景的分辨率相同。若相同,则确定需要进行画质增强处理,则将渲染命令发送给框架层中的画质增强模块。若不相同,则不需要进行画质增强处理,则直接调用图形库完成渲染。300.框架层中的配置模块可以从系统库的文件库中读取为当前游戏应用配置的画质增强模型。并将读取的模型配置结果发送给画质增强模块。301.画质增强模块可以根据接收到的渲染命令和模型配置,向gpu发送画质增强命令,以请求调用相应的program进行画质增强处理。并且,画质增强模型还会修改渲染命令,并将修改后的渲染命令发送给gpu。302.最后,gpu根据画质增强命令可实现对游戏主场景的画质增强。以及gpu根据修改后的渲染命令可以将增强后的游戏主场景绘制到默认帧缓冲上。303.图9a和图9b为本技术实施例提供的一种图像处理方法的流程图。该方法可以应用于具有图8所示的软件结构的电子设备。电子设备包括游戏应用、拦截模块,识别模块,决策模块、配置模块、画质增强模块、cpu、gpu和内存,其中拦截模块,识别模块,决策模块、配置模块、画质增强模块为受cpu控制的模块,可以为cpu内的模块。304.如图9a和图9b所示,所述方法包括:305.900、拦截模块接收创建帧缓冲资源命令。306.901、拦截模块向识别模块发送创建帧缓冲资源命令。307.902、识别模块确定创建帧缓冲资源命令中指示绑定的纹理附件的大小。308.903、识别模块确定纹理附件的大小是否满足预设条件,若是,则执行904;若否,则针对下一条创建帧缓冲资源命令,继续执行900及其后续步骤。309.904、识别模块存储纹理附件的大小,示例性的存为分辨率1。310.其中,分辨率1即为游戏主场景的分辨率。311.905、拦截模块接收fb的绑定指令。312.其中,渲染命令通常可以包括绑定指令和渲染指令两部分。313.拦截模块在拦截到fb的绑定指令后,一方面可以将绑定指令发送给识别模块。314.906、拦截模块向识别模块发送fb的绑定指令。315.907、识别模块确定fb的绑定指令中操作类型是否为绘制类型,以及确定指示绑定的fb是否为fb0。若操作类型是绘制类型,且指示绑定的fb不是fb0,则执行908;否则,则不执行908。316.908、识别模块将指示绑定的fb的id存到内存中。317.拦截模块在拦截到fb的绑定指令后,另一方面可以将绑定指令发送给决策模块。318.909、拦截模块向决策模块发送fb的绑定指令。319.910、决策模块确定fb的绑定指令中操作类型是否为绘制类型,以及确定指示绑定的fb是否为fb0。若操作类型为绘制类型,以及指示绑定的fb为fb0,决策模块则执行911;否则,决策模块不作处理。320.911、决策模块确定画质增强模型是否初始化。若未初始化,则执行912及其后续步骤;若已初始化,则跳过912,执行913及其后续步骤。321.912、决策模块存储指示绑定的fb的绘制大小,示例性的存为分辨率2。322.其中,分辨率2即为ui的分辨率。323.913、决策模块向内存中记录标记位1。324.914、决策模块从内存中读取绘制id和分辨率1。325.应注意,本实施例的流程图主要是按照数据在模块之间的流动来说明的。虽然绘制id的存储在后续步骤922中才出现,但是实际渲染过程中,针对各个fb的渲染命令是依次下发的,而针对任一fb的渲染命令,又会包括先后依次下发的绑定指令和渲染指令。因此,在执行914之前,针对其它fb的渲染命令可能已经执行到了922,那么则会记录下绘制id。例如,当前需要绑定的是fb0,此前针对fb2的渲染命令,已经执行到了922,并将fb2记为了绘制id。326.915、决策模块从gpu中读取绘制id对应的纹理附件的大小和纹理附件的id。327.916、决策模块确定绘制id对应的纹理附件的大小是否和分辨率1相同。若相同,决策模块则执行917;若不同,决策模块则不作处理。328.917、决策模块确定画质增强模型是否初始化。若未初始化,决策模块则执行924及其后续步骤;若已初始化,决策模块省略925、926和928。329.918、拦截模块接收渲染指令。330.拦截模块拦截到渲染指令后,同样一方面会发送给识别模块。331.919、拦截模块向识别模块发送渲染指令。332.920、识别模块确定渲染指令是否指示执行绘制操作。若是,识别模块则执行921;若否,识别模块则不作处理。333.921、识别模块从内存中读取存储的fb的id。334.922、识别模块存储读取的fb的id,示例性的存为绘制id。335.拦截模块拦截到渲染指令后,同样另一方面会发送给决策模块。336.923、拦截模块向决策模块发送渲染指令。337.924、决策模块从内存中读取标记位1。若读取到,决策模块则执行921;若未读取到,决策模块则不做处理。338.925、决策模块从内存读取分辨率2。339.926、决策模块向gpu发送资源初始化命令1,资源初始化命令1用于创建纹理2和program1。340.927、画质增强模块接收gpu返回的纹理2的id和program1的id。341.928、决策模块向gpu传递分辨率1和分辨率2。342.929、决策模块将渲染指令发送给画质增强模块。343.930、画质增强模块向gpu发送画质增强命令,画质增强命令中携带有绘制id对应的纹理附件的id和program1的id。344.931、画质增强模块将渲染指令中绘制id对应的纹理附件的id替换为纹理2的id,得到修改后的渲染指令。345.932、画质增强模块向gpu发送修改后的渲染指令。346.上述900-932的具体实现方法可以参见对图3a和图3c中的相关描述,在此不做赘述。可以理解的是,上述实施例中所示的执行顺序仅做示意,不构成任何限定,实施例中的一些步骤也可以被省略。347.前述图8-图9b对应的实施例中,以画质增强模型是与游戏应用固定配置的模型为例来说明本技术提供的图像处理方案。但是实际实施时,并不以此为限。参见图10,在另一些实施例中,应用层还包括游戏助手,用于接收用户对画质增强的增强等级和/或增强方式的设置。框架层还包括负载监控模块,用于根据用户设置来采集电子设备的温度、gpu的负载、cpu的负载等负载参数。配置模块则可以根据负载监控模块采集的负载参数来选择画质增强模型。348.本技术实施例还提供一种电子设备,该电子设备可以包括:存储器和一个或多个处理器(如cpu、gpu、npu等)。存储器和处理器耦合。该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令。当处理器执行计算机指令时,电子设备可执行上述方法实施例中设备执行的各个功能或者步骤。349.本技术实施例还提供一种芯片系统,如图11所示,该芯片系统1100包括至少一个处理器1101和至少一个接口电路1102。处理器1101和接口电路1102可通过线路互联。例如,接口电路1102可用于从其它装置(例如电子设备的存储器)接收信号。又例如,接口电路1102可用于向其它装置(例如处理器1101)发送信号。示例性的,接口电路1102可读取存储器中存储的指令,并将该指令发送给处理器1101。当所述指令被处理器1101执行时,可使得电子设备执行上述实施例中的各个步骤。当然,该芯片系统还可以包含其他分立器件,本技术实施例对此不作具体限定。350.本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的图像处理方法。351.本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的图像处理方法。352.另外,本技术的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的图像处理方法。353.其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。354.通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。355.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。356.该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。357.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。358.该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。359.最后应说明的是,以上实施例仅用以说明本技术的技术方案而非限制,尽管参照较佳实施例对本技术进行了详细说明,本领域的普通技术人员应当理解,可以对本技术的技术方案进行修改或等同替换,而不脱离本技术技术方案的精神和范围。当前第1页12当前第1页12
技术特征:
1.一种图像处理方法,其特征在于,应用于电子设备,所述电子设备上运行有应用程序,所述方法包括:接收所述应用程序下发的第一绑定指令,所述第一绑定指令中的操作类型是只写类型或者可读可写类型、且所述第一绑定指令中的第一帧缓冲标识指示第一帧缓冲,所述第一帧缓冲标识用于在屏渲染;接收所述应用程序下发的第一渲染指令,所述第一渲染指令指示绘制第一图像内容;执行第二渲染指令,在所述第一帧缓冲中绘制第二图像内容,所述第二渲染指令指示绘制所述第二图像内容,所述第二图像内容是对所述第一图像内容提升分辨率后生成的。2.根据权利要求1所述的方法,其特征在于,所述第一图像内容在第二帧缓冲中渲染得到,所述第二帧缓冲用于离屏渲染,所述第二帧缓冲绑定有第一纹理,所述第一纹理的大小满足预设条件。3.根据权利要求2所述的方法,其特征在于,所述第一纹理的大小包括所述第一纹理的宽度和所述第一纹理的高度;所述第一纹理的大小满足所述预设条件,包括:所述第一纹理的宽度大于第一预设值和所述第一纹理的高度大于第一预设值;和/或,所述第一纹理的大小满足所述预设条件,包括:所述第一纹理的宽度和所述第一纹理的高度的比值,与所述电子设备的显示屏的宽度和所述显示屏的高度的比值之差在预设范围内。4.根据权利要求2或3所述的方法,其特征在于,所述第一图像内容存储在所述第一纹理中,所述第二图像内容存储在第二纹理中,所述第一渲染指令中包括第一纹理标识,所述第一纹理标识指示所述第一纹理;在所述执行第二渲染指令之前,所述方法还包括:将所述第一渲染指令中的所述第一纹理标识修改为第二纹理标识,得到所述第二渲染指令,所述第二纹理标识指示所述第二纹理。5.根据权利要求4所述的方法,其特征在于,所述第一渲染指令中还包括第一程序标识,所述第一程序标识指示第一可执行程序,所述第一可执行程序用于根据所述第一可执行程序绑定的第一着色器绘制图像,所述第一着色器中未集成第一模型,所述第一模型用于图像的锐化处理和/或降噪处理;所述得到第二渲染指令还包括:将所述第一渲染指令中的所述第一程序标识修改为第二程序标识,得到所述第二渲染指令,所述第二程序标识指示第二可执行程序,所述第二可执行程序根据所述第二可执行程序中绑定的第二着色器绘制图像,所述第二着色器中集成有所述第一模型;所述执行第二渲染指令,在所述第一帧缓冲中绘制所述第二图像内容,包括:执行所述第二渲染指令,在所述第一帧缓冲中绘制经所述锐化处理后的所述第二图像内容,和/或,在所述第一帧缓冲中绘制经所述降噪处理后的所述第二图像内容。6.根据权利要求2-5中任一项所述的方法,其特征在于,在所述接收所述应用程序下发的第一绑定指令之前,所述方法还包括:接收所述应用程序下发的第一创建命令,所述第一创建命令用于创建第三帧缓冲,所述第一创建命令中包括所述第三帧缓冲绑定的第三纹理的大小,所述第三纹理的大小满足
所述预设条件;存储所述第三纹理的大小;其中,所述第一纹理的大小满足所述预设条件,包括:所述第一纹理的大小等于所述第三纹理的大小。7.根据权利要求2-6中任一项所述的方法,其特征在于,在所述接收所述应用程序下发的第一绑定指令之前,所述方法还包括:接收所述应用程序下发的第二绑定指令,所述第二绑定指令中的所述操作类型不是所述只读类型、且所述第二绑定指令中的第二帧缓冲标识未指示所述第一帧缓冲;存储所述第二帧缓冲标识。8.根据权利要求7所述的方法,其特征在于,在所述接收所述应用程序下发的第二绑定指令之后,所述方法还包括:接收所述应用程序下发的第三渲染指令,所述第三渲染指令中指示执行的渲染操作包括绘制操作;所述存储所述第二帧缓冲标识,包括:响应于接收到所述第三渲染指令,存储所述第二帧缓冲标识。9.根据权利要求7或8所述的方法,其特征在于,在所述存储所述第二帧缓冲标识之后,所述方法还包括:接收所述应用程序下发的第三绑定指令,所述第三绑定指令中的所述操作类型不是所述只读类型、且所述第三绑定指令中的第三帧缓冲标识未指示所述第一帧缓冲;将存储的所述第二帧缓冲标识替换为所述第三帧缓冲标识。10.根据权利要求7-9中任一项所述的方法,其特征在于,在所述接收所述应用程序下发的第一绑定指令之后,所述方法还包括:判断待处理帧缓冲绑定的待处理纹理的大小是否满足预设条件,所述待处理帧缓冲是存储的帧缓冲标识指示的帧缓冲;所述执行第二渲染指令,包括:若所述待处理纹理的大小满足所述预设条件,执行所述第二渲染指令;其中,所述第二帧缓冲是所述待处理帧缓冲,所述第一图像内容是在所述待处理帧缓冲中渲染得到的,所述第一纹理是所述待处理纹理。11.根据权利要求2-10中任一项所述的方法,其特征在于,在所述执行第二渲染指令之前,还包括:处理所述第一图像内容,生成所述第二图像内容。12.根据权利要求11所述的方法,其特征在于,所述处理所述第一图像内容,包括:调用第三可执行程序处理所述第一图像内容,所述第三可执行程序用于根据所述第三可执行程序中绑定的第三着色器绘制图像,所述第三着色器中集成有第二模型的算法源码,所述第二模型用于提升图像的分辨率。13.根据权利要求12所述的方法,其特征在于,所述第一绑定指令中包括绘制大小,在所述接收所述应用程序下发的第一绑定指令之后,所述方法还包括:获取第一标记,所述第一标记指示已完成模型初始化,所述模型包括第二模型;若未获取到所述第一标记,则存储所述绘制大小,若获取到所述第一标记,则不存储所
述绘制大小。14.根据权利要求12所述的方法,其特征在于,在所述接收所述应用程序下发的第一绑定指令,包括:接收所述应用程序下发的分辨率设置指令,所述分辨率设置指令中包括绘制大小;获取第一标记,所述第一标记指示已完成模型初始化,所述模型包括第二模型;若未获取到所述第一标记,则存储所述绘制大小,若获取到所述第一标记,则不存储所述绘制大小。15.根据权利要求14所述的方法,其特征在于,在所述调用第三可执行程序处理所述第一图像内容之前,所述方法还包括:根据第三纹理的大小和所述绘制大小初始化所述第三可执行程序中的所述第二模型;所述调用第三可执行程序处理所述第一图像内容,包括:在初始化所述第三可执行程序中的所述第二模型后,调用所述第三可执行程序处理所述第一图像内容。16.根据权利要求15所述的方法,其特征在于,在初始化所述第三可执行程序中的所述第二模型后,所述方法还包括:存储所述第一标记。17.根据权利要求1-16中任一项所述的方法,其特征在于,在所述接收应用程序下发的第一绑定指令之后,所述方法还包括:存储第二标记,所述第二标记指示当前绑定的是第一帧缓冲;在所述接收所述应用程序下发的第一渲染指令之后,所述方法还包括:获取所述第二标记;所述执行第二渲染指令,包括:若获取到所述第二标记,执行所述第二渲染指令。18.根据权利要求17所述的方法,其特征在于,在所述存储第二标记之后,所述方法还包括:在接收到所述应用程序下发的第四绑定指令后,删除所述第二标记,所述第四绑定指令中的第四帧缓冲标识未指示所述第一帧缓冲。19.根据权利要求12-18中任一项所述的方法,其特征在于,所述第二模型有多个,多个所述第二模型一一对应集成在多个所述第三着色器中,多个所述着色器一一绑定在多个所述第三可执行程序中;在所述调用第三可执行程序处理所述第一图像内容之前,所述方法还包括:根据用户设置的增强等级和/或增强方式选择目标模型,所述目标模型是多个所述第二模型中的一个;所述调用第三可执行程序处理所述第一图像内容,包括:调用所述目标模型所在的所述第三可执行程序处理所述第一图像内容。20.根据权利要求1-19中任一项所述的方法,其特征在于,所述第一绑定指令中包括glbindframebuffer函数,所述第一绑定指令中的glbindframebuffer函数中包括操作类型和第一帧缓冲标识。21.根据权利要求2-20中任一项所述的方法,其特征在于,所述第一渲染指令中包括
glbindtexture函数,所述第一渲染指令中的glbindtexture函数中包括存储所述第一图像内容的第一纹理的第一纹理标识。22.根据权利要求4-21中任一项所述的方法,其特征在于,所述第二渲染指令中包括glbindtexture函数,所述第二渲染指令中的glbindtexture函数中包括存储所述第二图像内容的第二纹理的第二纹理标识。23.一种电子设备,其特征在于,所述电子设备上运行有应用程序,所述电子设备包括:存储器和一个或多个处理器,所述存储器与所述处理器耦合;其中,所述存储器中存储有计算机程序代码,所述计算机程序代码包括计算机指令,当所述计算机指令被所述处理器执行时,使得所述电子设备执行如权利要求1-22中任一项所述的方法。24.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-22中任一项所述的方法。25.一种芯片系统,其特征在于,所述芯片系统应用于包括处理器和存储器的电子设备,所述芯片系统包括一个或多个接口电路和一个或多个处理器,所述接口电路和所述处理器通过线路互联,所述接口电路用于从所述电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括所述存储器中存储的计算机指令,当所述处理器执行所述计算机指令时,使得所述电子设备执行如权利要求1-22中任一项所述的方法。

技术总结
本申请实施例提供的一种图像处理方法、电子设备及存储介质,涉及计算机技术领域,可以提升图像的画质。其中,方法包括:接收应用程序下发的第一绑定指令,第一绑定指令中的操作类型不是只读类型、且第一绑定指令中的第一帧缓冲标识指示用于在屏渲染的第一帧缓冲。接收应用程序下发的第一渲染指令,第一渲染指令指示绘制第一图像内容。执行第二渲染指令,在第一帧缓冲中绘制第二图像内容,第二渲染指令指示绘制第二图像内容,第二图像内容是基于第一图像内容生成的,第二图像内容的分辨率高于第一图像内容的分辨率。图像内容的分辨率。图像内容的分辨率。


技术研发人员:沈平圳 刘金晓
受保护的技术使用者:荣耀终端有限公司
技术研发日:2022.02.28
技术公布日:2023/9/5
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐