CN114820897B - 图像渲染方法、装置、电子设备及计算机可读存储介质 - Google Patents
图像渲染方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114820897B CN114820897B CN202110127524.7A CN202110127524A CN114820897B CN 114820897 B CN114820897 B CN 114820897B CN 202110127524 A CN202110127524 A CN 202110127524A CN 114820897 B CN114820897 B CN 114820897B
- Authority
- CN
- China
- Prior art keywords
- rendering
- updated
- state
- symbol
- channel
- 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
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 959
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000003860 storage Methods 0.000 title claims abstract description 14
- 239000000872 buffer Substances 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 12
- 230000004931 aggregating effect Effects 0.000 claims description 11
- 230000002776 aggregation Effects 0.000 claims description 3
- 238000004220 aggregation Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 6
- 241001023788 Cyttus traversi Species 0.000 description 18
- 241000195955 Equisetum hyemale Species 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000003139 buffering effect Effects 0.000 description 4
- 230000007717 exclusion Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000005286 illumination Methods 0.000 description 3
- 241000283086 Equidae Species 0.000 description 2
- 241000229537 Moxostoma Species 0.000 description 2
- 230000003213 activating effect Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000037308 hair color Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000001795 light effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
本公开实施例提供了一种图像渲染方法、装置、电子设备及计算机可读存储介质,涉及图像处理领域,本公开实施例通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,从而不会出现渲染状态相互污染的问题,并通过将所有渲染通道的绘制指令聚合成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且,渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
Description
技术领域
本公开涉及图像处理技术领域,具体而言,本公开涉及一种图像渲染方法、装置、电子设备及计算机可读存储介质。
背景技术
OpenGL(Open Graphics Library)是一种定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口,它用于二维或者三维图像,是一个功能强大,调用方便的底层图形库。
状态机模式是指在OpenGL的运行时需要由渲染上下文(context)来保存纹理(Texture)、缓冲(Buffer)以及渲染状态。其中,纹理用于存储图像信息,缓冲用于存储网格信息,缓存状态用于控制渲染行为。例如,渲染一个皮球的图像,皮球表面的图像存储在纹理中,皮球的体积、形状则存储在缓冲中,而皮球有没有阴影、透明还是半透明则属于渲染状态。纹理和缓冲都需要在渲染上下文中创建。
图1为现有技术中图像渲染方法的流程示意图,如图1所示,应用层10向渲染引擎层20发起渲染请求,其中,应用层(Application Layer)也称为应用实体(AE,ApplicationEntity),应用层是发起渲染请求并接收最终的渲染图像的实体,渲染请求中包括待更新的纹理、缓冲以及渲染状态,渲染引擎层20根据待更新的纹理更新预先存储的纹理,获得更新后的纹理,根据更新后的缓冲更新预先存储的缓冲,根据更新后的渲染状态更新预先存储的渲染状态,之后根据更新后的纹理、缓冲以及渲染状态生成渲染指令发送至渲染上下文30,由渲染上下文30根据渲染指令生成渲染图像。
此外,传统的绘制过程都在绘制线程中执行,但由于单一绘制线程还要在绘制过程中穿插处理很多其他运算,这就导致绘制的效率低下。为了解决单一绘制线程存在效率低下的问题,进行线程并行化改造是一个可能的方案,而由于OpenGL/OpenGL ES的设计,并行化改造存在以下一些需要解决的问题:
首先,渲染引擎在下发渲染指令时,需要将下发渲染指令的线程绑定渲染上下文,但由于渲染上下文不能被多个线程绑定,导致渲染引擎下发指令时必须做到互斥,但这就极大降低了并发下发渲染指令的效率;
其次,尽管使用共享上下文(shared context)的机制能改善并发更新纹理和缓冲的效率,但是存在部分对象,例如帧缓冲区对象(frame buffer object,FBO)和顶点缓冲对象(Vertex Buffer Objects,VAO),不能够在不同的共享上下文之间分享,这样就存在不能够用同一个对象在不同的线程中生成能绘制相同结果的渲染指令序列;
再次,在状态机模式下绘制不同的对象时,可能会有部分渲染状态是共用的情况,如果渲染状态没有及时更新,可能导致渲染不同对象时渲染状态相互污染,极大增加程序的除错成本。
发明内容
本公开实施例提供一种克服上述问题或者至少部分地解决上述问题的图像渲染方法、装置、电子设备及计算机可读存储介质。
第一方面,提供了一种图像渲染的方法,该方法包括:
接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;
根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;
对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;
接收渲染请求,渲染请求中包括目标实体的唯一标识,从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。
第二方面,提供了一种图像渲染装置,该装置包括:
更新请求接收模块,用于接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;
符号状态发送模块,用于根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;
指令生成模块,用于对于目标实体中的渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;
指令汇聚模块,用于接收渲染请求,渲染请求中包括目标实体的唯一标识,从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。
第三方面,本公开实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如第一方面所提供的方法的步骤。
第四方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
第五方面,本发明实施例提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令被处理器执行时实现如第一方面所提供的方法。
本公开实施例提供的图像渲染方法、装置、电子设备及计算机可读存储介质,通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,本公开实现了符号表和初始渲染状态与符号值和渲染状态的解耦,并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立绘制指令,不会出现渲染状态相互污染的问题,最后通过将所有渲染通道的绘制指令合并成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
附图说明
为了更清楚地说明本公开实施例中的技术方案,下面将对本公开实施例描述中所需要使用的附图作简单地介绍。
图1为现有技术中图像渲染方法的流程示意图;
图2为本公开实施例提供的中间件的架构图;
图3为本公开实施例提供的应用层、实体以及渲染上下文的交互示意图;
图4为本公开实施例提供的一种图像渲染方法的流程示意图;
图5为本公开实施例提供的一种图像渲染装置的结构示意图;
图6为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本公开的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本公开,而不能解释为对本公开的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本公开的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
本公开提供的图像渲染方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
本公开在应用层和渲染上下文之间设置了中间件,中间件位于渲染引擎层中,图2为本公开实施例提供的中间件的架构图,如图2所示,中间件包括渲染管线(Pipeline)、渲染通道(Pass)和实体(Entity),具体地:
Pipeline,渲染管线,在本公开中的一个实施例中,渲染管线中保存有符号表和完整的初始渲染状态。符号表,即用于记录符号的表,符号可以理解为纹理或者缓冲的集合。在实际应用中,纹理和缓冲的种类有很多,以纹理为例,包括漫反射纹理diffuse texture,用于表示光照射的显示的纹理;自发光纹理ambient texture、环境光纹理emissivetexture等等,每一个符号要么仅包括纹理,要么仅包括缓冲。
本公开的符号均设置了初始的符号值,这样应用层如果仅对符号表中的部分符号值更新,则无需发送符号表中所有符号的符号值,渲染引擎只对部分符号值进行更新,将应用层未更新的符号值默认为初始的符号值,能够提高渲染速度。
在渲染图像时,可以根据预设规则将图像中被渲染的目标物体分成一个或者多个部分,然后针对每个部分,分别构建渲染管线。以渲染马的图像为例,可以根据预设规则将渲染马的图像分为渲染马头、渲染马身、渲染马尾,共三个部分,这样针对每个部分分别构建渲染管线,从而构建出:
用于渲染马头的渲染管线,该渲染管线中保存渲染马头所使用的符号表,该符号表中存储有渲染马头所使用的符号的初始值,例如,马眼的颜色为棕色、马头的毛发为白色等等;
用于渲染马身的渲染管线,该渲染管线中保存渲染马身所使用的号表,该符号表中存储有渲染马身所使用的符号的初始值,例如,马身的颜色为白色、马身上的花纹为黑色等等;
用于渲染马尾的渲染管线,该渲染管线中保存渲染马尾所使用的符号表,该符号表中存储有渲染马尾所使用的符号的初始值,例如,马尾的颜色为白色、马尾的长度为40厘米等等;
在本公开中,渲染管线中保存的完整的初始渲染状态具有两个含义,其中,完整的,是指渲染图像的所有渲染状态,比如渲染马的过程可能需要确定几十个渲染状态,那么渲染管线中就需要预先保存这几十个渲染状态;初始的渲染状态,也即预设好渲染状态,对应的是应用层发送的待更新的渲染状态,比如某一渲染状态:光照模式,初始的渲染状态可以是光照模式关闭,而应用层发送的待更新的渲染状态为光照模式开启。
Entity,即实体,在本公开中,应用层能够接受实体作为描述完整渲染流程的参数,从而不必再声明更细致的渲染状态或者渲染参数。也就是说,应用层可以仅向渲染引擎层发送实体的唯一标识,无需更细致地描述渲染状态等信息。之所以具有上述功能,是因为实体集合了渲染图像所需的所有Pass(渲染通道)。渲染引擎层直接将对应的实体中所有渲染通道预先存储的渲染指令发送至渲染上下文,使得渲染上下文根据所有渲染通道的渲染指令生成渲染图像,这样设置能够减少编程的复杂程度,大幅提高渲染效率。
渲染通道,用于保存绘制所使用的符号值、完整的渲染状态以及根据符号值和完整的渲染状态产生的OpenGL/ES渲染指令(以下简称渲染指令)。一个实体中的渲染通道与渲染管线是一一对应的关系,继续以上述渲染马的图像的例子说明,若渲染管线分为渲染马头、马身和马尾的渲染管线,那么实体中就存在与渲染马头的渲染管线对应的渲染马头的渲染通道、与渲染马身的渲染管线对应的渲染马身的渲染通道、与渲染马尾的渲染管线对应的渲染马尾的渲染通道。
需要注意的是,渲染管线的符号表中的符号值提供的是初始的符号值,渲染通道在获取渲染管线中的符号表和完整的初始渲染状态后,如果没有获取由应用层发送的待更新的符号值和待更新的渲染状态,渲染管线可以根据渲染管线中的符号表和完整的初始渲染状态生成的渲染指令,会使得渲染上下文最终生成初始的渲染图像。仍然以渲染马为例:渲染管线中的符号表中记录了马的长度为2米,马的颜色为白色,完整的初始渲染状态包括不抗锯齿、不设置环境光、不激活镜面反射等等,渲染通道根据该符号表和完整的初始渲染状态生成一个渲染指令,由渲染上下文根据该渲染指令生成渲染图像,在该渲染图像中,就是一个初始的马的样子,该马的长度为2米,马的颜色为白色,不抗锯齿、不设置环境光、不激活镜面反射。
在本公开中,渲染通道会接收并保存应用层发送的待更新的符号值和待更新的渲染状态,进一步根据待更新的符号值和待更新的渲染状态对符号表和完整的初始渲染状态进行更新,那么就可以形成应用层想要的渲染效果。
例如,待更新的符号值中记录马的长度为3米,马的颜色为黑色,待更新的渲染状态为抗锯齿、设置环境光、激活镜面反射,那么最终生成的渲染图像中马的长度就为3米,马的颜色为黑色,并且抗锯齿、设置环境光、激活镜面反射。
由此可知,渲染管线中存储的符号表和渲染状态类似于模板(但需要注意的是,这里的模板并不是空白的模板,而是可以绘制出基础图像的模板),而渲染通道会根据应用层发送的符号值和渲染状态对模板进行更新,从而形成个性化的渲染图像。
本公开通过将符号表和完整的初始渲染状态保存在渲染管线中,而应用层发送的符号值和渲染状态保存在渲染通道中,在进行渲染时有渲染通道从渲染管线中获取作为模板的符号表和完整的初始渲染状态,然后根据应用层发送的符号值和渲染状态对模板进行更新,并进一步生成渲染指令,使得渲染上下文可以生成个性化的渲染图像,由于本公开实现了符号表和初始渲染状态与符号值和渲染状态的解耦,并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立的绘制指令,不会出现渲染状态相互污染的问题。
在此基础上,如果应用层想要获得多个不同的马的渲染图像,即可预先构建多个不同的实体,每个实体中的渲染通道都与对应的渲染管线相对应。尽管对于一个渲染管线而言,该渲染管线对应了多个实体中的多个渲染通道,但由于每个实体中的每个渲染通道只与一个渲染管线对应,而每个渲染通道只需要获取渲染管线中的符号表和完整的初始渲染状态,所以对应同一个渲染关系的多个实体中的多个渲染通道在获得应用层发送的不同的符号值和渲染状态后,也不会出现相互干扰的情况。
参阅图3,图3为本公开提供的应用层、实体以及渲染上下文的交互示意图,如图3所示,渲染管线1~3分别为渲染马头、马身和马腿的渲染管线,实体A中的渲染通道为渲染通道a1~a3,渲染通道a1~a3分别与渲染管线1~3对应,实体B中的渲染通道为渲染通道b1~b3,渲染通道b1~b3分别与渲染管线1~3对应。
若应用层针对马头发送了两个符号值,分别为马头颜色为黑色和马头颜色为红色。若实体A中的渲染通道a1接收了马头颜色为黑色的符号值,实体B中的渲染通道b1接收了马头颜色为红色的符号值,渲染通道a1和b1均会从渲染管线1中获取相同的符号表,然后渲染通道a1将与马头颜色相关的符号的符号值更新为黑色,渲染通道b1将与马头颜色相关的符号的符号值更新为红色,那么渲染通道a1就会生成马头颜色为黑色的渲染指令,而渲染通道a2就会生成马头颜色为红色的渲染指令,从而,渲染上下文分别生成具有黑色马头的马和具有红色马头的马。
一个实体中的渲染通道在生成渲染指令后,将渲染指令缓存在渲染通道本地,那么当应用层需要渲染时,直接以目标实体为参数描述渲染需求,将目标实体中所有渲染通道预先保存的渲染指令发送至渲染上下文,由渲染上下文根据渲染指令生成渲染图形,
本公开将渲染指令发送至渲染上下文的过程称为指令提交,在现有的指令提交方案中,每个渲染通道生成渲染指令后就直接发送到渲染上下文,也就意味着渲染上下文需要接收多次渲染指令,就需要考虑不同的渲染通道在发送指令时是否存在互斥的问题,而本公开的指令提交是将一个实体的所有渲染通道生成的渲染指令进行聚合,获得一个渲染指令序列,将渲染指令序列一次性发送至渲染上下文,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且本公开的渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力,并行处理也获得了不阻塞其他线程的执行的效果。
在上述各实施例的基础上,作为一种可选实施例,本公开提供一种图像渲染方法,应用于渲染引擎层,如图4所示,该方法包括:
S101、接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息。
本公开的渲染更新请求由应用层发起,渲染更新请求中包括以下内容:目标实体的唯一标识、待更新的符号值的信息、以及待更新的渲染状态的信息。
关于目标实体的唯一标识,本公开的渲染引擎层中预先创建了用于绘制不同渲染图像的实体,因此对每个实体都设置了唯一标识,应用层想要获得渲染图像,首先需要确定目标实体的唯一标识,这样渲染引擎层就可以根据目标实体的唯一标识确定目标实体。例如,渲染引擎层中有3个实体——唯一标识为001的实体用于绘制马,唯一标识为002的实体用于绘制水塘,唯一标识为003的实体用于绘制汽车,渲染引擎层在创建实体后会将实体的相关信息发给应用层,应用层会根据自身的需要确定目标实体,若应用层想要获得渲染图像马,则发送的实体的唯一标识为001。
关于待更新的符号值的信息,其包括待更新的符号值以及待更新的符号值所属的渲染通道的唯一标识,其中待更新的符号值已在上述实施例说明,在此不再赘述。由上述实施例可知,每一个渲染通道中具有一个符号表,并且符号表中具有多个符号。由于本公开不需要限定同一个符号只能出现在一个渲染通道中,所以同一个符号有可能出现在多个渲染通道中,因此,应用层发送的渲染更新请求中还需要限定待更新的符号值的渲染通道的唯一标识。例如,以渲染马的图像为例,待更新的符号值为:毛发颜色为黑色,该符号值所属的渲染通道的唯一标识对应的是渲染马身的渲染通道,那么该待更新的符号值就会发送到目标实体所包括的渲染马身的渲染通道,而不会发送到渲染马尾或者马头的渲染通道。
待更新的渲染状态的信息,包括待更新的渲染状态以及待更新的渲染状态所属的渲染通道的唯一标识,其中待更新的渲染状态已在上述实施例说明,在此不再赘述。由于每个渲染管线都是独立的,且每个渲染管线都记录了完整的初始渲染状态,而本公开并不限定一个渲染状态只能出现在一个渲染管线中,所以一个渲染状态可能出现在多个渲染管线中。本公开通过对待更新的渲染状态设置的渲染通道的唯一标识,使得待更新的渲染状态能够准确地发送到正确的渲染通道。例如,以渲染马的图像为例,待更新的渲染状态为:开启环境光效果,该渲染状态所属的渲染通道的唯一标识指示渲染马身的渲染通道,那么该待更新的渲染状态就会发送到目标实体所包括的渲染马身的渲染通道,而不会发送到渲染马尾或者马头的渲染通道。
S102、根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道。
本公开的渲染引擎层中的每个实体都具有唯一标识,那么在确定渲染更新请求中的目标实体的唯一标识后,即可根据该唯一标识找到对应的实体,作为目标实体。
进一步地,本公开的每个渲染通道也具有唯一标识,由于待更新的符号值的信息中记录了该符号值所属的渲染通道的唯一标识,所以可以根据该唯一标识确定目标实体中的对应的渲染通道。
例如,若目标实体中具有3个渲染通道,3个渲染通道的唯一标识为001、002和003,若待更新的符号值所属的渲染通道为001,待更新的渲染状态所属的渲染通道为002,那么就将待更新的符号值发送到唯一标识为001的渲染通道,将待更新的渲染状态发送到唯一标识为002的渲染通道。
S103、对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令。
应当理解的是,目标实体中的渲染通道存在四种情况:
情况一、既没有收到待更新的符号值,也没有收到待更新的渲染状态;
情况二、接收到待更新的符号值,没有接收到待更新的渲染状态;
情况三、没有接收到待更新的符号值,接收到待更新的渲染状态;
情况四、既接收到待更新的符号值,也接收到待更新的渲染状态。
渲染通道符合上述各情况时,对应的待更新的符号值和待更新的渲染状态也不同:
对于情况一的渲染通道,该渲染通道对应的待更新的符号值和待更新的渲染状态均为空值,该渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,然后根据符号表和完整的初始渲染状态生成渲染指令;
对于情况二的渲染通道,该渲染通道对应的待更新的符号值为接收到的待更新的符号值,该渲染通道对应的待更新的渲染状态为空值,该渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为待更新的符号值,获得更新后的符号表,根据更新后的符号表和完整的初始渲染状态生成渲染指令;
对于情况三的渲染通道,该渲染通道对应的待更新的符号值为空值,该渲染通道对应的待更新的渲染状态为接收到的待更新的渲染状态,该渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据符号表和完整的、更新后的渲染状态生成渲染指令;
对于情况四的渲染通道,该渲染通道对应的待更新的符号值为接收到的待更新的符号值,该渲染通道对应的待更新的渲染状态为接收到的待更新的渲染状态,该渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为待更新的符号值,获得更新后的符号表,根据待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据更新后的符号表和完整的、更新后的渲染状态生成渲染指令。
S104、接收渲染请求,渲染请求中包括目标实体的唯一标识,从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。
本公开在接收到应用层发送的渲染请求后,确定对应的目标实体,然后从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文生成渲染图像,由于渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
具体地,目标实体中每个渲染通道中都保存了自身生成的渲染指令,若目标实体中具有三个渲染通道,其中渲染通道一生成的渲染指令为xxx,渲染通道二生成的渲染指令为yyy,渲染通道三生成的渲染指令为zzz,那么渲染指令序列为xxx,yyy,zzz。
本公开的图像渲染方法通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,本公开实现了记录所有符号的符号表与待更新的符号值的解耦,以及所有初始渲染状态与待更新的渲染状态的解耦(即应用层不需要将待更新的符号值和未更新的符号值一起发送至实体,也不需要将待更新的渲染状态和未更新的渲染状态一起发送至实体),并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立的绘制指令,不会出现渲染状态相互污染的问题,最后通过将所有渲染通道的绘制指令合并成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
在上述各实施例的基础上,作为一种可选实施例,符号还包括符号的唯一标识、类型信息、个数信息以及列表;
其中,类型信息用于表征符号的列表中记录的是纹理、缓冲还是数值型符号(符号共有3种类型,其中数值型符号是除了纹理和缓冲之外的另一种符号);个数信息用于表征符号中包含的纹理、缓冲或者数值型符号的个数;列表记录纹理、缓冲或者数值型符号的子类型符号和对应的符号值。
具体地,例如某符号为:
唯一标识:001;
类型信息:纹理;
个数信息:1;
列表:
纹理 | 符号值 |
Normal map法线贴图 | 2560 |
Normal map法线贴图 | 45 |
在上述符号中,符号的类型是一致的,均为纹理符号,类别中记录的都是法线贴图这一种子类型符号,但两个法线贴图的符号值存在区别。
本公开通过在符号中记录唯一标识、类型信息、个数新以及列表,能够细粒度地描述符号的具体内容,有利于应用层和渲染引擎层准确地对符号进行描述。
在上述各实施例的基础上,作为一种可选实施例,渲染管线中还包括着色器程序的唯一标识。
着色器程序,即shader program,渲染上下文在执行渲染指令序列时,实际上是根据着色器程序具体实现的渲染,通过在渲染管线中设置着色器程序的唯一标识,使得渲染上下文可以根据着色器程序的唯一标识找到相应的着色器程序,然后通过对应的着色器程序执行渲染指令序列,生成渲染图像。
对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,包括:对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表、着色器程序的唯一标识以及完整的初始渲染状态。
也就是说,渲染通道除了需要从渲染管线中获取符号表和完整的初始渲染状态,还需要获取着色器程序的唯一标识,渲染通道在获取着色器程序的唯一标识后,会将其记录在本地。
步骤S104中的将渲染指令序列发送至渲染上下文,包括:将渲染指令序列以及着色器程序的唯一标识发送至渲染上下文,以使得渲染上下文根据着色器程序的唯一标识确定目标着色器程序,并根据所述目标着色器程序和渲染指令序列生成渲染图像。
在上述各实施例的基础上,作为一种可选实施例,目标实体中的每个渲染通道还记录序号信息,序号信息用于表征渲染通道在目标实体中所有渲染通道中的顺序。
渲染图像是具有先后顺序的,以渲染马为例,一般需要先渲染马头,再渲染马身,最后渲染马尾,这个顺序是预先设定好的,不能乱序渲染,本公开通过记录渲染通道的序号,其目的就是对渲染通道生成的渲染指令进行排序,从而方便渲染上下文有序地执行渲染指令,最终生成正确的渲染图像。
相应地,步骤S104中的从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,包括:
从目标实体中的所有渲染通道中获取渲染指令,根据各渲染通道的序号信息,依次将各渲染通道的渲染指令进行聚合,获得渲染指令序列。
也就是说,本公开根据渲染通道的序号信息,依次对渲染指令进行聚合,这样渲染上下文在读取渲染指令序列时,就会根据顺序依次指向各渲染指令。
在上述各实施例的基础上,作为一种可选实施例,在步骤S101的接收渲染更新请求,之前还包括:
创建至少一个渲染管线,渲染管线包括着色器程序的唯一标识、符号表以及完整的初始渲染状态;
设置渲染管线的唯一标识,并对符号表中的符号设置初始符号值;以及
创建实体,在实体中创建与至少一个渲染管线一一对应的渲染通道,分别设置实体的唯一标识以及每个渲染通道的唯一标识。
本公开通过在渲染引擎层创建渲染管线和实体,在渲染管线中存放符号表和完整的初始渲染状态,同时在实体中创建与渲染管线一一对应的渲染通道,使得渲染通道能够从渲染管线中获取符号表和完整的初始渲染状态,后续由渲染通道接收应用层发送的待更新的符合值和渲染状态,实现了符号表和渲染状态与符号值与待更新的渲染状态的解耦。
本公开实施例提供了一种图像渲染装置,如图5所示,该图像渲染装置可以包括:更新请求接收模块201、符号状态发送模块202、指令生成模块203以及指令汇聚模块204,其中,
更新请求接收模块201,用于接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;
符号状态发送模块202,用于根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;
指令生成模块203,用于对于目标实体中的渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;
指令汇聚模块204,用于接收渲染请求,渲染请求中包括目标实体的唯一标识,从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。
本公开实施例提供的图像渲染装置,具体执行上述方法实施例流程,具体请详见上述图像渲染方法实施例的内容,在此不再赘述。本公开实施例提供的图像渲染装置,通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,本公开实现了符号表和初始渲染状态与符号值和渲染状态的解耦,并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立的绘制指令,不会出现渲染状态相互污染的问题,最后通过将所有渲染通道的绘制指令合并成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
在上述各实施例的基础上,作为一种可选实施例,待更新的符号值的信息包括待更新的符号值以及待更新的符号值所属的渲染通道的唯一标识,待更新的渲染状态的信息包括待更新的渲染状态以及待更新的渲染状态所属的渲染通道的唯一标识;符号表包括至少一个设置初始符号值的符号,符号包括至少一个纹理或缓冲。
在上述各实施例的基础上,作为一种可选实施例,指令生成模块包括:
第一指令生成单元,用于对于既没有收到待更新的符号值,也没有收到待更新的渲染状态的渲染通道,渲染通道对应的待更新的符号值和待更新的渲染状态均为空值,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据符号表和完整的初始渲染状态生成渲染指令;
第二指令生成单元,用于对于接收到待更新的符号值,没有接收到待更新的渲染状态的渲染通道,渲染通道对应的待更新的符号值为接收到的待更新的符号值,渲染通道对应的待更新的渲染状态为空值,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为待更新的符号值,获得更新后的符号表,根据更新后的符号表和完整的初始渲染状态生成渲染指令;
第三指令生成单元,用于对于没有接收到待更新的符号值,接收到待更新的渲染状态的渲染通道,渲染通道对应的待更新的符号值为空值,渲染通道对应的待更新的渲染状态为接收到的待更新的渲染状态,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据符号表和完整的、更新后的渲染状态生成渲染指令;
第四指令生成单元,用于对于既接收到待更新的符号值,也接收到待更新的渲染状态的渲染通道,渲染通道对应的待更新的符号值为接收到的待更新的符号值,渲染通道对应的待更新的渲染状态为接收到的待更新的渲染状态,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为待更新的符号值,获得更新后的符号表,根据待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据更新后的符号表和完整的、更新后的渲染状态生成渲染指令。
在上述各实施例的基础上,作为一种可选实施例,符号还包括符号的唯一标识、类型信息、个数信息以及列表;
其中,类型信息用于表征符号的列表中记录的是纹理还是缓冲;个数信息用于表征符号中包含的纹理或者缓冲的个数;列表中包括符号的子类型符号以及对应的符号值。
在上述各实施例的基础上,作为一种可选实施例,渲染管线中还包括着色器程序的唯一标识。相应地,符号状态发送模块对于目标实体中的渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,具体为:对于目标实体中的渲染通道,从与渲染通道对应的渲染管线中获取符号表、着色器程序的唯一标识以及完整的初始渲染状态。
指令汇聚模块将渲染指令序列发送至渲染上下文,具体为包括:将渲染指令序列以及着色器程序的唯一标识发送至渲染上下文,使得渲染上下文根据着色器程序的唯一标识确定目标着色器程序,并根据所述目标着色器程序和所述渲染指令序列生成渲染图像。
在上述各实施例的基础上,作为一种可选实施例,目标实体中的每个渲染通道包括序号信息,序号信息用于表征渲染通道在目标实体中所有渲染通道中的顺序。
相应地,指令汇聚模块从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,具体为:
从目标实体中的所有渲染通道中获取渲染指令,根据各渲染通道包括的序号信息,依次将各渲染通道的渲染指令进行聚合,获得渲染指令序列。
在上述各实施例的基础上,作为一种可选实施例,图像渲染装置还包括:
管线创建模块,用于创建至少一个渲染管线,渲染管线包括着色器程序的唯一标识、符号表以及完整的初始渲染状态;设置渲染管线的唯一标识,并对符号表中的符号设置初始符号值;以及
实体创建模块,用于创建实体,在实体中创建与至少一个渲染管线一一对应的渲染通道,分别设置实体以及每个渲染通道的唯一标识。
本公开实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,能够接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;接收渲染请求,渲染请求中包括目标实体的唯一标识,根据渲染请求从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。应当理解的是,电子设备除了能够实现上述流程,同样可以实现本公开上述各实施例或者流程图中的技术方案。与现有技术相比可实现:通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,本公开实现了符号表和初始渲染状态与符号值和渲染状态的解耦,并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立的绘制指令,不会出现渲染状态相互污染的问题,最后通过将所有渲染通道的绘制指令合并成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
在一个可选实施例中提供了一种电子设备,如图6所示,图6所示的电子设备600包括:处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置606存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置606存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容,例如:能够接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;接收渲染请求,渲染请求中包括目标实体的唯一标识,根据渲染请求从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。应当理解的是,电子设备除了能够实现上述流程,同样可以实现本公开上述各实施例或者流程图中的技术方案。与现有技术相比,通过接收渲染更新请求,根据渲染更新请求确定目标实体,将待更新的符号值和渲染状态发送至对应的渲染通道,渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,本公开实现了符号表和初始渲染状态与符号值和渲染状态的解耦,并且渲染通道更新后的渲染状态仍然是完整的渲染状态,每个渲染通道生成的绘制指令都是独立的绘制指令,不会出现渲染状态相互污染的问题,最后通过将所有渲染通道的绘制指令合并成一个渲染指令序列,由于一个实体中的所有渲染指令是通过一个渲染指令序列发送至渲染上下文,渲染上下文在生成渲染图像时仅需要接收一个渲染指令序列,而不需要多次接收渲染指令,因此不需要考虑指令互斥的问题,从而提高渲染指令的下发效率,并且渲染指令序列发送至渲染上下文可以由一个单独的线程完成,充分发挥多核CPU的并行能力。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机程序产品。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码,例如能够接收渲染更新请求,渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;根据目标实体的唯一标识确定目标实体,根据待更新的符号值的信息以及待更新的渲染状态的信息,将待更新的符号值和待更新的渲染状态发送至目标实体中对应的渲染通道;对于目标实体中的每个渲染通道,从与渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的待更新的符号值和待更新的渲染状态生成渲染指令;接收渲染请求,渲染请求中包括目标实体的唯一标识,根据渲染请求从目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将渲染指令序列发送至渲染上下文,以使得渲染上下文根据渲染指令序列生成渲染图像。应当理解的是,电子设备除了能够实现上述流程,同样可以实现本公开上述各实施例或者流程图中的技术方案。
在这样的实施例中,该计算机程序产品可以通过通信装置609从网络上被下载和安装,或者从存储装置606被安装,或者从ROM 602被安装。在该计算机程序产品被处理装置601执行时,执行本公开实施例的图像渲染方法中限定的上述功能。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本公开的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开的保护范围。
Claims (11)
1.一种图像渲染方法,其特征在于,包括:
接收渲染更新请求,所述渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;
根据所述目标实体的唯一标识确定目标实体,根据所述待更新的符号值的信息以及待更新的渲染状态的信息,将所述待更新的符号值和待更新的渲染状态发送至所述目标实体中对应的渲染通道;
对于所述目标实体中的每个渲染通道,从与所述渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的所述待更新的符号值和待更新的渲染状态生成渲染指令;
接收渲染请求,所述渲染请求中包括所述目标实体的唯一标识,根据所述渲染请求从所述目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将所述渲染指令序列发送至渲染上下文,以使得所述渲染上下文根据所述渲染指令序列生成渲染图像。
2.根据权利要求1所述的图像渲染方法,其特征在于,所述待更新的符号值的信息包括待更新的符号值以及所述待更新的符号值所属的渲染通道的唯一标识,所述待更新的渲染状态的信息包括待更新的渲染状态以及所述待更新的渲染状态所属的渲染通道的唯一标识;所述符号表包括至少一个设置初始符号值的符号,所述符号包括至少一个纹理或缓冲。
3.根据权利要求1所述的图像渲染方法,其特征在于,对于所述目标实体中的每个渲染通道,从与所述渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的所述待更新的符号值和待更新的渲染状态生成渲染指令,包括:
对于既没有收到待更新的符号值,也没有收到待更新的渲染状态的渲染通道,所述渲染通道对应的待更新的符号值和待更新的渲染状态均为空值,所述渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,并根据所述符号表和完整的初始渲染状态生成渲染指令;
对于接收到待更新的符号值,没有接收到待更新的渲染状态的渲染通道,所述渲染通道对应的待更新的符号值为所述接收到的待更新的符号值,所述渲染通道对应的待更新的渲染状态为空值,所述渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据所述待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为所述待更新的符号值,获得更新后的符号表,根据更新后的符号表和完整的初始渲染状态生成渲染指令;
对于没有接收到待更新的符号值,接收到待更新的渲染状态的渲染通道,所述渲染通道对应的待更新的符号值为空值,所述渲染通道对应的待更新的渲染状态为所述接收到的待更新的渲染状态,所述渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据所述待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据符号表和完整的、更新后的渲染状态生成渲染指令;
对于既接收到待更新的符号值,也接收到待更新的渲染状态的渲染通道,所述渲染通道对应的待更新的符号值为所述接收到的待更新的符号值,所述渲染通道对应的待更新的渲染状态为所述接收到的待更新的渲染状态,所述渲染通道从对应的渲染管线中获取符号表和完整的初始渲染状态,根据待更新的符号值对符号表中相应的符号进行更新,使得该符号中的初始符号值变更为待更新的符号值,获得更新后的符号表,根据待更新的渲染状态对完整的初始渲染状态进行更新,获得完整的、更新后的渲染状态,根据更新后的符号表和完整的、更新后的渲染状态生成渲染指令。
4.根据权利要求2所述的图像渲染方法,其特征在于,所述符号中还包括所述符号的唯一标识、类型信息、个数信息以及列表,所述列表中包括所述符号的子类型符号以及对应的符号值。
5.根据权利要求1所述的图像渲染方法,其特征在于,所述渲染管线中还包括着色器程序的唯一标识;
所述对于所述目标实体中的每个渲染通道,从与所述渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,包括:对于所述目标实体中的每个渲染通道,从与所述渲染通道对应的渲染管线中获取符号表、着色器程序的唯一标识以及完整的初始渲染状态;
所述将所述渲染指令序列发送至渲染上下文,包括:将所述渲染指令序列以及着色器程序的唯一标识发送至渲染上下文,以使得所述渲染上下文根据所述着色器程序的唯一标识确定目标着色器程序,并根据所述目标着色器程序和所述渲染指令序列生成渲染图像。
6.根据权利要求1所述的图像渲染方法,其特征在于,所述目标实体中的每个渲染通道中还包括序号信息,所述序号信息用于表征所述渲染通道在所述目标实体中所有渲染通道中的顺序;
所述从所述目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,包括:
获取所述目标实体中的所有渲染通道生成的渲染指令,根据各渲染通道包括的序号信息,依次将各渲染通道的渲染指令进行聚合,获得所述渲染指令序列。
7.根据权利要求1-6任意一项所述的图像渲染方法,其特征在于,所述接收渲染更新请求,之前还包括:
创建至少一个渲染管线,所述渲染管线包括着色器程序的唯一标识、符号表以及完整的初始渲染状态;
设置所述渲染管线的唯一标识,并对所述符号表中的符号设置初始符号值;
创建实体,在所述实体中创建与所述至少一个渲染管线一一对应的渲染通道,并分别设置所述实体的唯一标识以及每个渲染通道的唯一标识。
8.一种图像渲染装置,其特征在于,包括:
更新请求接收模块,用于接收渲染更新请求,所述渲染更新请求中包括目标实体的唯一标识、待更新的符号值的信息以及待更新的渲染状态的信息;
符号状态发送模块,用于根据所述目标实体的唯一标识确定目标实体,根据所述待更新的符号值的信息以及待更新的渲染状态的信息,将所述待更新的符号值和待更新的渲染状态发送至所述目标实体中对应的渲染通道;
指令生成模块,用于对于所述目标实体中的每个渲染通道,从与所述渲染通道对应的渲染管线中获取符号表和完整的初始渲染状态,结合对应的所述待更新的符号值和待更新的渲染状态生成渲染指令;
指令汇聚模块,用于接收渲染请求,所述渲染请求中包括所述目标实体的唯一标识,从所述目标实体中的所有渲染通道中获取渲染指令并进行聚合,获得渲染指令序列,将所述渲染指令序列发送至渲染上下文,以使得所述渲染上下文根据所述渲染指令序列生成渲染图像。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述图像渲染方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7中任意一项所述图像渲染方法的步骤。
11.一种计算机程序产品,其特征在于,包括计算机指令,该计算机指令被处理器执行时实现如权利要求1-7任一项所述图像渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127524.7A CN114820897B (zh) | 2021-01-29 | 2021-01-29 | 图像渲染方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127524.7A CN114820897B (zh) | 2021-01-29 | 2021-01-29 | 图像渲染方法、装置、电子设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114820897A CN114820897A (zh) | 2022-07-29 |
CN114820897B true CN114820897B (zh) | 2024-07-02 |
Family
ID=82526363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110127524.7A Active CN114820897B (zh) | 2021-01-29 | 2021-01-29 | 图像渲染方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114820897B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111408138A (zh) * | 2019-01-04 | 2020-07-14 | 厦门雅基软件有限公司 | 基于游戏引擎的渲染方法、装置及电子设备 |
US10818071B1 (en) * | 2019-07-26 | 2020-10-27 | Google Llc | Image-based geometric fusion of multiple depth images using ray casting |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070120865A1 (en) * | 2005-11-29 | 2007-05-31 | Ng Kam L | Applying rendering context in a multi-threaded environment |
CN111861854A (zh) * | 2019-04-30 | 2020-10-30 | 华为技术有限公司 | 用于图形渲染的方法及装置 |
CN111586489A (zh) * | 2020-06-22 | 2020-08-25 | 腾讯科技(深圳)有限公司 | 弹幕渲染方法、装置、计算机设备及存储介质 |
-
2021
- 2021-01-29 CN CN202110127524.7A patent/CN114820897B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111408138A (zh) * | 2019-01-04 | 2020-07-14 | 厦门雅基软件有限公司 | 基于游戏引擎的渲染方法、装置及电子设备 |
US10818071B1 (en) * | 2019-07-26 | 2020-10-27 | Google Llc | Image-based geometric fusion of multiple depth images using ray casting |
Also Published As
Publication number | Publication date |
---|---|
CN114820897A (zh) | 2022-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10115230B2 (en) | Run-time optimized shader programs | |
US9582848B2 (en) | Sprite Graphics rendering system | |
CN112381918A (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
US8310484B2 (en) | Efficient processing of operator graphs representing three-dimensional character animation | |
US9495722B2 (en) | Developer controlled layout | |
DE102012106830A1 (de) | Datenverarbeitungssystem und Verfahren zum Schalten zwischen heterogenen Beschleunigern | |
US20210343072A1 (en) | Shader binding management in ray tracing | |
DE112011101725T5 (de) | Sub-Puffer-Objekte | |
US11094036B2 (en) | Task execution on a graphics processor using indirect argument buffers | |
CN106462393A (zh) | 用于统一应用编程接口和模型的系统和方法 | |
US11403802B2 (en) | Methods and systems for optimal transport of non-linear transformations | |
US20140022264A1 (en) | Graphics processing unit and method for performing tessellation operations | |
KR20210002753A (ko) | 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술 | |
CN115699072A (zh) | 用于工作负载处理的任务图调度 | |
CN109634611B (zh) | 基于OpenGL的移动端三维模型ply文件解析与展示方法 | |
CN114820897B (zh) | 图像渲染方法、装置、电子设备及计算机可读存储介质 | |
JP2011138494A (ja) | 仮想タスクを使用したマルチコアプロセッサの性能解析のための関係モデル化 | |
US10049487B2 (en) | Identifying duplicate indices in an input index stream | |
CN115049532A (zh) | 图形处理器、纹理坐标采样方法、编译方法及装置、介质 | |
CN110930499B (zh) | 一种3d数据处理方法及装置 | |
CN113487747B (zh) | 一种模型处理方法、装置、终端及存储介质 | |
CN114661301B (zh) | 图形处理单元编译方法、装置、编译加速库和存储介质 | |
CN113436325B (zh) | 一种图像处理方法、装置、电子设备及存储介质 | |
Krasnoproshin et al. | A New Approach to Building a Graphics Pipeline for Rendering | |
CN116185197A (zh) | 用于编辑虚拟对象的方法、装置、设备和存储介质 |
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 |