CN116703690A - 图像处理方法和设备 - Google Patents

图像处理方法和设备 Download PDF

Info

Publication number
CN116703690A
CN116703690A CN202211367310.8A CN202211367310A CN116703690A CN 116703690 A CN116703690 A CN 116703690A CN 202211367310 A CN202211367310 A CN 202211367310A CN 116703690 A CN116703690 A CN 116703690A
Authority
CN
China
Prior art keywords
shader
thread
rendering
compiling
sub
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
Application number
CN202211367310.8A
Other languages
English (en)
Other versions
CN116703690B (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211367310.8A priority Critical patent/CN116703690B/zh
Priority to CN202410552092.8A priority patent/CN118446879A/zh
Publication of CN116703690A publication Critical patent/CN116703690A/zh
Application granted granted Critical
Publication of CN116703690B publication Critical patent/CN116703690B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

本申请涉及图像渲染技术领域,特别涉及一种图像处理方法和设备。所述方法包括:渲染线程创建顶点着色器并加载顶点着色器源码;在编译子线程接收到编译所述顶点着色器的任务信息之后,所述编译子线程对所述顶点着色器进行编译;在所述编译子线程编译所述顶点着色器时,所述渲染线程创建片段着色器;所述渲染线程基于顶点着色器和片段着色器,对待渲染图像进行渲染处理。在本申请实施例中,电子设备渲染界面图像时,可以由编译子线程执行着色器编译,在编译子线程执行着色器编译时,渲染线程可以继续执行渲染界面图像的其它步骤,由此可以节约着色器编译耗时,提高界面图像的渲染效率。

Description

图像处理方法和设备
技术领域
本申请涉及图像渲染技术领域,特别涉及一种图像处理方法和设备。
背景技术
电子设备显示一帧界面图像之前,需要对该帧界面图像进行渲染。电子设备渲染一帧界面图像包括渲染该帧界面图像包含的图形窗口。电子设备在渲染一帧界面图像的图形窗口时,如果电子设备未存储有图形窗口的着色器程序,则电子设备需要编译用于绘制该图形窗口的着色器程序。电子设备编译着色器程序时会有一定的编译耗时。尤其当一帧界面图像要编译的图形窗口为多个时,会进一步增加编译耗时,造成编译卡顿。
发明内容
本申请提供了一种图像处理方法和设备,电子设备渲染界面图像时,可以由编译子线程执行着色器编译,在编译子线程执行着色器编译时,渲染线程可以继续执行渲染界面图像的其它步骤,由此可以节约着色器编译耗时,提高界面图像的渲染效率。
第一方面,本发明实施例提供了一种图像处理方法。渲染线程对待渲染界面的第一图形窗口进行渲染时,渲染线程创建用于渲染第一图形窗口的着色器程序。其中,渲染线程创建用于渲染第一图形窗口的着色器程序时包括创建着色器程序(Program)、创建着色器(Shader)、加载着色器源码、编译着色器、绑定着色器以及将着色器链接至程序。其中,为了加快着着色器程序的创建效率,本发明实施例方法由编译子线程进行着色器编译。其中,在编译子线程执行着色器编译时,渲染线程可以执行与创建编译着色器程序相关的其它步骤,由此可以提高着色器程序的创建效率,进而提高图像渲染效率。
在一些实施例中,本发明实施例的图像处理方法包括:渲染线程创建顶点着色器(Vertex Shader)并加载顶点着色器源码。在编译子线程接收到编译顶点着色器的任务信息之后,编译子线程对顶点着色器进行编译。在编译子线程编译顶点着色器时,渲染线程可以继续执行创建片段着色器(Fragment Shader)的步骤。本发明实施例中,编译顶点着色器和创建片段着色器的步骤可以并行执行,由此可以加快着色器程序的编译效率,提高图像渲染效率。
在一些实施例中,渲染线程创建顶点着色器并加载顶点着色器源码之后,渲染线程可以判断顶点着色器源码的复杂度是否大于第一设定值。若顶点着色器源码的复杂度大于第一设定值,则渲染线程向所述编译子线程发送编译所述顶点着色器的任务信息。编译子线程接收到编译所述顶点着色器的任务信息之后,编译子线程对顶点着色器进行编译。在编译子线程对顶点着色器进行编译时,渲染线程可以执行创建片段着色器、加载片段着色器源码等步骤。通过此方式,可以节约渲染线程的算力消耗,且渲染线程可以并行执行创建片段着色器的步骤。
在一些实施例中,若顶点着色器源码的复杂度小于等于第一设定值,则由渲染线程编译顶点着色器。可选的,在渲染线程编译顶点着色器时,渲染线程可以并行执行创建所述片段着色器的步骤。可选的,渲染线程本身也可以支持多线程的并发执行。可选的,渲染线程本身可以包含主线程和子线程。可选的,渲染线程本身的子线程与上述编译子线程是不同的线程。渲染线程的主线程确定顶点着色器源码的复杂度较低时,渲染线程的主线程可以通过渲染线程的子线程编译顶点着色器。其中,本发明实施例将渲染线程本身的子线程编译着色器称为渲染线程编译着色器。可选的,在渲染线程编译顶点着色器时,渲染线程可以继续执行创建片段着色器的步骤。
在一些实施例中,渲染线程创建片段着色器之后,渲染线程加载片段着色器源码。渲染线程加载片段着色器源码之后,渲染线程可以根据片段着色器是否是待创建的最后一个着色器、渲染线程当前是否存在正在执行的着色器编译任务或者片段着色器源码的复杂度来决策是否由编译子线程来执行片段着色器的编译。
在一些实施例中,渲染线程加载片段着色器源码。若片段着色器源码为待创建的最后一个着色器,此时再将片段着色器的编译任务分配给编译子线程,对于提高编译效率的作用有限。因此,渲染线程可以执行对片段着色器的编译。若片段着色器不是待创建的最后一个着色器,则可以由编译子线程执行对片段着色器的编译。其中,在编译子线程执行对片段着色器的编译时,渲染线程可以创建下一个需要创建的着色器。
在一些实施例中,若片段着色器不是待创建的最后一个着色器,则可以由编译子线程执行对所述片段着色器的编译。可选的,若片段着色器不是待创建的最后一个着色器,则渲染线程也可以进一步判断片段着色器源码的复杂度是否大于第一设定值。若片段着色器源码的复杂度大于第一设定值,则可以由编译子线程执行对片段着色器的编译。若片段着色器源码的复杂度小于等于第一设定值,则可以由渲染线程执行对片段着色器的编译。
在一些实施例中,渲染线程执行对上述顶点着色器的编译。若渲染线程对顶点着色器的编译还未完成时,渲染线程当前已经加载片段着色器源码,则渲染线程可以将编译片段着色器源码的任务分配给编译子线程。由此实现顶点着色器和片段着色器的并行编译,提高着色器编译效率。
在一些实施例中,渲染线程执行对上述顶点着色器的编译。若渲染线程对顶点着色器的编译还未完成时,渲染线程当前已经加载片段着色器源码,则渲染线程可以根据片段着色器源码的复杂度来决策是由渲染线程编译片段着色器还是由编译子线程编译片段着色器。可选的,若片段着色器源码的复杂度大于第一设定值,则可以由编译子线程执行对片段着色器的编译。此时,渲染线程对顶点着色器的编译和编译子线程对片段着色器的编译可以并行执行,提高着色器的编译效率。若片段着色器源码的复杂度小于等于第一设定值,则可以由渲染线程执行对片段着色器的编译。可选的,渲染线程对顶点着色器的编译还未完成,又需要对片段着色器进行编译,则渲染线程可以通过自身的子线程并行对顶点着色器和片段着色器编译。
在一些实施例中,渲染线程执行对上述顶点着色器的编译。若渲染线程加载片段着色器源码时,对顶点着色器的编译已经完成,则渲染线程可以判断片段着色器源码的复杂度是否大于第一设定值。若片段着色器源码的复杂度大于第一设定值,则可以由编译子线程执行对片段着色器的编译。若片段着色器源码的复杂度小于等于第一设定值,则可以由渲染线程执行对片段着色器的编译。
在一些实施例中,渲染线程加载片段着色器源码后,渲染线程也可以仅根据片段着色器源码的复杂度来决策是否由编译子线程编译片段着色器。具体的,若片段着色器源码的复杂度大于第一设定值,则由编译线程执行对片段着色器的编译。若片段着色器源码的复杂度小于等于第一设定值,则可以由渲染线程执行对片段着色器的编译。
在一些实施例中,若顶点着色器和片段着色器的编译均由编译子线程执行,则编译子线程可以并行执行对顶点着色器和片段着色器的编译。
在一些实施例中,渲染线程还创建有链接子程序。渲染线程获取顶点着色器和片段着色器的编译结果之后,渲染线程可以将顶点着色器链接至着色器程序,链接子线程将所述片段着色器链接至着色器程序。或者,所述链接子线程将所述顶点着色器链接至着色器程序,所述渲染线程将所述片段着色器链接至着色器程序。本发明实施例中,当有多个着色器链接任务时,该多个着色器链接任务可以由渲染线程和链接子程序并行执行,由此提高着色器链接至着色器程序的效率。
在一些实施例中,所述链接子线程的运行优先级高于用户界面UI线程触发的其它线程。在一些实施例中,线程运行的优先级别划分为预设的多个等级,如划分为1-10级,每个线程启动时具有默认级别。本发明实施例,可以将链接子线程的运行优先级设置为高于默认级别或者高于预设指定级别,由此以使链接线程的运行优先级高于UI线程触发的其它线程。或者,链接子线程在UI线程设置的高优先级运行组内。可选的,UI线程可以设置高优先级运行组,也称为VIP运行组。VIP运行组内的各个线程的运行优先级高于非VIP运行组的线程。UI线程可以将链接子线程设置为VIP运行组内的线程,由此以使链接子线程的运行优先级高于非VIP运行组的线程。本发明实施例中,链接子线程运行的优先级高于UI线程触发的其它线程,由此可以确保连接子线程能够及时获取CPU资源以执行着色器链接任务。在一些实施例中,所述链接子线程运行在主频频率高于第二设定值的CPU内核。可选的,链接子线程运行在主频频率较高的CPU内核,由此可以提高链接子线程的运行效率。
在一些实施例中,所述渲染线程和/或所述编译子线程的运行优先级也可以设置为高于UI线程触发的其它线程,具体设置方式可以参见链接子线程。可选的,所述渲染线程和/或所述编译子线程运行在主频频率高于第三设定值的CPU内核。本发明实施例中,渲染线程和/或所述编译子线程的运行优先级高于UI线程触发的其它线程,由此可以确保渲染线程和/或所述编译子线程能够及时获取CPU资源以执行着色器编译任务。本发明实施例中,渲染线程和/或编译子线程运行在主频频率较高的CPU内核,由此可以提高渲染线程和/或编译子线程的运行效率。可选的,渲染线程和编译子线程可以运行在不同的CPU内核。可选的,若渲染线程本身包括主线程和子线程,则渲染线程本身的主线程和子线程可以运行在同一CPU内核。
第二方面,本发明实施例提供的一种渲染方法,包括:渲染线程确定待渲染的第一图形窗口的渲染指令。渲染线程根据所述渲染指令,创建顶点着色器并加载顶点着色器源码。在编译子线程接收到编译所述顶点着色器的任务信息之后,所述编译子线程对所述顶点着色器进行编译。在所述编译子线程编译所述顶点着色器时,所述渲染线程创建片段着色器。所述渲染线程基于顶点着色器和片段着色器,对所述第一图形窗口进行渲染处理。
第三方面,本发明实施例提供了一种电子设备,包括:所述电子设备包括用于存储程序指令的存储器和用于执行所述程序指令的处理器,其中,当所述程序指令被所述处理器执行时,触发所述电子设备执行如上述第一方面或者第二方面任一项所述的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当其在电子设备上运行时,使得电子设备执行如上述第一方面或者第二方面任一项所述的方法。
应当理解的是,本发明实施例第二至四方面与本申请的第一方面的技术方案一致,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
附图说明
图1为一种电子设备的界面示意图;
图2为本发明实施例提供的一种渲染流程示意图;
图3为本发明实施例提供的一种图像处理方法的流程图;
图4为本发明实施例提供的一种图像处理方法的流程图;
图5为本发明实施例提供的又一种图像处理方法的流程图;
图6为本发明实施例提供的另一种图像处理方法的流程图;
图7为本发明实施例提供的又一种图像处理方法的流程图;
图8为本发明实施例提供的再一种图像处理方法的流程图;
图9为本发明实施例提供的一种渲染线程的运行效果示意图;
图10为本发明实施例提供的一种电子设备的分层结构示意图;
图11为本发明实施例提供的一种进入第一应用主界面的示意图;
图12为本发明实施例提供的一种第一应用的第二界面的示意图;
图13为本发明实施例提供的一种负一屏的界面示意图;
图14为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
本申请的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
开放图形库(Open Graphics Library,简称OpenGL)是一种跨编程语言、跨平台的编程图形程序接口。OpenGL将电子设备的图形资源抽象成OpenGL对象,将对电子设备图形资源的操作抽象成OpenGL指令。
嵌入式开放图形库(OpenGL for Embedded Systems,简称OpenGL ES)是为嵌入式设备设计的。OpenGL ES去除了OpenGL的许多不必要和性能交底的API,是OpenGL的三维图形API的子集。
图形处理器(Graphic Processing Unit,简称GPU),是专门处理与图形计算相关的硬件单元。CPU可以采用两种不同的API与GPU交互:Vulkan和OpenGL ES。其中,由于Vulkan仅适用于运行安卓7.0或者更高版本的电子设备,而所有安卓设备都支持OpenGLES。因此,在本发明实施例中,CPU基于OpenGL ES接口与GPU交互。
着色器(Shader)是用来实现图像渲染的程序。着色器可以包括顶点着色器(Vertex Shader)、片段着色器(Fragment Shader)、曲面细分着色器(TesselationShader)或者几何着色器(Geometry Shader)等。着色器在GPU侧运行并执行图像渲染。着色器在GPU侧运行之前,需要编译为GPU可识别的语言-二进制程序(Program)才能在GPU运行。
参见图1,为一种电子设备的界面示意图。如图1所示,电子设备显示的一帧界面图像通常包含一个或者多个图形元素。本发明实施例将界面图像上显示的图形元素称为图形窗口。如图1展示的界面包含图形窗口1、图形窗口2和图形窗口3。
电子设备绘制界面图像时,上述图形窗口被抽象为渲染节点(RenderNode),对图形窗口的绘制被抽象为绘制操作(DrawOp)。每个DrawOp均封装有渲染指令和执行渲染指令所需的绘制数据。一帧界面图像的各个图形窗口的DrawOp构成DrawOp树。例如,对于图1所示的界面图像,图形窗口1、图形窗口2和图形窗口3分别被抽象为渲染节点1、渲染节点2和渲染节点3。渲染节点1、渲染节点2和渲染节点3的绘制分别被抽象为DrawOp1、DrawOp2和DrawOp3。DrawOp1、DrawOp2和DrawOp3封装有绘制图形窗口1、图形窗口2和图形窗口3的渲染指令和绘制数据。
为了提高渲染效率,电子设备将渲染指令和绘制数据传递给图形处理器(GraphicProcessing Unit,简称GPU),由GPU执行图形窗口的渲染。GPU是专门处理与图形计算相关的硬件单元,通过GPU执行图形渲染可以加速图形渲染效率。其中,为了使GPU准确执行图形渲染,电子设备在将渲染指令和绘制数据传递给GPU之前,需要将绘制命令和相关数据编译为GPU可识别的语言。可选的,由于本发明实施例中电子设备的CPU侧是通过OpenGL ES接口与GPU交互的。因此,本发明实施例中,将绘制命令和绘制数据转换为符合OpenGL ES规范的指令和数据后,再传递给GPU。
Shader(着色器)和Program(程序)是OpenGL ES的两个重要的概念。在OpenGL ES环境中,绘制一个图形窗口至少需要创建一个顶点着色器(Vertex Shader)对象、一个片段着色器(Fragment Shader)和一个Program对象。具体的,绘制一个图形窗口所需的着色器类型和数据可以通过DrawOp封装的渲染指令确定。例如,图形窗口1被抽象为渲染节点1。渲染节点1的绘制被抽象为DrawOp1。根据DrawOp1封装的绘制指令可以确定绘制图形窗口1所需的着色器资源。可选的,用于绘制图形窗口1所需的着色器资源被转换为符合OpenGL ES的着色器程序,并传递给GPU。可选的,电子设备可以预先存储绘制各图形窗口的着色器程序。例如,绘制图形窗口1所需的着色器资源包括一个顶点着色器对象、一个片段着色器对象、一个几何着色器对象以及一个程序对象。CPU侧获取到图形窗口1的渲染指令后,确定是否已经存储用于绘制图形窗口1且可以在GPU侧执行的着色器程序。如果电子设备已经存储有绘制图形窗口1的可在GPU侧执行的着色器程序,则CPU将绘制指令和着色器程序传递给GPU。如果电子设备未存储有绘制图形窗口1的着色器程序,则CPU根据绘制指令进行着色器编译,以得到可在GPU侧运行的着色器程序。例如,根据绘制指令确定绘制图形窗口1所需的着色器资源包括一个顶点着色器对象、一个片段着色器对象、一个几何着色器对象以及一个程序对象。则CPU侧根据渲染指令进行着色器编译包括:创建一个顶点着色器对象、一个片段着色器对象、一个几何着色器对象以及一个程序对象,并将顶点着色器对象、片段着色器对象、几何着色器对象链接至程序对象得到图形窗口1的着色器程序。该着色器程序即可以在GPU侧运行。GPU运行该着色器程序即可执行图形窗口1的渲染。可选的,电子设备可以存储图形窗口1的着色器程序。当电子设备需要再次绘制图像窗口1时,则可以直接调用该着色器程序,无需再执行着色器编译。
参见图2,为本发明实施例提供的一种渲染流程示意图。如图2所示,本发明实施例将CPU侧用于执行界面绘制的线程分为UI线程和渲染线程。其中,UI线程可以拦截第一应用触发的应用渲染指令。可选地,第一应用是安装在电子设备的普通应用。例如,第一应用可以是电子设备安装的第三方应用。例如,第一应用可以是电子设备出厂时配置的系统应用。可选的,第一应用启动时,可以触发对第一应用主界面的渲染指令。可选的,第一应用运行时,显示第一界面。当第一应用的第一界面有更新时,第一应用可以触发对第一界面进行更新的渲染指令。可选的,当第一应用从第一界面切换至第二界面时,第一应用可以触发对第二界面的渲染指令。UI线程获取到第一应用触发的应用渲染指令后,确定第一应用的待渲染界面,并识别待渲染界面的图形窗口。之后,UI线程构建关于图形窗口的DrawOp树。在一个示例中,第一应用的待渲染界面如图1所示。UI线程拦截到第一应用的渲染指令后,识别图1所示界面的图形窗口1、图形窗口2和图形窗口3。UI线程构建关于图形窗口1、图形窗口2和图形窗口3的绘制操作DrawOp1、DrawOp2和DrawOp3,DrawOp1、DrawOp2和DrawOp3组成关于待渲染界面的DrawOp树。在DrawOp树中,DrawOp1、DrawOp2和DrawOp3分别封装有用于绘制图形窗口1、图形窗口2和图形窗口3的渲染指令。
UI线程创建DrawOp树后,将封装有渲染指令的DrawOp树传递给渲染线程。渲染线程用于将DrawOp树封装的渲染指令转换为GPU可识别的指令。在本发明实施例中,渲染线程将DrawOp树封装的渲染指令转换为符合OpenGL ES规范的指令,并通过OpenGL ES接口传递给GPU。GPU用于基于渲染指令执行图形窗口的渲染。
其中,渲染线程将渲染指令转换为符合OpenGL ES规范的指令包括:获取可在GPU侧执行的且能够进行图形窗口渲染的着色器程序。如果电子设备已经存储有相应图形窗口的着色器程序,则渲染线程可调用已经存储的着色器程序,并传递给GPU进行图形窗口的渲染。如果电子设备未存储相应图形窗口的着色器程序,则渲染线程需要根据渲染指令编译着色器以得到着色器程序,之后将着色器程序传递给GPU。例如,电子设备预先存储有渲染图形窗口2、3的着色器程序。则渲染线程从DrawOp2、DrawOp3获取到图形窗口2、3的渲染指令后,直接调取与图形窗口2、3对应的着色器程序并传递给GPU执行,GPU通过运行该着色器程序实现图形窗口2、3的渲染。又例如,电子设备未存储用于渲染图形窗口1的着色器程序。则渲染线程从DrawOp1获取到图形窗口1的渲染指令后,根据渲染指令编译用于绘制图形窗口1的着色器。编译完成之后,渲染线程将图形窗口1的着色器程序传递给GPU。GPU通过执行着色器程序实现图形窗口1的渲染绘制。如图2所示,GPU对图形窗口1-3绘制完成后将图形窗口1-3进行图层合成,合成的图像帧在显示屏处进行界面显示。
下述实施例将对渲染线程进行着色器编译的具体过程进行说明。可选的,下述以编译用于渲染图形窗口1的着色器为例进行说明。对于待渲染界面的其它图形窗口,其编译生成着色器程序的过程可以参见图形窗口1的着色器编译过程,不再赘述。
参见图3,为本发明实施例提供的一种图像处理方法的流程图。如图3所示,渲染线程获取用于渲染图形窗口1的渲染指令。渲染线程根据渲染指令可以确定渲染图形窗口1所需的着色器资源。可选的,绘制图形窗口1所需的着色器资源需要编译为可在GPU执行的着色器程序。如果电子设备已经存储有绘制图形窗口1的着色器程序,则电子设备可以直接调用该着色器程序。如果电子设备未存储绘制图形窗口1的着色器程序,则渲染线程需要编译生成用于绘制图像窗口1的着色器程序。如图3所示,渲染线程编译图形窗口1的着色器程序的步骤包括:
101,渲染线程创建着色器程序Program,此处创建的着色器程序为空程序。
102,渲染线程创建着色器对象。渲染线程根据渲染指令确定绘制图形窗口1所需的着色器。例如,绘制图形窗口1所需的着色器包括一个顶点着色器、一个片段着色器、一个曲面细分着色器和一个几何着色器。则渲染线程依次创建顶点着色器对象、片段着色器对象、曲面细分着色器对象和几何着色器对象。
其中,每个着色器对象的创建均包括:创建着色器、加载着色器源码、编译着色器以及绑定Program与着色器。
如图3所示,创建顶点着色器对象,包括:创建顶点着色器、加载顶点着色器源码、编译顶点着色器和绑定Program与顶点着色器。顶点着色器对象创建完成后,创建片段着色器对象。
如图3所示,创建片段着色器对象,包括:创建片段着色器、加载片段着色器源码、编译片段着色器和绑定Program与片段着色器。片段着色器对象创建完成后,创建曲面细分着色器对象。
如图3所示,创建曲面细分着色器对象,包括:创建曲面细分着色器、加载曲面细分着色器源码、编译曲面细分着色器和绑定Program与曲面细分着色器。曲面细分着色器对象建完成后,创建几何着色器对象。
如图3所示,创建几何着色器对象,包括:创建几何着色器、加载几何着色器源码、编译几何着色器和绑定Program与几何着色器。
103,渲染线程将创建的各个着色器对象链接至Program,得到用于绘制图形窗口1的着色器程序。
在图3所示流程中,编译着色器会占用较多时间。图3所示方法中,渲染线程依次串行编译各个图形窗口,会增加编译耗时。如果一帧图像包含多个图形窗口,则渲染线程需要对每个图形窗口执行图3所示的编译过程,由此会进一步影响渲染线程的编译进度,甚至会造成编译卡顿。为了提高渲染线程对着色器的编译效率,本发明实施例提供了一种图像处理方法,该方法创建一个编译子线程,该编译子线程可以和渲染线程并行执行各个着色器的编译,且在编译子线程和渲染线程执行着色器编译时,渲染线程还可以同步执行编译着色器的其它步骤,由此可以提高着色器程序的编译效率。
参见图4,为本发明实施例提供的一种图像处理方法的流程图。该方法仍以编译图形窗口1的着色器为例进行说明。如图4所示,该方法包括:
201,渲染线程创建编译子线程,该编译子线程与渲染线程并行运行。可选的,渲染线程可以在启动时创建编译子线程。可选的,渲染线程也可以在接收到图形窗口1的渲染指令时创建编译子线程。可选的,渲染线程在接收到渲染指令时创建编译子线程包括:渲染线程根据渲染指令,确定待渲染的图形窗口1所需的着色器类型、着色器个数或者着色器源码的复杂度。渲染线程根据待渲染的图形窗口1所需的着色器类型、着色器个数或者着色器源码的复杂度,可以确定是否创建编译子线程。例如,如果渲染图形窗口1所需的着色器包含指定类型的着色器、或者所需着色器个数大于设定值或者着色器源码的复杂度大于设定值,则确定创建编译子线程。其中,着色器源码的复杂度可以根据源码文件大小、源码编写语言或者源码是否包含预设代码结构来确定。
202,渲染线程确定用于渲染图形窗口1的着色器程序未存储,需进行着色器编译。
203,渲染线程创建创建着色器程序Program,此时的着色器程序为空程序。
204,渲染线程创建着色器对象。其中,渲染线程根据渲染指令确定编译图形窗口1所需的着色器包括顶点着色器和片段着色器,则渲染线程创建顶点着色器和片段着色器包括:2041,创建顶点着色器。2042,加载顶点着色器源码。2043,渲染线程向编译子线程发送编译顶点着色器的任务信息,以由编译子线程对顶点着色器进行编译。在编译子线程对顶点着色器进行编译时,渲染线程继续执行步骤2044。2044,渲染线程创建片段着色器。2045,渲染线程加载片段着色器源码。渲染线程加载片段着色器源码后,渲染线程编译片段着色器。其中,在渲染线程编译片段着色器时,渲染线程可以继续执行后续其它步骤。可选的,后续其它步骤例如包括:2046,渲染线程接收到编译子线程发送的顶点着色器编译结果。2047,渲染线程绑定Program与顶点着色器。2048,渲染线程完成片段着色器的编译后,渲染线程得到片段着色器编译结果。2049,渲染线程绑定Program与片段着色器。
205,渲染线程分别将顶点着色器和片段着色器链接至Program。
在图4所示流程中,编译子线程与渲染线程并行运行。编译子线程接收到渲染线程发送的编译顶点着色器的任务之后,编译子线程编译顶点着色器。其中,在编译子线程编译顶点着色器时,渲染线程可以继续执行步骤2044-2045、编译片段着色器。可选的,在编译子线程编译顶点着色器时,若渲染线程首先完成对片段着色器的编译,则渲染线程也可以先执行步骤2048和2049。可选的,在图4所示方法中,渲染线程判断片段着色器为待创建的最后一个着色器,则渲染线程执行对片段着色器的编译。可选的,若渲染线程在编译片段着色器时,编译子线程还未完成对顶点着色器的编译,则渲染线程和编译子线程可以并行执行各自的着色器编译任务。
在图4所示实施例中,渲染线程也可以不向编译子线程发送编译顶点着色器的任务信息。可选的,渲染线程可以执行对顶点着色器的编译。如图5所示,在步骤2042加载顶点着色器源码之后,渲染线程编译顶点着色器。其中,在渲染线程编译顶点着色器时,渲染线程可以继续执行步骤2043,创建片段着色器。2044,渲染线程加载片段着色器源码。2045,渲染线程向编译子线程发送编译片段着色器的任务信息,以由编译子线程执行对片段着色器的编译。2046,渲染线程从编译子线程接收到片段着色器编译结果。2047,渲染线程渲染线程绑定Program与片段着色器。2048,渲染线程得到顶点着色器编译结果。2049,渲染线程绑定Program与顶点着色器。可选的,渲染线程得到顶点着色器编译结果和片段着色器编译结果的顺序可以根据实际情况确定。
在一些实施例中,渲染线程确定是否由编译子线程编译顶点着色器包括:渲染线程判断顶点着色器源码的复杂度是否大于第一设定值。若顶点着色器源码的复杂度大于第一设定值,则渲染线程向所述顶点着色器发送编译所述顶点着色器的任务信息,以由编译子线程执行对顶点着色器的编译。若顶点着色器源码的复杂度小于等于第一设定值,则由所述渲染线程编译所述顶点着色器。
在一些实施例中,渲染线程确定是否由编译子线程编译片段着色器可以包括:渲染线程根据自身当前是否存在正在执行的着色器编译任务和/或片段着色器源码的复杂度和/或片段着色器是否为待创建的最后一个着色器确定。可选的,若渲染线程对顶点着色器编译任务还未完成,则渲染线程可以将编译片段着色器的任务分配给编译子线程。可选的,若渲染线程当前不存在正在执行的着色器编译任务,则由渲染线程执行编译片段着色器的任务。可选的,若渲染线程确定片段着色器源码的复杂度大于第一设定值,则渲染线程将编译片段着色器的任务分配给编译子线程。可选的,若片段着色器源码的复杂度小于等于第一设定值,则由渲染线程执行编译片段着色器的任务。可选的,若片段着色器为待创建的最后一个着色器,则渲染线程执行对所述片段着色器的编译。若片段着色器不是待创建的最后一个着色器,则编译子线程执行对所述片段着色器的编译。
可选的,若渲染线程当前存在正在执行的着色器编译任务,可以不考虑片段着色器源码的复杂度,直接将编译片段着色器的任务分配给编译子线程。可选的,若渲染线程当前存在正在执行的着色器编译任务,则可以进一步结合片段着色器源码的复杂度确定是否将编译片段着色器的任务分配给编译子线程。可选的,若渲染线程当前存在正在执行的着色器编译任务,且片段着色器源码的复杂度大于第一设定值,则将编译片段着色器的任务分配给编译子线程。可选的,若渲染线程当前存在正在执行的着色器编译任务,且片段着色器源码的复杂度小于等于第一设定值,则由渲染线程执行编译片段着色器的任务。可选的,若渲染线程当前不存在正在执行的着色器编译任务,也可以进一步结合片段着色器源码的复杂度确定是否将编译片段着色器的任务分配给编译子线程,具体可以参考渲染线程存在正在执行的着色器编译任务的过程,此处不再赘述。可选的,着色器源码的复杂度可以根据源码文件大小、源码编写语言或者源码是否包含预设代码结构来确定。可选的,所述第一设定值可以为预设具体数值,也可以为预设条件。例如着色器源码文件的大小超过设定阈值时,则着色器源码的复杂度大于第一设定值。例如,着色器源码采用预设语言编写,或者包含预设代码结构时,则着色器源码的复杂度大于第一设定值。
可选的,在图4所示方法中,若顶点着色器的编译任务和片段着色器的编译任务均分配给编译子线程,则编译子线程可以并行编译顶点着色器和所述片段着色器。即编译子线程在编译顶点着色器时,接收到片段着色器的编译任务,则编译子线程可以在编译顶点着色器时同时编译片段着色器。
从图4和图5可以看出,在本发明实施例方法中,渲染线程和编译子线程并行运行。当渲染线程存在多个编译着色器的任务时,渲染线程和编译子线程可以分别执行至少一个编译任务。并且渲染线程和编译子线程在执行编译任务时,渲染线程还可以同步执行着色器编译的其它步骤,由此可以提高着色器的编译效率。
在图4和图5所示图像处理方法中,渲染线程除了创建编译子线程之外,渲染线程还可以创建链接子线程。如图5所示,链接子线程与渲染线程并行运行。可选的,渲染线程可以在启动后即创建链接子线程。可选的,链接子线程的创建方法可以参见编译子线程的创建方法,此处不再赘述。可选的,链接子线程用于将编译完成的着色器链接至步骤203创建的Program。具体的,在图4所示图像处理方法中,渲染线程执行步骤2047和2049之后得到顶点着色器和片段着色器。顶点着色器和片段着色器需要链接至步骤203创建的Program。可选的,渲染线程可以分别确定顶点着色器的程序链接任务和片段着色器的程序链接任务。渲染线程可以进一步对顶点着色器的程序链接任务和片段着色器的程序链接任务进行任务分配。如图5所示,渲染线程可以执行顶点着色器的程序链接任务,即执行步骤2051,将顶点着色器链接至Program。其中,渲染线程在执行步骤2051时,渲染线程可以继续执行步骤2052,渲染线程向链接子线程发送片段着色器的程序链接任务。链接子线程执行步骤2053,将片段着色器链接至Program。可选的,步骤2051和步骤2053可以同步执行。当然,渲染线程也可以将顶点着色器的程序链接任务分配给链接子线程。可选的,也可以由渲染线程执行片段着色器的程序链接任务。
参见图6,为本发明实施例提供的另一种图像处理方法的流程图。该方法仍以编译生成图形窗口1的着色器为例进行说明。如图6所示,该方法的处理步骤包括:
301,渲染线程启动。可选的,渲染线程启动时,可以配置渲染线程的优先级以及配置用于运行渲染线程的CPU内核。可选的,渲染线程的优先级可以配置为预设高优先级。例如,线程优先级预设为1-10级。一般线程的默认优先级为5级,渲染线程启动时,可以设置渲染线程的优先级高于默认级别或者高于预设指定级别,由此以使渲染线程的优先级可以高于UI线程启动的其它线程。或者,渲染线程也可以包含在UI线程设置的高优先级运行组内。可选的,UI线程可以设置高优先级运行组,也称为VIP运行组。VIP运行组内的各个线程的运行优先级高于非VIP运行组的线程。UI线程可以将渲染线程设置为VIP运行组内的线程,由此以使渲染线程的运行优先级高于非VIP运行组的线程。可选的,用于运行渲染线程的CPU内核的主频频率可以配置为高于第三设定值。可选的,该第三设定值例如为1.8GHz。可选的,可以配置渲染线程在CPU的大中核运行。例如,可以将主频频率高于1.8GHz的CPU内核确定为大中核。可选的,渲染线程可以在第一CPU内核运行,第一CPU内核的主频频率为2.4GHz。
302,渲染线程创建编译子线程,编译子线程与渲染线程并行运行。可选的,编译子线程在创建时,可以配置运行优先级以及运行编译子线程的CPU内核。编译子线程的优先级可以继承渲染线程的优先级。可选的,也可以单独为编译子线程配置优先级。可选的,编译子线程的优先级可以高于UI线程启动的其它线程。例如,线程优先级预设为1-10级。一般线程的默认优先级为5级,编译子线程启动时,可以设置编译子线程的优先级高于默认级别或者高于预设指定级别,由此以使编译子线程的优先级可以高于UI线程启动的其它线程。或者,编译子线程也可以包含在UI线程设置的高优先级运行组内。可选的,UI线程可以设置高优先级运行组,也称为VIP运行组。VIP运行组内的各个线程的运行优先级高于非VIP运行组的线程。UI线程可以将编译子线程设置为VIP运行组内的线程,由此以使编译子线程的运行优先级高于非VIP运行组的线程。可选的,用于运行编译子线程的CPU内核的主频频率可以配置为高于第四设定值。可选的,该第四设定值可以和第三设定值的取值相同,也可以不同。例如,编译子线程可以在CPU的大中核运行。例如,可以将主频频率高于1.8GHz的CPU内核确定为大中核。例如,编译子线程运行在第二CPU内核,第二CPU内核的主频频率为1.8GHz。即,本发明实施例中编译子线程和渲染线程可以运行在不同的CPU内核,由此提高编译子线程和渲染线程的运行效率,进而提高图像渲染效率。
303,渲染线程获取渲染图形窗口1的渲染指令后,渲染线程确定图形窗口1的着色器程序未存储,需编译用于绘制图形窗口1的着色器程序。
304,渲染线程创建着色器程序Program,此时的着色器程序为空程序。
305,渲染线程创建顶点着色器对象。包括:3051,创建顶点着色器。3052,加载顶点着色器源码。3053,确定由渲染线程编译顶点着色器。渲染线程执行编译顶点着色器的过程。可选的,渲染线程也可以将编译顶点着色器的任务分配给编译子线程,以由编译子线程执行编译顶点着色器的过程。可选的,在渲染线程或者编译子线程编译顶点着色器时,渲染线程可以继续执行步骤306。
306,渲染线程创建片段着色器对象。包括:3061,创建片段着色器。3062,加载片段着色器源码。3063,判断片段着色器源码的复杂度是否大于第一设定值。可选的,可以根据片段着色器源码文件的大小、源码编写语言或者源码是否包含预设代码结构来确定片段着色器源码的复杂度是否大于第一设定值。若是,则执行步骤3064;若否则执行步骤3065。3064,发送编译片段着色器的任务信息至编译子线程。3065,编译片段着色器。
可选的,渲染线程得到顶点着色器的编译结果之后,渲染线程可以执行步骤3054,绑定Program与顶点着色器。可选的,渲染线程若将编译片段着色器的任务发送给编译子线程,则渲染线程接收到片段着色器的编译结果后执行步骤3066。可选的,渲染线程若自己编译片段着色器,则渲染线程完成对片段着色器的编译后,渲染线程执行步骤3066。步骤3066,绑定Program与片段着色器。
需要说明的是,渲染线程在编译顶点着色器时可以继续执行步骤306。可选的,3054和3066的执行顺序可以根据渲染线程得到顶点着色器和片段着色器编译结果的时间顺序确定。可选的,渲染线程还可以在确定顶点着色器以及片段着色器的编译结果之后,再分别执行步骤3054和3066。
309,渲染线程执行步骤3054和3066之后,将顶点着色器和片段着色器链接至Program。
400,编译子线程接收到片段着色器的编译任务之后,执行着片段着色器编译任务。其中,编译子线程编译片段着色器时,渲染线程可以对顶点着色器的编译、3054和306的相关步骤。
参见图7,渲染线程或者编译子线程编译片段着色器时,渲染线程还可以继续执行步骤307和308。
307,渲染线程根据用于渲染第一图形窗口的渲染指令判断是否需要创建几何着色器。若需要,则执行创建几何着色器对象的步骤。若不需要,则执行步骤308。其中,创建几何着色器对象的步骤包括:3071,创建几何着色器。3072,加载几何着色器源码。3073,判断几何着色器源码的复杂度是否大于第一设定值。若是,则执行步骤3074;若否,则执行步骤3075。3074,发送编译几何着色器的任务信息至编译子线程,以由编译子线程编译几何着色器。3075,渲染线程编译几何着色器。可选的,在编译子线程编译几何着色器或者在渲染线程编译几何着色器时,渲染线程继续执行步骤308。
308,渲染线程根据渲染指令判断是否需要创建曲面细分着色器。若需要,则执行创建曲面细分着色器对象的步骤。若不需要,则执行步骤309。其中,创建曲面细分着色器对象的步骤包括:3081,创建曲面细分着色器。3082,加载曲面细分着色器源码。3083,判断曲面细分着色器源码的复杂度是否大于第一设定值。若是,则执行步骤3084;若否,则执行步骤3085。3084,发送编译曲面细分着色器的任务信息至编译子线程。3085,渲染线程编译曲面细分着色器。
可选的,渲染线程若将编译几何着色器的任务发送给编译子线程,则渲染线程接收到几何着色器的编译结果后执行步骤3076。可选的,若由渲染线程编译几何着色器,则渲染线程完成对几何着色器的编译后,渲染线程执行步骤3076。步骤3076,绑定Program与几何着色器。
可选的,渲染线程若将编译曲面细分着色器的任务发送给编译子线程,则渲染线程接收到曲面细分着色器的编译结果后执行步骤3086。可选的,若由渲染线程编译曲面细分着色器,则渲染线程完成对曲面细分着色器的编译后,渲染线程执行步骤3086。步骤3086,绑定Program与曲面细分着色器。
可选的,3076和3086的执行顺序可以根据渲染线程得到几何着色器和曲面细分着色器编译结果的时间顺序确定。可选的,渲染线程还可以在确定几何着色器以及曲面细分着色器均编译完成之后,再执行步骤3076和3086。
需要说明的是,渲染线程和编译子线程可以并行执行各自的着色器编译任务。例如,结合图6和图7,在渲染线程编译顶点着色器时,编译子线程可以执行对片段着色器、几何着色器和曲面细分着色器的编译。可选的,片段着色器、几何着色器和曲面细分着色器的编译在编译子线程处是并行执行的。
309,结合图6和图7,渲染线程执行步骤3054、3066、3076和3086之后,渲染线程将顶点着色器、片段着色器、几何着色器和曲面细分着色器链接至Program。
400,结合图6和图7,编译子线程接收到编译片段着色器、编译几何着色器和编译曲面细分着色器的任务之后,编译子线程分别编译片段着色器、编译几何着色器和编译曲面细分着色器。可选的,编译子线程可以并行执行对片段着色器、几何着色器和曲面细分着色器的编译。可选的,编译子线程对片段着色器、几何着色器和曲面细分着色器编译完成后,可以分别将编译结果发送给渲染线程。
参见图8,为本发明实施例提供的又一种图像处理方法的流程图。在图6和图7的基础上,渲染线程还创建有链接子线程。可选的,渲染线程启动时可以创建链接子线程。可选的,在创建链接子线程时,可以配置链接子线程的运行优先级以及运行程序链接线程的CPU内核。链接子线程的优先级可以继承渲染线程的优先级。可选的,也可以单独为链接子线程配置优先级。可选的,链接子线程的优先级可以高于UI线程启动的其它线程。例如,线程优先级预设为1-10级。一般线程的默认优先级为5级,链接子线程启动时,可以设置链接子线程的优先级高于默认级别,由此以使链接子线程的优先级可以高于UI线程启动的其它线程。或者,链接子线程也可以包含在UI线程设置的高优先级运行组内。可选的,UI线程可以设置高优先级运行组,也称为VIP运行组。VIP运行组内的各个线程的运行优先级高于非VIP运行组的线程。UI线程可以将链接子线程设置为VIP运行组内的线程,由此以使链接子线程的运行优先级高于非VIP运行组的线程。可选的,用于运行链接子线程的CPU内核的主频频率可以配置为高于第二设定值。可选的,该第二设定值可以和第三设定值、第四设定值的取值相同,也可以不同。例如,链接子线程可以在CPU的大中核运行。例如,可以将主频频率高于1.8GHz的CPU内核确定为大中核。例如,链接子线程运行在第三CPU内核,第三CPU内核的主频频率为1.8GHz。即,本发明实施例中链接子线程与编译子线程以及渲染线程可以分别运行在不同的CPU内核,由此提高链接子线程、编译子线程以及渲染线程的运行效率,进而提高图像渲染效率。
如图8所示,渲染线程在基于图6和图7所示方法得到顶点着色器编译结果、片段着色器编译结果、几何着色器编译结果和曲面细分着色器编译结果之后,渲染线程还分别确定顶点着色器的程序链接任务、片段着色器的程序链接任务、几何着色器的程序链接任务、曲面细分着色器的程序链接任务。之后,渲染线程分配程序链接任务。例如,渲染线程将顶点着色器的程序链接任务、几何着色器的程序链接任务、曲面细分着色器的程序链接任务分配给链接子线程,将片段着色器的程序链接任务分配给渲染线程。则链接子线程分别将顶点着色器、几何着色器和曲面细分着色器链接至Program。可选的,链接子线程可以并行执行分配到的程序链接任务。渲染线程将片段着色器链接至Program。可选的,顶点着色器、片段着色器、几何着色器、曲面细分着色器的程序链接任务可以在相同或者大致相同的时间执行。渲染线程得到各着色器的链接结果之后,得到关于第一图形窗口的着色器程序。
参见图9,为本发明实施例提供的一种渲染线程的运行效果示意图。通过图9可以看出,在渲染线程运行时,编译子线程也处于运行状态。可选的,在渲染线程运行时,渲染线程可以创建着色器对象,例如创建顶点着色器、片段着色器、几何着色器和曲面细分着色器。图9中所示的“创建”表示创建着色器的函数,“加载”表示加载着色器源码的函数,“编译”表示编译着色器的函数,“绑定”表示绑定着色器至Program的函数,“任务”指发送编译着色器任务信息的函数。以顶点着色器为例,渲染线程通过调用创建着色器、加载着色器源码、编译着色器和绑定着色器至Program的函数来创建顶点着色器对象。以片段着色器为例,渲染线程通过调用创建着色器、加载着色器源码、发送编译着色器的任务信息和绑定着色器至Program的函数来创建片段着色器对象。其中,渲染线程通过发送编译着色器任务信息的函数可以将编译片段着色器的任务信息发送给编译子线程。编译子线程在运行时可以执行着色器编译任务。可选的,若渲染线程通过发送编译着色器任务信息的函数将编译片段着色器、编译几何着色器和编译曲面细分着色器的任务均发送给编译子线程,则编译子线程可以并行执行各个编译任务。
本发明实施例方法中,渲染线程和编译子线程可以并行编译着色器。可选的渲染线程和链接子线程可以并行执行将着色器链接至progam的任务。本发明实施例方法中,通过并行执行编译着色器的任务、并行执行着色器链接至progam的任务,由此可以提高着色器的编译效率。本发明实施例方法中,渲染线程、编译子线程和/或链接子线程设置为较高优先级,并且结合了多核协同技术,使渲染线程、编译子线程和/或链接子线程运行在CPU的主频频率较高的频点上,由此以进一步优化着色器程序的编译过程,降低着色器程序的编译耗时。
参见图10,为本发明实施例提供的一种电子设备的分层结构示意图。如图10所示,电子设备包括:应用程序层、java框架层、native框架层、硬件抽象层、内核层和硬件层。
如图10所示,应用程序层可以包括一系列应用程序包,如第一应用、第二应用、第三应用等。
java框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。java框架层包括一些预先定义的函数。如图10所示,java框架层可以包括窗口管理模块,窗口管理模块可以用于管理窗口程序,获取显示界面大小等。窗口管理模块设置有指令拦截模块,可以用于拦截应用程序触发的应用渲染指令。
native框架层是相对于java框架层的底层。在界面图像的渲染场景中,native框架层用于运行UI线程、渲染线程、合成线程以及本发明实施例所涉及的编译子线程和链接子线程。其中,native框架层还可以维护三维图形处理库(例如:OpenGL ES)。渲染线程基于OpenGL ES可以与GPU交互。
硬件抽象层(Hardware Abstraction Layer,HAL)是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。如图10所示,硬件抽象层部署有合成显示模块。合成显示模块用于将合成线程输出的图像帧存入内核层的帧缓冲区。
内核层是硬件和软件之间的层。内核层至少包含帧缓冲区、GPU驱动等。可选的,帧缓冲区用于存储合成线程输出的图像帧。GPU驱动用于支持渲染线程与GPU的交互。
硬件层包括显示设备、CPU和GPU等。其中,所述显示设备例如可以包括显示屏等。显示设备用于显示帧缓冲区中的图像帧。GPU通过GPU驱动与渲染线程交互。
参见图11,为本发明实施例提供的一种进入第一应用主界面的示意图。其中,第一应用是电子设备中的普通应用,如社交应用、购物应用、游戏应用等。结合图10和图11,电子设备检测到作用于第一应用的图标的动作后,第一应用触发绘制第一应用主界面的渲染指令。则电子设备渲染第一应用的主界面的流程包括:
500,指令拦截模块拦截第一应用触发的应用渲染指令,并将应用渲染指令传递给UI线程。
501,UI线程接收到第一应用的应用渲染指令后,确定第一应用待渲染的主界面的图形窗口,并构建DrawOp树。如图11所示,第一应用的主界面包含图形窗口1-5,则UI线程构建关于图形窗口1-5的DrawOp,图形窗口1-5的DrawOp组成DrawOp树。可选的,图形窗口1-5的DrawOp分别封装有用于渲染图形窗口1-5的渲染指令,该渲染指令根据500的应用渲染指令确定。
502,UI线程将创建的DrawOp树传递给渲染线程。可选的,渲染线程创建有并行运行的编译子线程和链接子线程。
503,渲染线程基于上述DrawOp树,执行渲染指令的转换。可选的,渲染线程用于将DrawOp树封装的渲染指令转换为符合OpenGL ES规范的指令。可选的,渲染线程在执行渲染指令的转换时,包括确定用于渲染图形窗口1-5的着色器程序。如果电子设备存储有用于渲染图形窗口1-5的着色器程序,则渲染线程执行步骤504。如果电子设备未存储有用于渲染图形窗口1-5的着色器程序,则渲染线程分别编译图形窗口1-5的着色器程序,之后执行步骤504。可选的,如果电子设备存储有用于渲染图形窗口1-2的着色器程序,未存储用于渲染图像窗口3-5的着色器程序,则渲染线程分别编译图形窗口3-5的着色器程序之后,执行步骤504。可选的,渲染线程编译任一图形窗口的着色器程序包括:创建着色器、加载着色器源码、编译着色器以及绑定Program与着色器。可选的,创建着色器、加载着色器源码的步骤由渲染线程执行。编译着色器的步骤由编译子线程执行。具体的,5031,渲染线程将着色器编译任务发送给编译子线程,由编译子线程执行着色器编译任务。5032,编译子线程将着色器源码编译结果返回给渲染线程。可选的,如果渲染线程发送给编译子线程多个着色器编译任务,则编译子线程可以并行执行该多个着色器编译任务。可选的,如果编译着色器的任务为多个,渲染线程可以执行至少一个编译着色器的任务,且将剩余编译着色器的任务分配给编译子线程。渲染线程得到各个着色器的编译结果后,绑定Program与着色器。渲染线程将着色器与Program绑定后,得到着色器的程序链接任务。可选的,渲染线程进一步执行步骤5033,渲染线程将着色器的程序链接任务分配给链接子线程。链接子线程将着色器链接至Program后执行步骤5034,向渲染线程反馈已将着色器链接至Program的程序链接结果。可选的,如果渲染线程发送给链接子线程多个着色器的程序链接任务,则链接子线程可以并行执行该多个程序链接任务。可选的,如果程序链接任务的个数为多个,渲染线程可以执行至少一个着色器的程序链接任务,且将剩余着色器的程序链接任务分配给链接子线程。可选的,渲染线程确定各个着色器均链接至Program后,确定得到图形窗口的着色器程序。
504,渲染线程将转换后的渲染指令通过OpenGL ES接口传递给GPU,以通过GPU执行图形窗口1-5的渲染,并获取渲染结果。
505,渲染线程获取GPU对图形窗口1-5的渲染结果。或者,渲染线程获取GPU完成对图形窗口1-5渲染的通知信息。渲染线程将图形窗口1-5的渲染结果或者GPU完成对图形窗口1-5渲染的通知信息传递给合成线程。
506,合成线程执行图层合成,得到图像帧。
507,合成线程通过合成显示模块将图像帧缓存在帧缓冲区。
508,显示设备对帧缓冲区中的图像帧进行显示。
在图11所示实施例中,如果第一应用在电子设备安装后首次打开,则电子设备在首次渲染第一应用主界面时,对第一应用主界面的各图形窗口均进行着色器程序的编译。之后,电子设备再次打开第一应用进入第一应用的主界面时,可以直接调取第一应用主界面的各图形窗口的着色器程序。
参见图12,为本发明实施例提供的一种第一应用的第二界面的示意图。如图11所示,第一应用的主界面包含导航栏,导航栏包含三个图形窗口5。响应于用户通过第一应用主界面的导航栏切换至第二界面的操作,电子设备对第一应用的第二界面进行渲染。其中,对第一应用的第二界面进行渲染包括对第二界面的图形窗口5-9的渲染。如果电子设备是首次从进入第一应用的第二界面,则电子设备对第二界面的图形窗口6-9的渲染包括编译用于绘制图形窗口6-9的着色器程序。着色器程序的具体编译过程可以参见上述实施例的说明,此处不再赘述。其中,图形窗口5在主界面渲染时已经存储有着色器程序,则在渲染第二界面时可以直接调用图形窗口5的着色器程序。
参见图13,为本发明实施例提供的一种负一屏的界面示意图。可选的,电子设备当前显示home主界面。电子设备检测到作用于home主界面的右滑动作时,对电子设备的负一屏界面进行渲染。可选的,负一屏界面可以作为用户感兴趣功能的快捷入口。负一屏界面根据用户的设置或者系统推送可以显示用户感兴趣的音乐、视频、新闻、天气等应用的入口。负一屏界面包含的图形窗口可以根据用户对负一屏的设置或者系统推送的内容发生改变。因此,当电子设备检测到进入负一屏界面的操作时,可以参照图11所示实施例执行对负一屏界面的图形窗口ABCDE的渲染。电子设备在对负一屏界面的图形窗口ABCDE进行渲染时,如果电子设备未存储图形窗口A、B、C、D或者E的着色器程序,则对未存储的着色器程序进行编译。着色器程序的具体编译过程可以参见上述实施例的说明,此处不再赘述。
参见图14,为本发明实施例提供的一种电子设备的结构示意图。如图14所示,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器、陀螺仪传感器、气压传感器、磁传感器、加速度传感器、距离传感器、接近光传感器、指纹传感器、温度传感器、触摸传感器、环境光传感器或者骨传导传感器等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
在一些实施例中,内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备100的各种功能应用以及数据处理。在本发明实施例中,处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令可以实现本发明实施例的着色器程序的编译方法。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行上述着色器程序的编译方法。
本发明实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机或任一至少一种处理器上运行时,使得计算机执行上述着色器程序的编译方法的各个步骤。
本发明实施例还提供一种芯片,包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,以执行上述着色器程序的编译方法的相应操作和/或流程。
可选地,该芯片还包括存储器,该存储器与该处理器通过电路或电线与存储器连接,处理器用于读取并执行该存储器中的计算机程序。进一步可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理。该通信接口可以是输入输出接口。
存储器可以是只读存储器(read-only memory,ROM)、可存储静态信息和指令的其它类型的静态存储设备、随机存取存储器(random access memory,RAM)或可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质等。
本申请实施例提供的电子设备、计算机存储介质或计算机程序产品均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示单独存在A、同时存在A和B、单独存在B的情况。其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。
本领域普通技术人员可以意识到,本文中公开的实施例中描述的各单元及算法步骤,能够以电子硬件、计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,任一功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。本申请的保护范围应以所述权利要求的保护范围为准。

Claims (11)

1.一种图像处理方法,其特征在于,包括:
渲染线程创建顶点着色器并加载顶点着色器源码;
在编译子线程接收到编译所述顶点着色器的任务信息之后,所述编译子线程对所述顶点着色器进行编译;
在所述编译子线程编译所述顶点着色器时,所述渲染线程创建片段着色器;
所述渲染线程基于顶点着色器和片段着色器,对待渲染图像进行渲染处理。
2.根据权利要求1所述的方法,其特征在于,所述渲染线程创建顶点着色器并加载顶点着色器源码之后,所述方法还包括:
所述渲染线程判断所述顶点着色器源码的复杂度是否大于第一设定值;
若所述顶点着色器源码的复杂度大于第一设定值,则所述渲染线程向所述顶点着色器发送编译所述顶点着色器的任务信息。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若所述顶点着色器源码的复杂度小于等于所述第一设定值,则由所述渲染线程编译所述顶点着色器。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述渲染线程编译所述顶点着色器时,所述渲染线程创建所述片段着色器。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述渲染线程创建片段着色器之后,所述方法还包括:
所述渲染线程加载片段着色器源码;
若所述片段着色器为待创建的最后一个着色器,则所述渲染线程执行对所述片段着色器的编译;
若所述片段着色器不是待创建的最后一个着色器,则所述编译子线程执行对所述片段着色器的编译。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述渲染线程创建片段着色器之后,所述方法还包括:
所述渲染线程加载片段着色器源码;
若所述片段着色器源码的复杂度大于第一设定值,则所述编译子线程执行对所述片段着色器的编译;
若所述片段着色器源码的复杂度小于等于所述第一设定值,则所述渲染线程执行对所述片段着色器的编译。
7.根据权利要求5或6所述的方法,其特征在于,所述方法还包括:
所述渲染线程获取所述顶点着色器的编译结果和所述片段着色器的编译结果之后,所述渲染线程将所述顶点着色器链接至着色器程序,链接子线程将所述片段着色器链接至着色器程序;或者,
所述链接子线程将所述顶点着色器链接至着色器程序,所述渲染线程将所述片段着色器链接至着色器程序。
8.根据权利要求7所述的方法,其特征在于,所述链接子线程的运行优先级高于用户界面UI线程触发的其它线程,所述链接子线程运行在主频频率高于第二设定值的CPU内核。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述渲染线程和/或所述编译子线程的运行优先级高于UI线程触发的其它线程;所述渲染线程和/或所述编译子线程运行在主频频率高于第三设定值的CPU内核。
10.一种电子设备,其特征在于,包括:所述电子设备包括用于存储程序指令的存储器和用于执行所述程序指令的处理器,其中,当所述程序指令被所述处理器执行时,触发所述电子设备执行如上述权利要求1-9任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当其在电子设备上运行时,使得电子设备执行如上述权利要求1-9任一项所述的方法。
CN202211367310.8A 2022-11-02 2022-11-02 图像处理方法和设备 Active CN116703690B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211367310.8A CN116703690B (zh) 2022-11-02 2022-11-02 图像处理方法和设备
CN202410552092.8A CN118446879A (zh) 2022-11-02 2022-11-02 图像处理方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211367310.8A CN116703690B (zh) 2022-11-02 2022-11-02 图像处理方法和设备

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202410552092.8A Division CN118446879A (zh) 2022-11-02 2022-11-02 图像处理方法和设备

Publications (2)

Publication Number Publication Date
CN116703690A true CN116703690A (zh) 2023-09-05
CN116703690B CN116703690B (zh) 2024-05-14

Family

ID=87832739

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202410552092.8A Pending CN118446879A (zh) 2022-11-02 2022-11-02 图像处理方法和设备
CN202211367310.8A Active CN116703690B (zh) 2022-11-02 2022-11-02 图像处理方法和设备

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202410552092.8A Pending CN118446879A (zh) 2022-11-02 2022-11-02 图像处理方法和设备

Country Status (1)

Country Link
CN (2) CN118446879A (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102169596A (zh) * 2011-03-09 2011-08-31 深圳市酷开网络科技有限公司 一种在嵌入式设备上实现3d渲染的方法及装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
US20180286115A1 (en) * 2017-04-01 2018-10-04 Intel Corporation Conditional shader for graphics
US20180286005A1 (en) * 2017-04-01 2018-10-04 Intel Corporation Thread scheduling over compute blocks for power optimization
CN108734634A (zh) * 2017-04-17 2018-11-02 英特尔公司 用于图形的顺序独立异步计算和流传送
CN109064538A (zh) * 2018-08-01 2018-12-21 Oppo广东移动通信有限公司 视图渲染方法、装置、存储介质及智能终端
US20190384613A1 (en) * 2018-06-18 2019-12-19 Arm Limited Data processing systems
CN111163345A (zh) * 2018-11-07 2020-05-15 杭州海康威视系统技术有限公司 一种图像渲染方法及装置
CN112801849A (zh) * 2019-11-14 2021-05-14 英特尔公司 用于调度线程顺序以改进高速缓存效率的方法和设备
CN115115719A (zh) * 2021-03-19 2022-09-27 英特尔公司 用于图形处理的可变宽度交织编码
CN115205093A (zh) * 2021-04-05 2022-10-18 辉达公司 具有解耦的着色和重用的时空重采样

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102169596A (zh) * 2011-03-09 2011-08-31 深圳市酷开网络科技有限公司 一种在嵌入式设备上实现3d渲染的方法及装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
US20180286115A1 (en) * 2017-04-01 2018-10-04 Intel Corporation Conditional shader for graphics
US20180286005A1 (en) * 2017-04-01 2018-10-04 Intel Corporation Thread scheduling over compute blocks for power optimization
CN108734634A (zh) * 2017-04-17 2018-11-02 英特尔公司 用于图形的顺序独立异步计算和流传送
US20190384613A1 (en) * 2018-06-18 2019-12-19 Arm Limited Data processing systems
CN109064538A (zh) * 2018-08-01 2018-12-21 Oppo广东移动通信有限公司 视图渲染方法、装置、存储介质及智能终端
CN111163345A (zh) * 2018-11-07 2020-05-15 杭州海康威视系统技术有限公司 一种图像渲染方法及装置
CN112801849A (zh) * 2019-11-14 2021-05-14 英特尔公司 用于调度线程顺序以改进高速缓存效率的方法和设备
CN115115719A (zh) * 2021-03-19 2022-09-27 英特尔公司 用于图形处理的可变宽度交织编码
CN115205093A (zh) * 2021-04-05 2022-10-18 辉达公司 具有解耦的着色和重用的时空重采样

Also Published As

Publication number Publication date
CN118446879A (zh) 2024-08-06
CN116703690B (zh) 2024-05-14

Similar Documents

Publication Publication Date Title
US11237876B2 (en) Data parallel computing on multiple processors
US9858122B2 (en) Data parallel computing on multiple processors
US11544075B2 (en) Parallel runtime execution on multiple processors
US9766938B2 (en) Application interface on multiple processors
US11710266B2 (en) Rendering method and apparatus
US8108633B2 (en) Shared stream memory on multiple processors
EP3137985B1 (en) Method and system to create a rendering pipeline
CN114663272B (zh) 一种图像处理方法及电子设备
CN112241932A (zh) 一种图片处理方法及装置
CN117667277A (zh) 一种用户界面显示方法及相关装置
CN116703690B (zh) 图像处理方法和设备
KR20100110710A (ko) 동적 라이브러리를 갖는 인터페이스를 간단히 하는 방법, 시스템 및 컴퓨터 프로그램 제품
CN114090010A (zh) X11系统的移植方法、装置、电子设备及可读存储介质
US11836506B2 (en) Parallel runtime execution on multiple processors
AU2018226440B2 (en) Data parallel computing on multiple processors
CN116167906A (zh) 一种图像处理方法及电子设备
AU2014204556B2 (en) Parallel runtime execution on multiple processors

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