CN113515396B - 图形渲染方法、装置、电子设备与存储介质 - Google Patents

图形渲染方法、装置、电子设备与存储介质 Download PDF

Info

Publication number
CN113515396B
CN113515396B CN202110777324.6A CN202110777324A CN113515396B CN 113515396 B CN113515396 B CN 113515396B CN 202110777324 A CN202110777324 A CN 202110777324A CN 113515396 B CN113515396 B CN 113515396B
Authority
CN
China
Prior art keywords
rendering
instruction
graphics
data
pipeline
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110777324.6A
Other languages
English (en)
Other versions
CN113515396A (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.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology 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 Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202110777324.6A priority Critical patent/CN113515396B/zh
Publication of CN113515396A publication Critical patent/CN113515396A/zh
Priority to PCT/CN2022/101315 priority patent/WO2023279993A1/zh
Application granted granted Critical
Publication of CN113515396B publication Critical patent/CN113515396B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

本发明提供一种图形渲染方法、装置、电子设备与存储介质,方法包括:构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。

Description

图形渲染方法、装置、电子设备与存储介质
技术领域
本发明涉及图形处理技术领域,尤其涉及一种图形渲染方法、装置、电子设备与存储介质。
背景技术
作为流行的移动操作系统,硬件平台通常为安卓(Android)操作系统提供驱动程序,如与图形渲染有关的驱动支持安卓操作系统中的图形渲染接口EGL/GLES。
在实际应用中,在这些硬件平台上可能会运行Linux操作系统。在Linux操作系统上进行图形渲染时会调用图形渲染接口OpenGL。由于Linux操作系统的图形渲染接口OpenGL与安卓操作系统中的图形渲染接口EGL/GLES并不兼容,因此通过图形渲染接口OpenGL发出的渲染指令与渲染数据需要传递到图形渲染接口EGL/GLES,并将OpenGL格式的渲染指令转换为图形渲染接口EGL/GLES所能理解的渲染指令,最终实现图像渲染。
在相关技术中,在传递渲染指令与渲染数据时,需要进行较为频繁地跨设备、跨容器的传递,导致CPU跨进程调度切换较为频繁,消耗了大量CPU资源。
发明内容
本发明提供一种图形渲染方法、装置、电子设备与存储介质。
本发明提供一种图形渲染方法,包括:
构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
根据本发明提供的一种图形渲染方法,所述构建渲染管线包括:
构建不依赖于特定操作系统库与特定软件版本的渲染管线;将所述渲染管线唯一地映射到图形处理器中的一个物理渲染管线;
为所述渲染管线创建多个虚拟管线,所述虚拟管线用于绑定不同场景下的上下文状态信息。
根据本发明提供的一种图形渲染方法,所述构建不依赖于特定操作系统库与特定软件版本的渲染管线,包括:
构建不依赖于特定操作系统库与特定软件版本的多个渲染管线。
根据本发明提供的一种图形渲染方法,所述渲染指令队列中的内存块为共享内存块;
相应的,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
所述渲染管线将所述第一渲染指令与所述第一渲染数据写入所述渲染指令队列的第一内存块;
将所述第一内存块的地址传递给所述EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程根据所述第一内存块的地址读取所述第一渲染指令与所述第一渲染数据。
根据本发明提供的一种图形渲染方法,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
通过桶机制将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线异步传输到EGL/GLES的渲染进程。
根据本发明提供的一种图形渲染方法,所述根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件平台的EGL/GLES图形驱动生成图像帧,包括:
调用硬件平台的EGL/GLES图形驱动,将所述第一渲染指令转换为第二渲染指令;所述第二渲染指令为EGL/GLES格式的渲染指令;
根据所述第二渲染指令、第一渲染数据以及第一渲染上下文状态信息生成图像帧。
根据本发明提供的一种图形渲染方法,在所述构建渲染管线之前,方法还包括:
加载基于OpenGL渲染标准的渲染库。
本发明还提供了一种图形渲染装置,包括:
渲染管线构建模块,用于构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的纹理数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
传输模块,用于将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
图形渲染模块,用于所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
本发明还提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如所述图形渲染方法的步骤。
本发明还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如所述图形渲染方法的步骤。
本发明提供的图形渲染方法、装置、电子设备与存储介质,通过构建与系统平台无关的渲染管线,以及通过快速消息队列形式的渲染指令队列传输指令与数据,可实现图像渲染所需指令与数据的高效传输,且能减少进程调度的次数,有助于降低对CPU资源的占用。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的图形渲染方法的流程图;
图2是本发明所涉及的渲染管线、渲染指令队列以及图像处理器中的渲染进程之间的连接示意图;
图3是本发明提供的图形渲染装置的结构示意图;
图4是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图4描述本发明的图形渲染方法、装置、电子设备与存储介质。
图1为本发明提供的图形渲染方法的流程图,如图1所示,本发明提供的图形渲染方法包括:
步骤101、构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息。
本发明提供的图形渲染方法能够实现安卓操作系统中的图形渲染接口EGL/GLES对Linux操作系统中的图形渲染接口OpenGL的支持。因此,安装有安卓操作系统的驱动程序的硬件平台上所运行的Linux应用程序在执行绘图操作时,将会调用本发明的方法。
当Linux应用程序请求渲染目标对象的图形时,会发出OpenGL格式的渲染指令,在本实施例中,将该渲染指令称为第一渲染指令。本领域技术人员很容易理解,通过渲染指令可以启动对目标对象图形的渲染过程。
在渲染目标对象时,应当有渲染时所需要的数据。例如,目标对象为一幢大楼,在渲染大楼的图形前,应当有大楼的形状、颜色、大小等数据。
在本实施例中,将渲染目标对象的图形时所需要的数据称为第一渲染数据。第一渲染数据包括顶点数据,如顶点坐标、纹理坐标、顶点法线和顶点颜色等顶点属性的信息,还包括图元信息,所述图元信息用于描述顶点数据所构成的图元的类型。常见的图元类型包括:点(GL_POINTS)、线(GL_LINES)、线条(GL_LINE_STRIP)、三角面(GL_TRIANGLES)。
本领域技术人员容易理解,目标对象可以不止一个,如目标对象是一个建筑群,那么第一渲染数据为多个目标对象在渲染时所需要的数据。
OpenGL的渲染上下文是OpenGL在其中存储渲染信息的一个数据结构,它会将各种状态信息保存在上下文中,包括顶点信息、纹理信息、编译好的着色器信息等。保存有状态信息的上下文信息即为上下文状态信息。在本实施例中,将渲染目标对象的图形时所需要的上下文状态信息称为第一渲染上下文状态信息。第一渲染上下文状态信息通常包括离屏类型的绘图缓冲区或无绘图表面的资源对象。
前述的第一渲染指令、第一渲染数据以及第一渲染上下文状态信息都是Linux应用程序请求渲染目标对象的图形时,由图形渲染接口OpenGL所生成的。在本发明中,需要将这些数据传递给图形处理器GPU中的EGL/GLES的渲染进程。为此,首先由渲染管线采集并获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息。
所述渲染管线是根据OpenGL Pipeline机制所构建的,其与系统平台无关,即不依赖于特定操作系统库与特定软件版本。在本实施例中,将所述渲染管线记为virglPipeline。
如本领域技术人员所知,图形处理器GPU一般包含有多个硬件渲染管线,这些硬件渲染管线通常由独立的GPU线程负责调度维护。在本实施例中,将这些GPU内的硬件渲染管线称为物理渲染管线。利用OpenGL Pipeline机制所构建的渲染管线与图形处理器中的物理渲染管线具有唯一的对应关系。例如,图形处理器GPU中有物理渲染管线a、b、c;利用OpenGL Pipeline机制所构建的渲染管线有A、B、C。渲染管线A与物理渲染管线a相对应;渲染管线B与物理渲染管线b相对应;渲染管线C与物理渲染管线c相对应。
在本发明中,尽管没有明确定义的,本领域技术人员容易理解,所描述的“OpenGLPipeline机制”指的是在OpenGL中,将图像所具备的图形信息(顶点、纹理、材质、摄像机位置等)经过几何阶段、光栅化阶段等一系列阶段相应Shader的处理,最终转换成屏幕上的图像像素的过程。
步骤102、将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程。
在申请人所知的一种技术中,基于QEMU虚拟机的virtIO-GPU架构运行于内核态,GPU指令以及数据的传递需要经过多次内存拷贝,有较多的性能损耗。在本发明中,采用运行在用户空间的渲染指令队列virtIO-GPU-Fmq来实现渲染管线virglPipeline与图形处理器GPU中的EGL/GLES的渲染进程之间的数据传输。
图2为本发明所涉及的渲染管线、渲染指令队列以及图像处理器中的渲染进程之间的连接示意图。如图2所示,运行在用户空间的渲染指令队列virtIO-GPU-Fmq是OpenGL驱动中的渲染管线virglPipeline与图形处理器GPU中的EGL/GLES的渲染进程之间的桥梁。渲染管线virglPipeline作为数据的发送端,(通过virglCmdWritter)将第一渲染指令与所述第一渲染数据发送到渲染指令队列virtIO-GPU-Fmq;GLES物理渲染管线(EGL/GLES的渲染进程的一部分)作为数据的接收端,从渲染指令队列virtIO-GPU-Fmq获取数据。在本实施例中,渲染指令队列virtIO-GPU-Fmq采用快速消息队列(Fast Message Queue,FMQ),针对在在两个进程内部实时传递渲染指令以及渲染数据的需要,FMQ比传统的通信机制更快速,性能开销更低。
步骤103、所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件平台的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
在之前的步骤中,已经通过渲染指令队列将第一渲染指令与所述第一渲染数据从所述渲染管线传输到EGL/GLES的渲染进程。
在本步骤中,EGL/GLES的渲染进程可通过映射机制获取第一渲染上下文状态信息,然后根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息,调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
EGL/GLES的渲染进程是指图形处理器GPU上按照EGL/GLES协议标准实现的渲染进程,在本实施例中,可将其称为virtIO-GPU Device Process。该进程包括物理渲染管线,还包括渲染器(virglrender),渲染器具有格式转换的功能,并可调用硬件平台的EGL/GLES图形驱动生成图像帧。
需要说明的是,由于第一渲染指令是OpenGL格式的渲染指令,因此EGL/GLES图形驱动首先需要将第一渲染指令转换为第二渲染指令;第二渲染指令为EGL/GLES格式的渲染指令;然后再根据所述第二渲染指令、第一渲染数据以及第一渲染上下文状态信息生成图像帧,最终实现目标对象的图形渲染。
本发明提供的图形渲染方法通过构建与系统平台无关的渲染管线,以及通过快速消息队列形式的渲染指令队列传输指令与数据,可实现图像渲染所需指令与数据的高效传输,且能减少进程调度的次数,有助于降低对CPU资源的占用。
基于上述任一实施例,在本实施例中,构建渲染管线包括:
构建不依赖于特定操作系统库与特定软件版本的渲染管线;将所述渲染管线唯一地映射到图形处理器中的一个物理渲染管线;
为所述渲染管线创建多个虚拟管线,所述虚拟管线用于绑定不同场景下的上下文状态信息。
在本实施例中,为了提高上下文切换时的性能,为一个渲染管线virglPipeline创建多个虚拟管线virtualPipeline,不同的虚拟管线可用于绑定不同场景下的图形缓冲区等上下文状态信息。
例如,在渲染过程中需要多种类型的纹理数据,此时可设置多个虚拟管线,一个虚拟管线管理其中的一种纹理数据。考虑到GPU资源(如显存以及GPU线程)的有限性,以及物理渲染管线切换带来的性能开销,通过轻量级的虚拟管线切换具有快捷高效的优点。
本发明提供的图形渲染方法通过为渲染管线创建用于绑定不同场景下的上下文状态信息的虚拟管线,能够降低物理渲染管线切换带来的性能开销,具有快捷高效的优点。
基于上述任一实施例,在本实施例中,所述构建不依赖于特定操作系统库与特定软件版本的渲染管线,包括:
构建不依赖于特定操作系统库与特定软件版本的多个渲染管线。
如本领域技术人员所知,图形处理器GPU内一般有多个物理渲染管线。为了提高渲染效率,充分利用图形处理器GPU内的多个物理渲染管线,在本实施例中,在构建渲染管线virglPipeline时,同时构建并维护多个virglPipeline。从逻辑上,一个virglPipeline会独立地映射到一个物理渲染pipeline。
例如,所要渲染的图形是一幢大楼,为了提高渲染效率,可按照大楼的建筑结构将其分为墙体、门窗和屋顶;然后将大楼的墙体、门窗、屋顶分配给不同的渲染管线virglPipeline。由于渲染管线virglPipeline与物理渲染管线存在一一对应的映射关系,因此,大楼中的各个部分所对应的渲染指令与渲染数据可由不同的渲染管线virglPipeline传输到与其对应的物理渲染管线,进而由物理渲染管线各自完成对应部分的渲染。
多个渲染管线virglPipeline之间的调度维护可由CPU中的多个线程实现。如当渲染管线virglPipeline有多个时,不同渲染管线virglPipeline的切换绑定通常在GLMakeCurrent()接口中完成。
本发明提供的图形渲染方法利用图形处理器所具有的多个物理渲染管线,构建与物理渲染管线一一对应的多个渲染管线,使得能够充分利用物理渲染管线的资源,提高渲染效率。
基于上述任一实施例,在本实施例中,所述渲染指令队列中的内存块为共享内存块;
相应的,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
所述渲染管线将所述第一渲染指令与所述第一渲染数据写入所述渲染指令队列的第一内存块;
将所述第一内存块的地址传递给所述EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程根据所述第一内存块的地址读取所述第一渲染指令与所述第一渲染数据。
在本实施例中,通过渲染指令队列可实现以读写零拷贝的方式传输第一渲染指令与第一渲染数据。
具体的说,首先为渲染指令队列建立内存抽象服务MemoryBlock,该内存抽象服务允许不同服务进程的内存块共享单个内存堆。
然后在渲染指令队列的发送端采用环形缓冲区保存第一渲染指令与第一渲染数据,该环形缓冲区中的内存块通过前述的内存抽象服务MemoryBlock进行读写操作。由于内存抽象服务MemoryBlock允许不同服务进程的内存块共享单个内存堆,因此发送端在写入第一渲染指令及第一渲染数据时,可通过直接访问内存块及地址指针完成。保存有渲染指令及数据的共享内存块的地址由发送端传输给接收端。当接收端需要读出第一渲染指令及第一渲染数据时,可根据内存块的地址从共享的内存块中直接读取第一渲染指令及第一渲染数据,避免了内存拷贝操作。
从上述描述可以看出,通过渲染指令队列将第一渲染指令与第一渲染数据从渲染管线virglPipeline传输到硬件平台的EGL/GLES的渲染进程的过程中,只需要完成将第一渲染指令与第一渲染数据写入渲染指令队列的操作以及从渲染指令队列读出第一渲染指令与第一渲染数据的操作,不再需要做多次内存拷贝,能够最大效率地节省单次内存分配的开销。
本发明提供的图形渲染方法通过将渲染指令队列中的内存块设置为共享内存块,可实现以读写零拷贝的方式传输第一渲染指令与第一渲染数据,不再需要做多次内存拷贝,能够最大效率地节省单次内存分配的开销。
基于上述任一实施例,在本实施例中,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
通过桶机制将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线异步传输到EGL/GLES的渲染进程。
在一些情况下,第一渲染数据的规模较大,如顶点数组包括大量的顶点信息,纹理对象包括大量的像素数据。此时,传输第一渲染数据需要花费大量的时间,因此,在本实施例中,渲染指令队列在内存块基础之上设计桶机制(bucket)完成异步数据传递,以达到传输数据限流的作用,防止传输数据量过大造成的过大内存块消耗,以及接收解析数据造成的大量性能损耗。
具体的说,桶机制的设计可以采用经典的令牌桶机制方法来实现。即以一个恒定的限流速率向一个桶数据结构中发送令牌,当绘图指令需要发送顶点或者纹理数据时,需要先从桶结构中获取令牌,获取成功,可将数据通过FMQ发送给对端,获取失败,则将数据缓存,当桶中的令牌数量足够时,再将缓存的数据发送给对端,达到限流异步传输的作用。
本发明提供的图形渲染方法通过桶机制完成异步数据传递,可达到传输数据限流的作用,防止传输数据量过大造成的过大内存块消耗,以及接收解析数据造成的大量性能损耗。
基于上述任一实施例,在本实施例中,在所述构建渲染管线之前,方法还包括:
加载基于OpenGL渲染标准的渲染库。
当Linux应用程序请求渲染目标对象的图形时,会通过动态链接加载libEGL/libGLX/libGL等基于OpenGL绘图标准的渲染库,调用OpenGL相关接口,完成画布等渲染操作。其中libEGL和libGLX主要负责窗口缓冲区纹理的管理与初始化创建等操作,libGL主要负责向底层画布以及渲染管线发送渲染指令等具体渲染操作。
本发明提供的图形渲染方法通过加载基于OpenGL渲染标准的渲染库,为后续的渲染操作提供了必要的基础。
下面对本发明提供的图形渲染装置进行描述,下文描述的图形渲染装置与上文描述的图形渲染方法可相互对应参照。
图3为本发明提供的图形渲染装置的结构图,如图3所示,本发明提供的图形渲染装置包括:
渲染管线构建模块301,用于构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的纹理数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
传输模块302,用于将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
图形渲染模块303,用于所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件平台的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
本发明提供的图形渲染装置通过构建与系统平台无关的渲染管线,以及通过快速消息队列形式的渲染指令队列传输指令与数据,可实现图像渲染所需指令与数据的高效传输,且能减少进程调度的次数,有助于降低对CPU资源的占用。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行图形渲染方法,该方法包括:
构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的图形渲染方法,该方法包括:
构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的图形渲染方法,该方法包括:
构建渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种图形渲染方法,其特征在于,包括:
构建不依赖于特定操作系统库与特定软件版本的渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
2.根据权利要求1所述的图形渲染方法,其特征在于,构建渲染管线,包括:
将所述渲染管线唯一地映射到图形处理器中的一个物理渲染管线;
为所述渲染管线创建多个虚拟管线,所述虚拟管线用于绑定不同场景下的上下文状态信息。
3.根据权利要求2所述的图形渲染方法,其特征在于,所述构建不依赖于特定操作系统库与特定软件版本的渲染管线,包括:
构建不依赖于特定操作系统库与特定软件版本的多个渲染管线。
4.根据权利要求1所述的图形渲染方法,其特征在于,所述渲染指令队列中的内存块为共享内存块;
相应的,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
所述渲染管线将所述第一渲染指令与所述第一渲染数据写入所述渲染指令队列的第一内存块;
将所述第一内存块的地址传递给所述EGL/GLES的渲染进程;
所述EGL/GLES的渲染进程根据所述第一内存块的地址读取所述第一渲染指令与所述第一渲染数据。
5.根据权利要求1所述的图形渲染方法,其特征在于,所述将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程,包括:
通过桶机制将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线异步传输到EGL/GLES的渲染进程。
6.根据权利要求1所述的图形渲染方法,其特征在于,所述根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件平台的EGL/GLES图形驱动生成图像帧,包括:
调用硬件的EGL/GLES图形驱动,将所述第一渲染指令转换为第二渲染指令;所述第二渲染指令为EGL/GLES格式的渲染指令;
根据所述第二渲染指令、第一渲染数据以及第一渲染上下文状态信息生成图像帧。
7.根据权利要求1-6任一项所述的图形渲染方法,其特征在于,在构建渲染管线之前,方法还包括:
加载基于OpenGL渲染标准的渲染库。
8.一种图形渲染装置,其特征在于,包括:
渲染管线构建模块,用于构建不依赖于特定操作系统库与特定软件版本的渲染管线,通过所述渲染管线获取第一渲染指令、第一渲染数据以及第一渲染上下文状态信息;其中,所述第一渲染指令是Linux应用程序在请求渲染目标对象的图形时所生成的OpenGL格式的渲染指令;所述第一渲染数据是渲染目标对象的图形时所需要的纹理数据;所述第一渲染上下文状态信息是渲染目标对象的图形时所需要的上下文状态信息;
传输模块,用于将所述第一渲染指令与所述第一渲染数据通过运行在用户空间的渲染指令队列,从所述渲染管线传输到EGL/GLES的渲染进程;
图形渲染模块,用于所述EGL/GLES的渲染进程以映射的方式获取所述第一渲染上下文状态信息,根据所述第一渲染指令、第一渲染数据以及第一渲染上下文状态信息调用硬件的EGL/GLES图形驱动生成图像帧,实现目标对象的图形渲染。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述图形渲染方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述图形渲染方法的步骤。
CN202110777324.6A 2021-07-09 2021-07-09 图形渲染方法、装置、电子设备与存储介质 Active CN113515396B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110777324.6A CN113515396B (zh) 2021-07-09 2021-07-09 图形渲染方法、装置、电子设备与存储介质
PCT/CN2022/101315 WO2023279993A1 (zh) 2021-07-09 2022-06-24 图形渲染方法、装置、电子设备与存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110777324.6A CN113515396B (zh) 2021-07-09 2021-07-09 图形渲染方法、装置、电子设备与存储介质

Publications (2)

Publication Number Publication Date
CN113515396A CN113515396A (zh) 2021-10-19
CN113515396B true CN113515396B (zh) 2024-01-30

Family

ID=78066523

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110777324.6A Active CN113515396B (zh) 2021-07-09 2021-07-09 图形渲染方法、装置、电子设备与存储介质

Country Status (2)

Country Link
CN (1) CN113515396B (zh)
WO (1) WO2023279993A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113515396B (zh) * 2021-07-09 2024-01-30 北京字节跳动网络技术有限公司 图形渲染方法、装置、电子设备与存储介质
CN113822962B (zh) * 2021-11-19 2022-03-18 北京鲸鲮信息系统技术有限公司 窗口信息处理方法、装置、电子设备及存储介质
CN114257867A (zh) * 2021-12-22 2022-03-29 统信软件技术有限公司 视频图像显示方法和装置,计算设备和可读存储介质
CN115016957B (zh) * 2022-05-26 2024-03-22 湖南三一智能控制设备有限公司 一种跨进程内存共享的方法、装置、终端及车辆
CN115983047B (zh) * 2023-03-14 2023-05-26 北京科技大学 一种适用于多图形接口的跨平台的仿真系统
CN116797707B (zh) * 2023-06-26 2024-01-30 成都中科合迅科技有限公司 基于操作系统适配的界面图形渲染方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103713891A (zh) * 2012-10-09 2014-04-09 阿里巴巴集团控股有限公司 一种在移动设备上进行图形渲染的方法和装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
CN110825467A (zh) * 2018-08-09 2020-02-21 北京微播视界科技有限公司 渲染方法、装置、硬件装置和计算机可读存储介质
CN112348732A (zh) * 2019-08-08 2021-02-09 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2946074C (en) * 2015-10-21 2024-02-13 Stephen Viggers Systems and methods for using an opengl api with a vulkan graphics driver
CN109213607B (zh) * 2017-06-30 2021-07-23 武汉斗鱼网络科技有限公司 一种多线程渲染的方法和装置
US10649790B1 (en) * 2017-08-24 2020-05-12 Amazon Technologies, Inc. Multithreaded rendering for virtualized graphics processing
CN111274044B (zh) * 2020-01-13 2023-08-15 奇安信科技集团股份有限公司 Gpu虚拟化资源限制处理方法及装置
CN111488196B (zh) * 2020-04-13 2024-03-22 西安万像电子科技有限公司 渲染方法及装置、存储介质、处理器
CN112023402B (zh) * 2020-09-02 2021-07-27 腾讯科技(深圳)有限公司 游戏数据处理方法、装置、设备以及介质
CN112269603B (zh) * 2020-10-16 2021-05-28 北京技德系统技术有限公司 一种在Linux上兼容运行Android应用的图形显示方法与装置
CN113515396B (zh) * 2021-07-09 2024-01-30 北京字节跳动网络技术有限公司 图形渲染方法、装置、电子设备与存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103713891A (zh) * 2012-10-09 2014-04-09 阿里巴巴集团控股有限公司 一种在移动设备上进行图形渲染的方法和装置
CN106997610A (zh) * 2016-01-26 2017-08-01 阿里巴巴集团控股有限公司 一种图像渲染方法、装置及电子设备
CN110825467A (zh) * 2018-08-09 2020-02-21 北京微播视界科技有限公司 渲染方法、装置、硬件装置和计算机可读存储介质
CN112348732A (zh) * 2019-08-08 2021-02-09 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质

Also Published As

Publication number Publication date
CN113515396A (zh) 2021-10-19
WO2023279993A1 (zh) 2023-01-12

Similar Documents

Publication Publication Date Title
CN113515396B (zh) 图形渲染方法、装置、电子设备与存储介质
CN112269603B (zh) 一种在Linux上兼容运行Android应用的图形显示方法与装置
US9569862B2 (en) Bandwidth reduction using texture lookup by adaptive shading
JP6073533B1 (ja) タイルベースのアーキテクチャ上での最適化されたマルチパスレンダリング
CN111062858B (zh) 高效的提前渲染方法、装置及计算机存储介质
US20110067038A1 (en) Co-processing techniques on heterogeneous gpus having different device driver interfaces
US7760205B2 (en) Information processing apparatus for efficient image processing
CN112801855B (zh) 基于图元的渲染任务调度的方法、装置及存储介质
US10319068B2 (en) Texture not backed by real mapping
EP1255227A1 (en) Vertices index processor
CN114972607B (zh) 加速图像显示的数据传输方法、装置及介质
CN115350479B (zh) 渲染处理方法、装置、设备及介质
CN114968152A (zh) 减少virtio-gpu额外性能损耗的方法
US7404056B1 (en) Virtual copying scheme for creating multiple versions of state information
US20060061579A1 (en) Information processing apparatus for efficient image processing
CN115934383B (zh) Wayland合成器下多显卡渲染方法
US8203567B2 (en) Graphics processing method and apparatus implementing window system
CN111402349B (zh) 渲染方法、渲染装置和渲染引擎
JP2000132157A (ja) Zバッファ深度比較テスト実行装置
CN114247138B (zh) 图像渲染方法、装置、设备及存储介质
US7593971B1 (en) Configurable state table for managing multiple versions of state information
CN114697555A (zh) 一种图像处理方法、装置、设备及存储介质
CN115880127A (zh) 一种渲染格式选择方法及其相关设备
JP2010118058A (ja) トリプル・バッファリングを使用するデータを処理する方法
US6636224B1 (en) Method, system, and computer program product for overlapping graphics data collection and transmission using a single processor

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20220411

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

Address before: 2005, floor 2, No. 39, West Street, Haidian District, Beijing 100082

Applicant before: Beijing jingling Information System Technology Co.,Ltd.

GR01 Patent grant
GR01 Patent grant