CN115018955A - 一种图像生成方法及设备 - Google Patents
一种图像生成方法及设备 Download PDFInfo
- Publication number
- CN115018955A CN115018955A CN202111021048.7A CN202111021048A CN115018955A CN 115018955 A CN115018955 A CN 115018955A CN 202111021048 A CN202111021048 A CN 202111021048A CN 115018955 A CN115018955 A CN 115018955A
- Authority
- CN
- China
- Prior art keywords
- shader
- simplified
- vertex
- type
- original
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/20—Drawing from basic elements, e.g. lines or circles
- G06T11/206—Drawing of charts or graphs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/40—Analysis of texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/70—Determining position or orientation of objects or cameras
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Image Generation (AREA)
Abstract
本申请公开了一种图像生成方法及设备,涉及电子设备领域,解决了复杂的着色器增加游戏图像的渲染时间,从而加重电子设备的负载,导致游戏过程中发生丢帧和卡顿现象的问题。具体方案为:获取第一绘制指令对应的第一着色器。其中,第一绘制指令用于绘制待绘制图像,第一绘制指令可包含第一着色器的信息。在获取到第一着色器后,可以根据第一着色器确定出第二着色器,然后,替换第一着色器为第二着色器,以根据第二着色器绘制待绘制图像。其中,第二着色器的复杂度低于第一着色器的复杂度,即第二着色器相比于第一着色器的有所简化。
Description
技术领域
本申请涉及电子设备技术领域,尤其涉及一种图像生成方法及设备。
背景技术
随着计算机技术的发展,电子设备(如,智能手机、电脑等)目前可以运行各种各样的电子游戏,为了更加真实和精细化的绘制游戏中的游戏图像,游戏厂商一般会使用复杂的着色器来绘制游戏图像以提升画质。但是,复杂的着色器会增加游戏图像的渲染时间,从而加重电子设备的负载,导致游戏过程中发生丢帧和卡顿现象。
发明内容
本申请提供一种图像生成方法及设备,解决了复杂的着色器增加游戏图像的渲染时间,从而加重电子设备的负载,导致游戏过程中发生丢帧和卡顿现象的问题。
为了达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种图像生成方法,该方法可应用于电子设备。该方法包括:获取第一绘制指令对应的第一着色器。其中,第一绘制指令用于绘制待绘制图像,第一绘制指令可包含第一着色器的信息。在获取到第一着色器后,可以根据第一着色器确定出第二着色器,然后,替换第一着色器为第二着色器,以根据第二着色器绘制待绘制图像。其中,第二着色器的复杂度低于第一着色器的复杂度,即第二着色器相比于第一着色器的有所简化。
采用上述技术方案,在电子设备对待绘制图像进行绘制时,可以将绘制指令对应的着色器替换为相应的简化后的着色器,从而使电子设备在生成相对复杂的图像时,能够采用简化的着色器来进行绘制,从而避免生成图像时电子设备负载过重导致丢帧或卡顿的现象。
在一种可能的实现方式中,第一着色器的信息包括第一着色器的存储地址,获取第一绘制指令对应的第一着色器,包括:根据第一着色器的存储地址获取第一着色器。
如此,根据第一着色器的存储地址能够直接读取到第一着色器的文件从而获取第一着色器的源码。当然,在一些其他实施方式中,第一着色器的信息还可以包括第一着色器的标识,可以根据第一着色器的标识先查询获取第一着色器的存储地址,然后再获取第一着色器,此处不做限制。
在另一种可能的实现方式中,电子设备预先存储有至少一个原始着色器,以及原始着色器分别对应的简化后的简化着色器;根据第一着色器确定第二着色器,包括:将预先存储的各原始着色器分别与第一着色器进行匹配,以确定第三着色器,然后获取待绘制图像的顶点信息,再根据顶点信息确定第二着色器。其中,第三着色器为与第一着色器匹配的原始着色器;顶点信息为用于表征待绘制图像的顶点特征的信息;第二着色器为第三着色器对应的简化着色器。
如此,能够预先对多种原始着色器进行简化处理以得到分别对应不同原始着色器的多种简化着色器,从而后续可以先将第一着色器匹配到对应的原始着色器,然后选择该原始着色器简化后的多种简化着色器中的一个以进行替换。从而能够提供多种简化着色器供选择。
在另一种可能的实现方式中,第二着色的类型以及第三着色器的类型均包括顶点着色器和像素着色器;根据顶点信息确定第二着色器,包括:根据顶点信息确定类型为顶点着色器的第二着色器,类型为顶点着色器的第二着色器为类型为顶点着色器的第三着色器对应的简化着色器;根据类型为顶点着色器的第二着色器,确定类型为像素着色器的第二着色器,类型为像素着色器的第二着色器为类型为像素着色器的第三着色器对应的简化着色器。
如此,能够分别确定出类型为顶点着色器的简化着色器和类型为像素着色器的简化着色器,从而便于后续分别对类型为顶点着色器的第一着色器和类型为像素着色器的第一着色器进行替换。同时对两种类型的着色器进行替换,能够均衡提高采用着色器绘制待绘制图像的渲染效率。
在另一种可能的实现方式中,根据顶点信息确定类型为顶点着色器的第二着色器,包括:根据顶点信息确定绘制待绘制图像时的负载;根据负载按照预设的替换规则,确定类型为顶点着色器的第二着色器。
如此,根据绘制待绘制图像的负载来确定简化后的着色器,即第二着色器,能够避免绘制较简单待绘制图像时采用了简化程度较高的第二着色器造成绘制图像的画质较差的问题。当然,也能够避免绘制较复杂待绘制图像时采用了简化程度较低的第二着色器造成绘制图像的渲染时间较长的问题。
在另一种可能的实现方式中,类型为顶点着色器的第三着色器对应的简化着色器包括第一简化着色器和第二简化着色器,第一简化着色器的画质误差小于第二简化着色器,替换规则包括:当负载小于预设阈值时,以第一简化着色器作为类型为顶点着色器的第二着色器;当负载大于预设阈值时,以第二简化着色器作为类型为顶点着色器的第二着色器。
如此,能够根据预设阈值来确定不同负载时应采用那种画质误差(即简化程度)的第二着色器,从而便于根据负载梯度选择不同简化程度的简化着色器。
在另一种可能的实现方式中,类型为像素着色器的第三着色器对应的简化着色器包括第三简化着色器和第四简化着色器,第三简化着色器的画质误差小于第四简化着色器;根据类型为顶点着色器的第二着色器,确定类型为像素着色器的第二着色器,包括:当以第一简化着色器作为类型为顶点着色器的第二着色器时,以第三简化着色器作为类型为像素着色器的第二着色器;当以第二简化着色器作为类型为顶点着色器的第二着色器时,以第四简化着色器作为类型为像素着色器的第二着色器。
如此,能够保持选择的类型为顶点着色器的第二着色器的简化程度与类型为像素着色器的第二着色器的简化程度相近,避免绘制的待绘制图像因顶点绘制和像素绘制的画质误差不一致而失真。
在另一种可能的实现方式中,顶点信息包括待绘制图像的顶点数量以及顶点深度值。
在另一种可能的实现方式中,顶点深度值为待绘制图像各顶点的深度坐标值的平均值。
在另一种可能的实现方式中,将预先存储的各原始着色器分别与第一着色器进行匹配,以确定第三着色器,包括:获取预先存储的各原始着色器;将获取的各原始着色器分别与第一着色器进行源码匹配,确定与第一着色器源码匹配成功的原始着色器为第三着色器。
通过源码匹配,能够保证匹配到的原始着色器与第一着色器类型和效果等均一致,从而保证匹配到的原始着色器的准确性。
在另一种可能的实现方式中,电子设备预先存储有记录原始着色器和简化着色器的存储地址的目录列表文件;获取预先存储的各原始着色器,包括:根据目录列表文件获取预先存储的各原始着色器的存储地址;根据存储地址获取预先存储的各原始着色器。
通过设置目录列表文件,能够更加便捷的获取原始着色器。
在另一种可能的实现方式中,替换第一着色器为第二着色器,以根据第二着色器绘制待绘制图像,包括:获取第二着色器的存储地址;将第二绘制指令从指示第一着色器的存储地址替换为指示第二着色器的存储地址,第二绘制指令用于编译着色器;根据第三绘制指令采用第二着色器绘制待绘制图像,第三绘制指令用于调用着色器。
如此,能够使图形库根据第二绘制指令将确定出的第二着色器进行编译,以及根据第三绘制指令调用编译后的第二着色器以进行待绘制图像的绘制,实施相对便捷。
在另一种可能的实现方式中,电子设备预先存储有记录原始着色器和简化着色器的存储地址的目录列表文件;目录列表文件还包括各原始着色器分别与各自简化后的简化着色器间的映射关系;获取第二着色器的存储地址,包括:根据第三着色器按照映射关系查询第二着色器;根据目录列表文件获取第二着色器的存储地址。
通过设置目录列表文件,能够更加便捷的获取第二着色器的存储地址。
在另一种可能的实现方式中,电子设备包括拦截模块、匹配模块以及存储器;
获取第一绘制指令对应的第一着色器,包括:拦截模块拦截应用程序下发的第一绘制指令,向匹配模块发送第一绘制指令;匹配模块根据第一绘制指令中的第一着色器的信息从存储器获取第一着色器的源码。
在另一种可能的实现方式中,电子设备还包括参数获取模块和计算决策模块,电子设备预先存储有至少一个原始着色器,以及原始着色器分别对应的简化后的简化着色器;根据第一着色器确定第二着色器,包括:匹配模块从存储器中获取预先存储的各原始着色器的源码;匹配模块将获取的各原始着色器的源码与第一着色器的源码进行匹配,以与第一着色器的源码匹配成功的原始着色器作为第三着色器;匹配模块向参数获取模块发送第三着色器的标识;参数获取模块根据第一着色器的标识获取待绘制图像的顶点信息;参数获取模块向计算决策模块发送顶点信息和第三着色器的标识;计算决策模块根据顶点信息和第三着色器的标识确定第二着色器。
在另一种可能的实现方式中,第二着色的类型以及第三着色器的类型均包括顶点着色器和像素着色器;计算决策模块根据顶点信息和第三着色器的标识确定第二着色器,包括:计算决策模块根据顶点信息,确定绘制待绘制图像时的负载;计算决策模块根据第三着色器的标识确定第三着色器;计算决策模块根据负载按照预设的替换规则,确定类型为顶点着色器的第二着色器,类型为顶点着色器的第二着色器为类型为顶点着色器的第三着色器对应的简化着色器;计算决策模块根据类型为顶点着色器的第二着色器确定类型为像素着色器的第二着色器,类型为像素着色器的第二着色器为类型为像素着色器的第三着色器对应的简化着色器。
在另一种可能的实现方式中,电子设备还包括替换模块和图形库,方法还包括:计算决策模块向替换模块发送第二着色器的存储地址;拦截模块拦截应用程序下发的第二绘制指令,向替换模块发送第二绘制指令;替换模块将第二绘制指令从指向第一着色器的存储地址替换为指向第二着色器的存储地址,第二绘制指令用于编译着色器;拦截模块拦截应用程序下发的第三绘制指令,向替换模块发送第三绘制指令;替换模块根据第三绘制指令调用图形库采用第二着色器绘制待绘制图像。
第二方面,本申请提供一种电子设备,包括:处理器,用于存储该处理器可执行指令的存储器。该处理器被配置为执行上述指令时,使得该电子设备实现如第一方面或第一方面的可能的实现方式中任一项所述的图像生成方法。
第三方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序指令。当计算机程序指令被电子设备执行时,使得电子设备实现如第一方面或第一方面的可能的实现方式中任一项所述的图像生成方法。
第四方面,本申请实施例提供一种计算机程序产品,包括计算机可读代码,当所述计算机可读代码在电子设备中运行时,使得电子设备实现如第一方面或第一方面的可能的实现方式中任一项所述的图像生成方法。
应当理解的是,上述第二方面至第四方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
图1为本申请实施例提供的一种电子设备的结构示意图;
图2为本申请实施例提供的一种系统架构的简化示意图;
图3为本申请实施例提供的一种图像生成方法的流程示意图;
图4a为本申请实施例提供的一种游戏图像的示意图;
图4b为采用相关技术对图4a所示的游戏图像进行渲染的效果示意图;
图4c为采用本申请实施例提供的图像生成方法对图4a所示的游戏图像进行渲染的效果示意图;
图5为本申请实施例提供的另一种图像生成方法的流程示意图。
具体实施方式
随着计算机技术的发展,如智能手机、电脑等的电子设备的计算能力越来越强,目前,在电子设备中已经能够运行各种各样的电子游戏。随着电子设备的计算能力的提高,部分游戏厂商会采用复杂的着色器来绘制游戏图像,从而使游戏图像更加真实和精细化,具有更高的画质。但是,采用复杂的着色器来绘制游戏图像,随之而来的是游戏图像的渲染时间的增加,从而加重电子设备的负载,导致游戏过程中发生丢帧的卡顿现象的几率增大。
为解决上述问题,本申请实施例提供一种图像生成方法,该方法可以应用于电子设备生成图像并显示的场景中。
在本申请实施例中,该图像生成方法可以是:在电子设备中预先存储一种或多种原始着色器以及各原始着色器对应的简化着色器。其中,每个原始着色器可以对应有一个或多个不同简化程度的简化着色器。在电子设备根据绘制指令流生成图像时,将预先存储的原始着色器与绘制指令流中指定的用于绘制待绘制图像的着色器(即,绘制指令对应的着色器,在本申请中还可以称为第一着色器)进行匹配,以匹配出与绘制指令流对应的着色器匹配的原始着色器(即,与第一着色器匹配的原始着色器,在本申请中还可以称为第三着色器)。匹配成功后,根据绘制相应图像(即待绘制图像)所需的顶点信息(如,顶点数量和顶点深度值)预测出绘制该图像时的负载,然后根据预测出的负载按照预设的替换策略,将绘制指令流中指定的用于绘制待绘制图像的着色器替换为匹配出的原始着色器对应的简化着色器(即,根据替换策略确定出要替换的第三着色器简化后的相应的简化着色器,在本申请中确定出的要替换的简化着色器还可以称为第二着色器),以通过简化着色器(即第二着色器)对相应的待绘制图像进行绘制生成相应图像,即替换上述第一着色器为第二着色器,以根据第二着色器进行待绘制图像的绘制。可选地,当简化着色器仅包括一个,且该简化着色器与第一着色器对应,则还可以不根据第一着色器匹配确定出第三着色器,而是直接根据第一着色器确定要替换的其对应的简化着色器(即第二着色器),从而替换第一着色器为第二着色器以根据第二着色器进行待绘制图像的绘制。
如此,在电子设备对待绘制图像进行绘制时,可以根据预测出的绘制该待绘制图像时的负载将绘制指令对应的着色器替换为相应的简化后的着色器,从而使电子设备在生成相对复杂的图像时,能够采用简化的着色器来进行绘制,从而避免生成图像时电子设备负载过重导致丢帧或卡顿的现象。
以下,将结合附图对本申请实施例提供的图像生成方法进行说明。
在本申请实施例中,电子设备可以是手机、平板电脑、手持计算机,PC,蜂窝电话,个人数字助理(personal digital assistant,PDA),可穿戴式设备(如:智能手表、智能手环),智能家居设备(如:电视机),车机(如:车载电脑),智慧屏,游戏机,以及增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备等。本申请实施例对于电子设备的具体设备形态不作特殊限制。
示例地,以电子设备为手机为例,图1示出了本申请实施例提供的一种电子设备的结构示意图。也即,示例性的,图1所示的电子设备可以是手机。
如图1所示,电子设备可以包括:射频(radio frequency,RF)电路110、存储器120、输入单元130、显示单元140、传感器150、音频电路160、无线保真(wireless fidelity,WiFi)模块170、处理器180、电源190以及蓝牙模块1100等部件。本领域技术人员可以理解,图1中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图1对电子设备的部分构成部件进行具体的介绍:
存储器120可用于存储软件程序以及模块,处理器180通过运行存储在存储器120的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)、引导装载程序(boot loader)等;存储数据区可存储根据电子设备的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元130可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。具体地,输入单元130可包括触控面板131以及其他输入设备132。触控面板131,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板131上或在触控面板131附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板131可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器180,并能接收处理器180发来的命令并加以执行。具体地,其他输入设备132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。在本申请实施例中,用户可以通过触控面板131、鼠标或键盘来输入通过电脑的系统打开模拟器中的文件的操作。
显示单元140可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种菜单。显示单元140可包括显示面板141,可选的,可以采用液晶显示器(liquidcrystal display,LCD)、有机发光二极管(organic light-emitting diode,OLED)等形式来配置显示面板141。进一步的,触控面板131可覆盖显示面板141,当触控面板131检测到在其上或附近的触摸操作后,传送给处理器180以确定触摸事件的类型,随后处理器180根据触摸事件的类型在显示面板141上提供相应的视觉输出。虽然在图1中,触控面板131与显示面板141是作为两个独立的部件来实现电子设备的输入和输入功能,但是在某些实施例中,可以将触控面板131与显示面板141集成而实现电子设备的输入和输出功能。
处理器180是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器120内的软件程序或模块,以及调用存储在存储器120内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器180可包括一个或多个处理单元;优选的,处理器180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器180中。
当然,可以理解的,上述图1所示仅仅为电子设备的形态为手机时的示例性说明。若电子设备是平板电脑,手持计算机,PC,PDA,可穿戴式设备(如:智能手表、智能手环),智能家居设备(如:电视机),车机(如:车载电脑),智慧屏,游戏机以及AR/VR设备等其他设备形态时,电子设备的结构中可以包括比图1中所示更少的结构,也可以包括比图1中所示更多的结构,在此不作限制。
以下实施例中的方法均可以在具有上述硬件结构的电子设备中实现。
在本申请实施例中,如图2所示,电子设备的系统架构可以包括应用层、系统框架层以及硬件层。其中,应用层可用于部署能够在电子设备上运行的一个或多个应用程序,例如本申请实施例中,应用层中可以部署有游戏应用程序等。系统框架层中可以部署有拦截模块、匹配模块、参数获取模块、计算决策模块、替换模块以及图形库等。硬件层可以包括CPU、GPU以及存储器等硬件。
系统框架层中部署的图形库也称为绘图库,图形库用于定义跨编程语言、跨平台的应用程序编程接口(Application Programming Interface,API),其中包含许多对图形进行处理的函数,以OpenGL(Open Graphics Library,开放式图形库)为例,OpenGL定义的API中包括用于绘制二维图像或三维图像的接口(该接口包括绘制函数,例如绘制函数glDrawElements()),还包括将绘制函数绘制的图像呈现到显示界面上的接口(该接口包括呈现函数,例如函数eglSwapBuffers())等,本申请实施例在此不进行一一举例。其中,OpenGL中的函数可以通过指令调用,例如,通过绘制指令流中的绘制指令可以调用绘制函数,以绘制二维图像或三维图像。该绘制指令是在应用程序开发时开发人员根据图形库内的函数编写的命令,用于调用与绘制指令对应的图形库的接口。
以应用程序为游戏应用程序为例,在相关技术中,当游戏应用程序启动后,游戏应用程序可以向图形库发送绘制指令流,以通过绘制指令流调用图形库中的绘制函数进行图像绘制生成相应的游戏图像。通常,在绘制指令流中,会包含所绘制的对应的图像的顶点信息,纹理信息、着色器信息等。顶点信息用于说明构成对应的对象的顶点的数量和位置,纹理信息则用于说明对应的对象表面需要填充的颜色或特定图案。着色器信息则通常包括着色器的标识、存储地址等信息,根据着色器信息能够调用相应的着色器,从而根据顶点信息和纹理信息绘制待绘制图像。其中,着色器可以包括顶点着色器和像素着色器,顶点着色器可根据顶点信息来绘制待绘制图像的轮廓,像素着色器可根据纹理信息来为待绘制图像填充颜色。在顶点着色器中通常包含有顶点文件(.vert文件),像素着色器中通常包含有像素文件(.frag文件)。绘制指令流中一般会包含多条绘制指令用于携带上述信息以及调用图形库中相应的绘制函数。
继续以应用程序为游戏应用程序为例,在本申请实施例中,基于如图2所示的系统框架,电子设备在游戏应用程序向图形库发送绘制指令流时,可以通过拦截模块对绘制指令流中与着色器相关的绘制指令进行拦截。在拦截到相关指令(如着色器相关指令1)后,匹配模块可以将预先存储在存储器中的原始着色器与拦截到的绘制指令中指定的用于绘制待绘制图像(如待绘制的游戏图像)的着色器进行匹配。并且,参数获取模块可以从存储器中获取得到待绘制图像的顶点信息(如,顶点数量和顶点深度值)。之后,计算决策模块可以根据参数获取模块获取的顶点信息预测出绘制相应的待绘制图像时的负载,然后根据预测出的负载按照预设的替换策略和匹配出的原始着色器的标识,确定是否将拦截到的相关指令中指定的着色器替换为匹配模块匹配出的预先存储的原始着色器对应的简化着色器,以及当匹配出的原始着色器对应多个简化着色器时确定具体替换对应的哪个简化着色器。从而,当计算决策模块确定替换的简化着色器后,可向替换模块指示确定出的简化着色器,替换模块便可以将拦截到的相关指令(如着色器相关指令2)中指定的着色器替换为计算决策模块确定的简化着色器,并调用图形库根据替换后的简化着色器对待绘制图像进行绘制以生成相应的图像。
示例地,当游戏应用程序要生成一帧游戏图像时,游戏应用程序可以下发用于绘制该游戏图像的绘制指令流。此时,拦截模块可以对该绘制指令流中与着色器相关的绘制指令进行拦截。其中,拦截模块拦截的绘制指令可以包括glLinkProgram(链接着色器对象指令),glShaderSource(关联着色器指令),glCompileShader(着色器编译指令),以及glUseProgram(着色器调用指令)等指令。在一种实施方式中,拦截模块可以基于钩子(Hook)技术拦截游戏应用程序输出的绘制指令流。拦截模块具体的拦截方式为:游戏应用程序启动时,拦截模块修改游戏线程的线程本地存储(Thread Local Storage,TLS)中的函数指针列表,将该列表记录的图形函数指针,替换为替代指针。图形函数指针,为指向图形库的实现函数的函数指针;替代指针,为指向其他模块(如,匹配模块、参数获取模块、计算决策模块、替换模块等)的实现函数的函数指针。例如,可以将上述的函数指针列表记录的glLinkProgram指令以及glShaderSource指令的指向图形库的实现函数的函数指针,替换为指向匹配模块的实现函数的函数指针。还可将glShaderSource指令的指向图形库的实现函数的函数指针,替换为指向参数获取模块的实现函数的函数指针。可以将glCompileShader指令和glUseProgram指令的指向图形库的实现函数的函数指针,替换为指向替换模块的实现函数的函数指针。从而便于各个模块根据拦截模块拦截的指令执行相应的操作。
基于图2所示的系统框架,图3示出了本申请实施例提供的一种图像生成方法的流程示意图。如图3所示,该图像生成方法可以包括以下S301-S308。
S301、当拦截模块拦截到glLinkProgram指令时,拦截模块可以将glLinkProgram指令传递给匹配模块。
其中,glLinkProgram指令通常用于将着色器对象链接到对应的程序上,因此当拦截模块拦截到glLinkProgram指令时,则可说明绘制指令流的后续指令中可能包含指定的着色器以及待绘制图像的顶点信息。所以,当拦截模块拦截到glLinkProgram指令时,便可触发该图像生成方法以对游戏应用程序的绘制指令流中指定的着色器进行替换。
S302、匹配模块可以从存储器中获取预先存储的原始着色器。
当拦截模块拦截到glLinkProgram指令时,匹配模块可以先获取预先存储的原始着色器,从而便于后续匹配模块对存储的原始着色器进行匹配。
作为一种示例,在存储器中可以预先存储一种或多种原始着色器,以及各原始着色器通过简化得到的一个或多个简化着色器。
例如,以存储器中预先存储有多种原始着色器为例(以下均以此为例)。可以预先将这些原始着色器进行简化处理,然后将简化后的简化着色器与对应的原始着色器一起存储在存储器中。其中,各个原始着色器可以根据不同的简化需求得到多个不同的简化着色器。并且,通常着色器的类型包括顶点着色器和像素着色器,因此可以分别对类型为顶点着色器的原始着色器以及类型为像素着色器的原始着色器进行简化。如,根据对生成的图像的画质要求不同,可以将各类型为顶点着色器的原始着色器分别简化为渲染时间有所减少且画质较好的简化着色器(即类型为顶点着色器的画质较好的简化着色器)和渲染时间较短但画质较差的简化着色器(即类型为顶点着色器的渲染时间短的简化着色器)。即,类型为顶点着色器的画质较好的简化着色器(在本申请中还可以称为第一简化着色器)的画质误差小于类型为顶点着色器的渲染时间短的简化着色器(在本申请中还可以称为第二简化着色器)。还可以将各类型为像素着色器的原始着色器分别简化为渲染时间有所减少且画质较好的简化着色器(即类型为像素着色器的画质较好的简化着色器)和渲染时间较短但画质较差的简化着色器(即类型为像素着色器的渲染时间短的简化着色器)。即,类型为像素着色器的画质较好的简化着色器(在本申请中还可以称为第三简化着色器)的画质误差小于类型为像素着色器的渲染时间短的简化着色器(在本申请中还可以称为第四简化着色器)。
在一些可能的实施方式中,匹配模块中可以预先设置各个原始着色器的存储地址,匹配模块可以根据存储地址获取预先存储的原始着色器。
在另一些可能的实施方式中,还可以在存储器中预先存储一个用于导航各个原始着色器以及简化着色器的文件(如目录列表文件)。该目录列表文件中可以包括各个原始着色器的标识和存储地址,以及各个原始着色器对应的简化着色器的标识和存储地址。在匹配模块中预设该目录列表文件的存储地址,匹配模块可以根据该存储地址打开目录列表文件以通过目录列表文件获取各个原始着色器的存储地址,从而获取各个原始着色器。
可选地,还可以直接将上述的目录列表文件预设在匹配模块中。
可选地,当拦截模块拦截到glLinkProgram指令,并将glLinkProgram指令传递给匹配模块后,匹配模块从存储器中获取预先存储的原始着色器之后还可以将glLinkProgram指令再回调给图形库,以便图形库执行该指令。
S303、当拦截模块拦截到glShaderSource指令(即本申请中第一绘制指令的一个示例)时,拦截模块可以将glShaderSource指令传递给匹配模块。
其中,glShaderSource指令中通常包含有指定的用于绘制待绘制的游戏图像的着色器的着色器信息,因此,当拦截模块拦截到glShaderSource指令时,将该指令传递给匹配模块能便于后续匹配模块根据该指令中的着色器信息匹配到预先存储的原始着色器。
通常,游戏应用会分别下发指向顶点着色器的glShaderSource指令和指向像素着色器的glShaderSource指令,以分别指示顶点着色器和像素着色器。因此,拦截模块可以分别拦截到两个包含不同着色器信息(即指向不同类型着色器)的glShaderSource指令。例如,拦截模块可以拦截到glShaderSource指令1,该指令包括顶点着色器的标识,顶点着色器的数量(例如,数量为1等),顶点着色器的存储地址,顶点着色器组的长度(通常顶点着色器数量为1时,该长度为空)等。拦截模块还可以拦截到glShaderSource指令2,该指令包括像素着色器的标识,像素着色器的数量(例如,数量为1等),像素着色器的存储地址,像素着色器组的长度(通常像素着色器数量为1时,该长度为空)等。
S304、匹配模块根据glShaderSource指令指定的着色器(即上述的第一着色器),将获取的预先存储的原始着色器与指定的着色器进行匹配。
匹配模块根据glShaderSource指令指定的着色器匹配预先存储的原始着色器可以是,将存储的原始着色器的源码与指定的着色器的源码进行匹配。例如,将各个原始着色器的顶点文件(.vert文件)或像素文件(.frag文件)分别与指定的着色器的顶点文件(.vert文件)或像素文件(.frag文件)进行比对,若某个原始着色器的顶点文件或像素文件与指定的着色器比对成功(即内容一致)则可认为该原始着色器与指定的着色器相匹配。例如,当glShaderSource指令包含的着色器信息包括顶点着色器的存储地址,则匹配模块可以根据该顶点着色器的存储地址获取顶点着色器的顶点文件,然后将该顶点文件与各原始着色器的顶点文件进行比对,将比对成功的原始着色器作为与顶点着色器匹配的原始着色器。又例如,当glShaderSource指令包含的着色器信息包括像素着色器的存储地址,则匹配模块可以根据该像素着色器的存储地址获取像素着色器的像素文件,然后将该像素文件与各原始着色器的像素文件进行比对,将比对成功的原始着色器作为与像素着色器匹配的原始着色器。
当匹配模块成功匹配到相应的预先存储的原始着色器(即上述的第三着色器)之后,匹配模块可以将该原始着色器的标识发送给参数获取模块,以便于后续参数获取模块获取待绘制的游戏图像的顶点信息后将顶点信息和匹配到的原始着色器的标识一起发送给计算决策模块。
可选地,当拦截模块拦截到glShaderSource指令,并将glShaderSource指令传递给匹配模块后,匹配模块根据glShaderSource指令指定的着色器匹配预先存储的原始着色器之后还可以将glShaderSource指令再回调给图形库,以便图形库执行该指令。
可选地,S302可以在S304之前的任意时刻执行,如在S303之后,再执行S302和S304,此处不做限制。
S305、参数获取模块从顶点缓冲区和深度缓冲区获取待绘制的游戏图像的顶点信息(如,顶点数量和顶点深度值),将顶点信息发送给计算决策模块。
其中,一般在游戏应用的加载过程或运行过程中,游戏应用会将要用到的顶点数据,深度数据,纹理数据等下发给CPU,CPU会将顶点数据和纹理数据分别存储在存储器中。其中,顶点数据可以存储在存储器中的顶点缓冲区,深度数据可以存储在存储器中的深度缓冲区。示例地,顶点数据可以包括待绘制的游戏图像的顶点VTX信息。当glShaderSource指令指示的是顶点着色器时,在glShaderSource指令中可以携带有待绘制图像的顶点着色器标识,因此,参数获取模块可以根据顶点着色器标识从顶点缓冲区中包含的相应的VTX信息获取得到待绘制的游戏图像的顶点数量。深度数据可以包括待绘制的游戏图像各顶点的深度坐标(即gl_Position.z)。因此,参数获取模块可以根据顶点着色器标识从深度缓冲区中读取相应的待绘制的游戏图像各顶点的深度坐标,并以各顶点的深度坐标(gl_Position.z)的平均值作为顶点深度值(当然,在其他可能的实施方式中,还可以以各顶点的深度坐标的中位数等作为顶点深度值,此处不做限制)。其中,为了便于计算还可以将各顶点的深度坐标(gl_Position.z)的平均值归一化到[-1,1](当然,当深度坐标已经为归一化的值时,则可以不再对平均值进行归一化处理)以作为顶点深度值(即,对顶点深度值进行归一化处理)。当顶点深度值为-1时则表示待绘制的游戏图像距离相机的位置最近,当顶点深度值为1时则表示待绘制的游戏图像距离相机的位置最远。
作为一种示例,参数获取模块开始获取顶点信息的时机可以是参数获取模块接收到匹配模块发送的原始着色器的标识。即,参数获取模块收到匹配模块发送的原始着色器的标识之后,参数获取模块便从顶点缓冲区和深度缓冲区获取待绘制的游戏图像的顶点信息。
作为另一种示例,拦截模块拦截到glShaderSource指令后,还可以将该指令传递给参数获取模块。此时,参数获取模块开始获取顶点信息的时机可以是参数获取模块接收到拦截模块传递的glShaderSource指令。即,参数获取模块收到拦截模块传递的glShaderSource指令之后,参数获取模块便从顶点缓冲区和深度缓冲区获取待绘制的游戏图像的顶点信息。
当参数获取模块获取到顶点信息后,可以将顶点信息和匹配模块匹配到的原始着色器的标识发送给计算决策模块,以便于后续计算决策模块根据顶点信息和原始着色器的标识选择相应的简化着色器。
S306、计算决策模块根据顶点信息预测绘制对应的待绘制的游戏图像时的负载,根据预测出的负载按照预设的替换策略(或称为替换规则)确定要替换的简化着色器(即上述的第三着色器)。
示例地,以顶点信息包括顶点数量和顶点深度值为例。
待绘制的游戏图像的顶点数量越多,则说明待绘制的游戏图像的复杂性越高,从而电子设备的负载便越高渲染时间越长,因此,当待绘制的游戏图像的顶点数量越多时,则可认为绘制该游戏图像时的负载将越高。
待绘制的游戏图像的顶点深度值则可以表征待绘制的游戏图像距离相机的位置的远近。其中,顶点深度值越小则表征待绘制的游戏图像距离相机的位置越近。而当待绘制的游戏图像距离相机的位置越近时,用户对游戏图像的清晰度感知也越明显,因此对距离相机的位置越近的游戏图像的清晰度要求也越高。所以,当顶点深度值越小时,则需要对待绘制的游戏图像进行较高画质的绘制。
基于上述顶点数量和顶点深度值的表征特性,则计算决策模块,可以是采用如下公式根据顶点信息预测绘制对应的待绘制的游戏图像时的负载。
其中,L为预测的负载(load),z为顶点深度值,Vnum为顶点数量,Vtotal为整帧图像的像素点个数(即屏幕的像素点个数,可以从硬件信息中获取分辨率信息以得到,也可预设在计算决策模块中),a和b均为常数,可根据分别对顶点深度值所表征的游戏图像的画质需求和顶点数量所表征的游戏图像的复杂度的权重来设置a和b。
以a和b均为0.5,z为归一化到[-1,1]的顶点深度值,预先存储的各原始着色器分别对应的简化着色器包括画质较好的简化着色器和渲染时间短的简化着色器,两个简化着色器为例,则上述L的范围为[-0.5,1]。此时,当z很小时则说明待绘制的游戏图像距离相机的位置的距离较近,则需要对待绘制的游戏图像进行高画质的绘制,以提高用户体验。而当z较大时则说明待绘制的游戏图像距离相机的位置的距离较远,则不需要对待绘制的游戏图像进行高画质的绘制,而需要考虑游戏图像的复杂度对绘制时电子设备的负载和渲染时长的影响。所以,可以将预设的替换策略设为:当上述L大于或等于-0.5,小于0时,选用画质较好的简化着色器,当上述L大于0,小于1时,选用渲染时间短的简化着色器。其中,当L等于0时,可以设为选用画质较好的简化着色器也可以设为选用渲染时间短的简化着色器,此处不做限制。即,预设的替换策略为:当负载L小于预设阈值0时,以画质较好的简化着色器作为要替换的简化着色器,当负载L大于预设阈值0时,以渲染时间短的简化着色器作为要替换的简化着色器。其中,当负载L等于预设阈值0时,既可以以画质较好的简化着色器作为要替换的简化着色器,还可以以渲染时间短的简化着色器作为要替换的简化着色器。
当然,在本申请实施例中,若各原始着色器对应的简化着色器的数量不止两个,即为两个以上,则还可以设置对应于不同简化着色器的多个阈值范围,以根据计算出的负载L所满足的阈值范围来确定对应的简化着色器,此处不做限制。
可选地,计算决策模块可以根据参数获取模块发送的匹配模块匹配到的原始着色器的标识,在该标识对应的原始着色器对应的简化着色器中选择要替换的简化着色器。例如,在存储器中可以存储有用于导航各个原始着色器以及简化着色器的文件(如目录列表文件)。例如,如表1所示,该目录列表文件中可以包括各个原始着色器的标识和存储地址,以及各个原始着色器对应的简化着色器的标识和存储地址,还包括各原始着色器分别与各自简化后的简化着色器间的映射关系(例如表1中与原始着色器位于同一行的简化着色器为该行的原始着色器简化后的简化着色器)。其中,标识可以是名称或唯一编码(identitydocument,ID),表1则以标识为名称为例。
表1
当计算决策模块计算出预测的负载后,可以从存储器中获取目录列表文件,然后从目录列表文件中查找匹配模块匹配到的原始着色器的标识所对应原始着色器,然后根据映射关系查询到对应的简化着色器。
示例地,以简化着色器包括画质较好的简化着色器和渲染时间短的简化着色器为例,目录列表文件中可以在画质较好的简化着色器的标识中对其添加标注“0”,在渲染时间短的简化着色器的标识中对其添加标注“1”。当计算决策模块需要选择画质较好的简化着色器时,可以根据原始着色器标识在目录列表文件中查找匹配模块匹配到的原始着色器,然后再查找出该原始着色器对应的简化着色器中标识包含有标注“0”的简化着色器,确定此简化着色器为要替换的简化着色器。当计算决策模块需要选择渲染时间短的简化着色器时,可以根据原始着色器标识在目录列表文件中查找匹配模块匹配到的原始着色器,然后再查找出该原始着色器对应的简化着色器中标识包含有标注“1”的简化着色器,确定此简化着色器为要替换的简化着色器。
可选地,在计算决策模块预测出的负载较低时,计算决策模块还可以不选择要替换的简化着色器,即依旧采用绘制指令流中指定的着色器进行游戏图像的绘制。因此,在本申请实施例中,对于具体如何根据预测出的负载来决定简化着色器不做限制,即对预设的替换策略不做限制。
需要说明的是,计算决策模块根据以上示例的方法步骤确定出的要替换的简化后的着色器,其类型可以是顶点着色器或像素着色器。相应地,当计算决策模块根据上述步骤确定出简化后的顶点着色器(即类型为顶点着色器的简化着色器)时,便可以根据确定出的简化后的顶点着色器确定出简化后的像素着色器(即类型为像素着色器的简化着色器),或者,当计算决策模块根据上述步骤确定出简化后的像素着色器时,便可以根据确定出的简化后的像素着色器确定出简化后的顶点着色器。示例地,计算决策模块根据上述步骤确定出简化后的顶点着色器时,便可以根据确定出的简化后的顶点着色器确定出相同简化程度的简化后的像素着色器。例如,当计算决策模块确定出要替换的简化后的顶点着色器为匹配到的类型为顶点着色器的原始着色器对应的画质较好的简化着色器(即类型为顶点着色器的画质较好的简化着色器)时,相应的还可以确定出要替换的简化后的像素着色器也为匹配到的类型为像素着色器的原始着色器对应的画质较好的简化着色器(即类型为像素着色器的画质较好的简化着色器)。又例如,当计算决策模块确定出要替换的简化后的顶点着色器为匹配到的类型为顶点着色器的原始着色器对应的渲染时间短的简化着色器(即类型为顶点着色器的渲染时间短的简化着色器)时,相应的还可以确定出要替换的简化后的像素着色器也为匹配到的类型为像素着色器的原始着色器对应的渲染时间短的简化着色器(即类型为像素着色器的渲染时间短的简化着色器)。
作为一种示例,在计算决策模块确定出要替换的简化着色器之后,计算决策模块可以将确定出的简化着色器(如包括简化后的顶点着色器和简化后的像素着色器)的存储地址发送给替换模块,以便于替换模块根据存储地址替换相应的简化着色器。
S307、当拦截模块拦截到glCompileShader指令(即本申请中第二绘制指令的一个示例)时,拦截模块将glCompileShader指令传递给替换模块,替换模块将该指令指定的着色器替换为计算决策模块确定的要替换的简化着色器。替换后拦截模块可以将glCompileShader指令回调给图形库以便对替换的简化着色器进行编译。
其中,glCompileShader指令通常用于对着色器进行编译,如将着色器编译为二进制。
作为一种示例,当计算决策模块将确定出的简化着色器的存储地址发送给替换模块后,替换模块则可以将编译指令glCompileShader从指向当前的着色器(即绘制指令流中指定的着色器)的存储地址替换为指向待替换的着色器(即计算决策模块确定出的简化着色器)的存储地址,以使用新的着色器进行编译。例如,glCompileShader的原始地址(即当前着色器的存储地址)为“xxx.1.xxx”,替换模块可以将该原始地址替换为待替换的着色器的存储地址,如“xxx.01.xxx”。
作为另一种示例,计算决策模块确定出要替换的简化着色器之后,可以将确定出的简化着色器的标识发送给替换模块。替换模块可以从存储器中获取前述的目录列表文件,然后根据接收到的简化着色器的标识在目录列表文件中查找对应的简化着色器的存储地址,然后再基于上述示例根据简化着色器的存储地址来替换简化着色器。
需要说明的是,由于着色器通常包括顶点着色器和像素着色器,因此,游戏应用通常会下发两个glCompileShader指令。其中,一个glCompileShader指令指向的着色器为顶点着色器,一个glCompileShader指令指向的着色器为像素着色器。因此,S307可以执行两次,以将两个glCompileShader指令分别指向的顶点着色器和像素着色器,替换为计算决策模块确定出的简化后的顶点着色器和简化后的像素着色器,以便分别对替换后的顶点着色器和像素着色器进行编译。即,当拦截模块拦截到指向顶点着色器的glCompileShader指令时,可将该指令传递给替换模块,替换模块将该指令从指向当前的顶点着色器的存储地址替换为指向确定出的简化后的顶点着色器的存储地址,以便后续对简化后的顶点着色器进行编译。当拦截模块拦截到指向像素着色器的glCompileShader指令时,可将该指令传递给替换模块,替换模块将该指令从指向当前的像素着色器的存储地址替换为指向确定出的简化后的像素着色器的存储地址,以便后续对简化后的像素着色器进行编译。具体替换模块将glCompileShader指令指定的顶点着色器或像素着色器替换为简化后的顶点着色器或简化后的像素着色器的实施方式,可以参考上述示例。
S308、当拦截模块拦截到glUseProgram指令(即本申请中第三绘制指令的一个示例)时,拦截模块将glUseProgram指令传递给替换模块,替换模块根据glUseProgram指令调用图形库采用替换的简化着色器绘制对应的待绘制的游戏图像。
其中,glUseProgram指令用于调用图形库采用相应的编译后的着色器文件进行待绘制的游戏图像的绘制。
作为一种示例,要替换的简化着色器被编译后,替换模块可以将glUseProgram指令指向编译后的替换的简化着色器(包括简化后的顶点着色器和简化后的像素着色器)的存储地址,以便通过该指令调用图形库使其按照替换后的简化着色器执行待绘制的游戏图像的绘制。即,当拦截模块拦截到的glUseProgram指令时,替换模块可以将该glUseProgram指令指向编译后的简化着色器(包括简化后的顶点着色器和简化后的像素着色器)的存储地址(或简化后的顶点着色器和简化后的像素着色器链接到的一个Program ID),以便通过该指令调用图形库使其按照替换后的简化顶点着色器执行待绘制的游戏图像的绘制。
可选地,在本申请实施例中,基于上述图3所示的方法,在游戏应用进行更新而改变了绘制指令流中指定的着色器时,为了能够避免匹配模块匹配不到相应的原始着色器,还可以通过离线更新原始着色器以及对应的简化着色器,然后再以云端推送的方式将更新后的原始着色器以及对应的简化着色器推送到电子设备中进行预先存储。
采用上述实施例中的方法,在电子设备对待绘制图像进行绘制时,可以根据预测出的绘制该待绘制图像时的负载来替换绘制指令对应的着色器为简化后的着色器,从而使电子设备在生成相对复杂的图像时,能够采用简化的着色器来进行绘制,从而避免生成图像时电子设备负载过重导致丢帧或卡顿的现象。例如,如图4a所示为待绘制的游戏图像,该待绘制的游戏图像中包括一团烟雾401,该烟雾401距离相机的位置距离较近,烟雾401体积较大。因此,采用相关技术,直接按照游戏应用下发是绘制指令流中指定的着色器进行绘制,则可以得到如图4b所示的游戏图像。由于该游戏画面中烟雾401距离相机的位置距离较近,烟雾401体积较大,因此游戏图像的顶点数量很多,游戏图像复杂度较高。所以在直接采用绘制指令流中指定的着色器进行绘制时,渲染时间较长,电子设备的负载较高。而采用本申请实施例提供的方法,替换绘制指令流中的着色器为简化着色器,然后通过简化着色器进行游戏图像的绘制,则可以得到如图4c所示的游戏图像。该游戏图像由于使用了简化着色器,因此渲染时间相对较短,因此,能够在尽量减小对绘制的游戏图像的清晰度影响的情况下,降低电子设备的负载。
基于前述实施方式,图5为本申请实施例提供的一种图像生成方法的流程示意图。该方法可以包括以下S501-S509。
S501、获取第一绘制指令对应的第一着色器。
其中,第一绘制指令包含第一着色器的信息,该信息中可以包括第一着色器的存储地址。可以根据该第一着色器的存储地址获取第一着色器。
S502、将预先存储的各原始着色器分别与第一着色器进行匹配,以确定第三着色器。
其中,第三着色器为与第一着色器匹配的原始着色器。
S501和S502均可以由图2中所示的匹配模块实施。
S503、获取待绘制图像的顶点信息。
其中,该顶点信息为用于表征待绘制图像的顶点特征的信息。
该步骤可以由图2中所示的参数获取模块实施。
S504、根据顶点信息确定绘制待绘制图像时的负载。
S505、根据绘制待绘制图像时的负载按照预设的替换规则,确定类型为顶点着色器的第二着色器。
其中,类型为顶点着色器的第二着色器为类型为顶点着色器的第三着色器对应的简化着色器。
S506、根据类型为顶点着色器的第二着色器,确定类型为像素着色器的第二着色器。
其中,类型为像素着色器的第二着色器为类型为像素着色器的第三着色器对应的简化着色器。
S504-S506均可以由图2中所示的计算决策模块实施。
当分别确定出类型为顶点着色器的第二着色器和类型为像素着色器的第二着色器之后,便可以将第一着色器替换为第二着色器,以便根据第二着色器绘制待绘制图像。
通常,由于第一着色器的类型包括顶点着色器和像素着色器,因此,在替换时,可以分别替换类型的顶点着色器的第一着色器为确定出的类型为顶点着色器的第二着色器,替换类型为像素着色器的第一着色器为确定出的类型为像素着色器的第二着色器。因此,可以执行以下S507和S508。
S507、获取第二着色器的存储地址。
可以分别获取类型为顶点着色器的第二着色器的存储地址和类型为像素着色器的第二着色器的存储地址,以便于后续分别进行替换。
S508、将第二绘制指令从指示第一着色器的存储地址替换为指示第二着色器的存储地址。
其中,第二绘制指令为用于编译着色器的指令。可以分别将用于编译顶点着色器的第二绘制指令从指示类型为顶点着色器的第一着色器替换为指示类型为顶点着色器的第二着色器。将用于编译像素着色器的第二绘制指令从指示类型为像素着色器的第一着色器替换为指示类型为像素着色器的第二着色器。以便于分别对类型为顶点着色器的第二着色器和类型为像素着色器的第二着色器进行编译。
当将第一着色器替换为第二着色器之后,便可以根据第二着色器来绘制待绘制图像,例如执行以下S509。
S509、根据第三绘制指令采用第二着色器绘制待绘制图像。
其中,第三绘制指令为用于调用着色器的指令。可将第三绘制指令指向编译后的类型为顶点着色器的第二着色器和编译后的类型为像素着色器的第二着色器,从而分别对类型为顶点着色器的第二着色器和类型为像素着色器的第二着色器进行调用以分别绘制待绘制图像的轮廓和为待绘制图像填充颜色,以完成待绘制图像的绘制。
S507-S509均可以由图2中所示的替换模块实施。
需要说明的是,上述的S501-S509的具体实施方式,可以参见前文,此处不做赘述。
本申请实施例还提供一种电子设备,包括:处理器,用于存储该处理器可执行指令的存储器。该处理器被配置为执行上述指令时,使得该电子设备实现本申请任一实施例提供的图像生成方法。
本申请实施例还提供一种计算机存储介质,用于存储计算机程序,计算机程序被执行时,具体用于实现本申请任一实施例提供的图像生成方法。
本申请实施例还提供一种计算机程序产品,包括多条可执行的计算机命令,该产品的计算机命令被执行时,具体用于实现本申请任一实施例提供的图像生成方法。
Claims (19)
1.一种图像生成方法,其特征在于,应用于电子设备,所述方法包括:
获取第一绘制指令对应的第一着色器,所述第一绘制指令用于绘制待绘制图像,所述第一绘制指令包含所述第一着色器的信息;
根据所述第一着色器确定第二着色器,所述第二着色器的复杂度低于所述第一着色器的复杂度;
替换所述第一着色器为所述第二着色器,以根据所述第二着色器绘制所述待绘制图像。
2.根据权利要求1所述的方法,其特征在于,所述第一着色器的信息包括所述第一着色器的存储地址,所述获取第一绘制指令对应的第一着色器,包括:
根据所述第一着色器的存储地址获取所述第一着色器。
3.根据权利要求1或2所述的方法,其特征在于,所述电子设备预先存储有至少一个原始着色器,以及所述原始着色器分别对应的简化后的简化着色器;所述根据所述第一着色器确定第二着色器,包括:
将预先存储的各原始着色器分别与所述第一着色器进行匹配,以确定第三着色器,所述第三着色器为与所述第一着色器匹配的原始着色器;
获取所述待绘制图像的顶点信息,所述顶点信息为用于表征所述待绘制图像的顶点特征的信息;
根据所述顶点信息确定所述第二着色器,所述第二着色器为所述第三着色器对应的简化着色器。
4.根据权利要求3所述的方法,其特征在于,所述第二着色的类型以及所述第三着色器的类型均包括顶点着色器和像素着色器;
所述根据所述顶点信息确定所述第二着色器,包括:
根据所述顶点信息确定类型为顶点着色器的第二着色器,所述类型为顶点着色器的第二着色器为类型为顶点着色器的第三着色器对应的简化着色器;
根据所述类型为顶点着色器的第二着色器,确定类型为像素着色器的第二着色器,所述类型为像素着色器的第二着色器为类型为像素着色器的第三着色器对应的简化着色器。
5.根据权利要求4所述的方法,其特征在于,所述根据所述顶点信息确定类型为顶点着色器的第二着色器,包括:
根据所述顶点信息确定绘制所述待绘制图像时的负载;
根据所述负载按照预设的替换规则,确定所述类型为顶点着色器的第二着色器。
6.根据权利要求5所述的方法,其特征在于,所述类型为顶点着色器的第三着色器对应的简化着色器包括第一简化着色器和第二简化着色器,所述第一简化着色器的画质误差小于所述第二简化着色器,所述替换规则包括:
当所述负载小于预设阈值时,以所述第一简化着色器作为所述类型为顶点着色器的第二着色器;
当所述负载大于所述预设阈值时,以所述第二简化着色器作为所述类型为顶点着色器的第二着色器。
7.根据权利要求6所述的方法,其特征在于,所述类型为像素着色器的第三着色器对应的简化着色器包括第三简化着色器和第四简化着色器,所述第三简化着色器的画质误差小于所述第四简化着色器;所述根据所述类型为顶点着色器的第二着色器,确定类型为像素着色器的第二着色器,包括:
当以所述第一简化着色器作为所述类型为顶点着色器的第二着色器时,以所述第三简化着色器作为所述类型为像素着色器的第二着色器;
当以所述第二简化着色器作为所述类型为顶点着色器的第二着色器时,以所述第四简化着色器作为所述类型为像素着色器的第二着色器。
8.根据权利要求3至7任一项所述的方法,其特征在于,所述顶点信息包括所述待绘制图像的顶点数量以及顶点深度值。
9.根据权利要求8所述的方法,其特征在于,所述顶点深度值为所述待绘制图像各顶点的深度坐标值的平均值。
10.根据权利要求3至9任一项所述的方法,其特征在于,所述将预先存储的各原始着色器分别与所述第一着色器进行匹配,以确定第三着色器,包括:
获取预先存储的各原始着色器;
将获取的各原始着色器分别与所述第一着色器进行源码匹配,确定与所述第一着色器源码匹配成功的原始着色器为所述第三着色器。
11.根据权利要求10所述的方法,其特征在于,所述电子设备预先存储有记录原始着色器和简化着色器的存储地址的目录列表文件;
所述获取预先存储的各原始着色器,包括:
根据所述目录列表文件获取预先存储的各原始着色器的存储地址;
根据所述存储地址获取预先存储的各原始着色器。
12.根据权利要求3至11任一项所述的方法,其特征在于,所述替换所述第一着色器为所述第二着色器,以根据所述第二着色器绘制所述待绘制图像,包括:
获取所述第二着色器的存储地址;
将第二绘制指令从指示所述第一着色器的存储地址替换为指示所述第二着色器的存储地址,所述第二绘制指令用于编译着色器;
根据第三绘制指令采用所述第二着色器绘制所述待绘制图像,所述第三绘制指令用于调用着色器。
13.根据权利要求12所述的方法,其特征在于,所述电子设备预先存储有记录原始着色器和简化着色器的存储地址的目录列表文件;所述目录列表文件还包括各原始着色器分别与各自简化后的简化着色器间的映射关系;
所述获取所述第二着色器的存储地址,包括:
根据所述第三着色器按照所述映射关系查询所述第二着色器;
根据所述目录列表文件获取所述第二着色器的存储地址。
14.根据权利要求1至13任一项所述的方法,其特征在于,所述电子设备包括拦截模块、匹配模块以及存储器;
所述获取第一绘制指令对应的第一着色器,包括:
所述拦截模块拦截应用程序下发的所述第一绘制指令,向所述匹配模块发送所述第一绘制指令;
所述匹配模块根据所述第一绘制指令中的所述第一着色器的信息从所述存储器获取所述第一着色器的源码。
15.根据权利要求14所述的方法,其特征在于,所述电子设备还包括参数获取模块和计算决策模块,所述电子设备预先存储有至少一个原始着色器,以及所述原始着色器分别对应的简化后的简化着色器;所述根据所述第一着色器确定第二着色器,包括:
所述匹配模块从所述存储器中获取预先存储的各原始着色器的源码;
所述匹配模块将获取的各原始着色器的源码与所述第一着色器的源码进行匹配,以与所述第一着色器的源码匹配成功的原始着色器作为第三着色器;
所述匹配模块向所述参数获取模块发送所述第三着色器的标识;
所述参数获取模块根据所述第一着色器的标识获取所述待绘制图像的顶点信息;
所述参数获取模块向所述计算决策模块发送所述顶点信息和所述第三着色器的标识;
所述计算决策模块根据所述顶点信息和所述第三着色器的标识确定所述第二着色器。
16.根据权利要求15所述的方法,其特征在于,所述第二着色的类型以及所述第三着色器的类型均包括顶点着色器和像素着色器;
所述计算决策模块根据所述顶点信息和所述第三着色器的标识确定所述第二着色器,包括:
所述计算决策模块根据所述顶点信息,确定绘制所述待绘制图像时的负载;
所述计算决策模块根据所述第三着色器的标识确定所述第三着色器;
所述计算决策模块根据所述负载按照预设的替换规则,确定类型为顶点着色器的第二着色器,所述类型为顶点着色器的第二着色器为类型为顶点着色器的第三着色器对应的简化着色器;
所述计算决策模块根据所述类型为顶点着色器的第二着色器确定类型为像素着色器的第二着色器,所述类型为像素着色器的第二着色器为类型为像素着色器的第三着色器对应的简化着色器。
17.根据权利要求15或16所述的方法,其特征在于,所述电子设备还包括替换模块和图形库,所述方法还包括:
所述计算决策模块向所述替换模块发送所述第二着色器的存储地址;
所述拦截模块拦截应用程序下发的第二绘制指令,向所述替换模块发送所述第二绘制指令;
所述替换模块将所述第二绘制指令从指向所述第一着色器的存储地址替换为指向所述第二着色器的存储地址,所述第二绘制指令用于编译着色器;
所述拦截模块拦截应用程序下发的第三绘制指令,向所述替换模块发送所述第三绘制指令;
所述替换模块根据所述第三绘制指令调用所述图形库采用所述第二着色器绘制所述待绘制图像。
18.一种电子设备,其特征在于,包括:处理器,用于存储所述处理器可执行指令的存储器,所述处理器被配置为执行所述指令时,使得所述电子设备实现如权利要求1至17任一项所述的方法。
19.一种计算机程序产品,其特征在于,包括计算机可读代码,当所述计算机可读代码在电子设备中运行时,使得电子设备实现如权利要求1至17任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310481186.6A CN116681784A (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
CN202111021048.7A CN115018955B (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111021048.7A CN115018955B (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310481186.6A Division CN116681784A (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115018955A true CN115018955A (zh) | 2022-09-06 |
CN115018955B CN115018955B (zh) | 2023-05-16 |
Family
ID=83064357
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111021048.7A Active CN115018955B (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
CN202310481186.6A Pending CN116681784A (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310481186.6A Pending CN116681784A (zh) | 2021-09-01 | 2021-09-01 | 一种图像生成方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN115018955B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023093212A1 (zh) * | 2021-11-24 | 2023-06-01 | 荣耀终端有限公司 | 一种图像处理方法及电子设备 |
CN116600175A (zh) * | 2023-07-18 | 2023-08-15 | 荣耀终端有限公司 | 丢帧预测方法和电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7671862B1 (en) * | 2004-05-03 | 2010-03-02 | Microsoft Corporation | Systems and methods for providing an enhanced graphics pipeline |
US8223158B1 (en) * | 2006-12-19 | 2012-07-17 | Nvidia Corporation | Method and system for connecting multiple shaders |
CN104167015A (zh) * | 2014-07-31 | 2014-11-26 | 浙江大学 | 一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法 |
CN109389663A (zh) * | 2018-10-31 | 2019-02-26 | Oppo广东移动通信有限公司 | 画面渲染方法、装置、终端及存储介质 |
US20190164337A1 (en) * | 2017-11-30 | 2019-05-30 | Advanced Micro Devices, Inc. | Method and apparatus of cross shader compilation |
CN110543620A (zh) * | 2019-09-03 | 2019-12-06 | 武汉中海庭数据技术有限公司 | 一种基于OpenGL ES2.0绘制图元的方法及系统 |
CN111179150A (zh) * | 2019-12-27 | 2020-05-19 | 浙江大学 | 一种基于绘制指令流的着色器自动简化方法和系统 |
CN112884875A (zh) * | 2021-03-19 | 2021-06-01 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、计算机设备和存储介质 |
-
2021
- 2021-09-01 CN CN202111021048.7A patent/CN115018955B/zh active Active
- 2021-09-01 CN CN202310481186.6A patent/CN116681784A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7671862B1 (en) * | 2004-05-03 | 2010-03-02 | Microsoft Corporation | Systems and methods for providing an enhanced graphics pipeline |
US8223158B1 (en) * | 2006-12-19 | 2012-07-17 | Nvidia Corporation | Method and system for connecting multiple shaders |
CN104167015A (zh) * | 2014-07-31 | 2014-11-26 | 浙江大学 | 一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法 |
US20190164337A1 (en) * | 2017-11-30 | 2019-05-30 | Advanced Micro Devices, Inc. | Method and apparatus of cross shader compilation |
CN109389663A (zh) * | 2018-10-31 | 2019-02-26 | Oppo广东移动通信有限公司 | 画面渲染方法、装置、终端及存储介质 |
CN110543620A (zh) * | 2019-09-03 | 2019-12-06 | 武汉中海庭数据技术有限公司 | 一种基于OpenGL ES2.0绘制图元的方法及系统 |
CN111179150A (zh) * | 2019-12-27 | 2020-05-19 | 浙江大学 | 一种基于绘制指令流的着色器自动简化方法和系统 |
CN112884875A (zh) * | 2021-03-19 | 2021-06-01 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、计算机设备和存储介质 |
Non-Patent Citations (2)
Title |
---|
徐晓: "渲染优化专利技术综述", 《电子测试》 * |
顾伟: "OpenGL几何着色器研究", 《中国科技信息》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023093212A1 (zh) * | 2021-11-24 | 2023-06-01 | 荣耀终端有限公司 | 一种图像处理方法及电子设备 |
CN116600175A (zh) * | 2023-07-18 | 2023-08-15 | 荣耀终端有限公司 | 丢帧预测方法和电子设备 |
CN116600175B (zh) * | 2023-07-18 | 2023-10-20 | 荣耀终端有限公司 | 丢帧预测方法和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN116681784A (zh) | 2023-09-01 |
CN115018955B (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11875010B2 (en) | Systems, methods, and computer-readable media for managing collaboration on a virtual work of art | |
JP7397979B2 (ja) | 画像レンダリング方法および関連装置、並びにコンピュータデバイスおよびプログラム | |
EP4070865A1 (en) | Method and apparatus for displaying virtual scene, and device and storage medium | |
EP3111318B1 (en) | Cross-platform rendering engine | |
US20170255450A1 (en) | Spatial cooperative programming language | |
CN115018955B (zh) | 一种图像生成方法及设备 | |
KR102048885B1 (ko) | 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템, 및 이를 이용한 렌더링 방법 | |
KR20100004119A (ko) | 포스트-렌더링 그래픽스 오버레이 | |
KR20100104804A (ko) | Ddi, ddi 제공방법 및 상기 ddi를 포함하는 데이터 처리 장치 | |
US11727632B2 (en) | Shader binding management in ray tracing | |
CN113129417A (zh) | 一种全景应用中图像渲染的方法及终端设备 | |
EP4290464A1 (en) | Image rendering method and apparatus, and electronic device and storage medium | |
US10675538B2 (en) | Program, electronic device, system, and method for determining resource allocation for executing rendering while predicting player's intent | |
CN113256764A (zh) | 一种光栅化装置、方法及计算机存储介质 | |
CN114511438A (zh) | 一种控制负载的方法、装置及设备 | |
CN108369726B (zh) | 根据场景改变图形处理分辨率的方法和便携电子设备 | |
CN112116719B (zh) | 三维场景中对象的确定方法、装置、存储介质和电子设备 | |
CN115501588A (zh) | 图像渲染方法、装置、存储介质及电子设备 | |
CN113713375B (zh) | 一种界面元素显示方法、装置、终端及存储介质 | |
WO2024093609A1 (zh) | 一种叠加光遮挡的渲染方法、装置及相关产品 | |
CN117899472A (zh) | 对象渲染方法、装置、介质及设备 | |
CN117131296A (zh) | 内容呈现方法、装置、设备及存储介质 | |
CN115797532A (zh) | 虚拟场景的渲染方法、装置、计算机设备及存储介质 | |
CN116740241A (zh) | 一种图像处理方法及电子设备 | |
CN118247402A (zh) | 基于gpu的粒子数据处理方法、粒子渲染方法、装置及设备 |
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 |