CN111796867B - 着色器的转换方法、装置及电子设备 - Google Patents
着色器的转换方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111796867B CN111796867B CN201910625826.XA CN201910625826A CN111796867B CN 111796867 B CN111796867 B CN 111796867B CN 201910625826 A CN201910625826 A CN 201910625826A CN 111796867 B CN111796867 B CN 111796867B
- Authority
- CN
- China
- Prior art keywords
- language
- shader
- coloring
- written
- variable
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Image Generation (AREA)
Abstract
本申请实施例提供了一种着色器的转换方法、装置及电子设备。该方法包括:获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息;基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行。本申请实施例解决了相关技术中因对第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在适配目标运行平台的目的,降低了目标运行平台中对着色器的研发成本和维护成本。
Description
技术领域
本申请涉及着色器的转换技术领域,具体而言,本申请涉及一种着色器的转换方法、装置及电子设备。
背景技术
OpenGL ES则是一种典型的跨平台high-level API(Application ProgrammingInterface),这意味着开发者只需稍做修改,就可以使OpenGL ES的程序运行在不同的平台,如Android。MSL(英文名称:Metal Shading Language)是在WWDC 2014上,提出的用C++编写的low-level API(Application Programming Interface),是根据Apple最新硬件架构专门设计的能够提高对3D图形渲染性能的API,但并非是跨平台的。由于,OpenGL ES遵守的是GLSL ES(OpenGL ES Shading Language)规范,Metal使用的着色器编程语言遵守MSL(Metal Shading Language)规范,因此,为了适配Metal,需要重新编写渲染逻辑,重写着色器,并维护不同平台下的着色器shader,因此,存在开发成本高,维护负担大的问题。
发明内容
本申请提供了一种着色器的转换方法、装置、电子设备及计算机可读存储介质,可以解决上述技术问题。所述技术方案如下:
第一方面,提供了一种着色器的转换方法,该方法包括:
获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;
确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的所述第一关键信息,转换为基于第二着色语言编写的第二关键信息;
基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行。
第二方面,提供了一种着色器的转换装置,该装置包括:
着色器获取模块,用于获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;
关键信息处理模块,用于确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的所述第一关键信息,转换为基于第二着色语言编写的第二关键信息;
着色器转换模块,用于基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行。
第三方面,提供了一种电子设备,该电子设备包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行上述着色器的转换方法。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述着色器的转换方法。
本申请实施例提供的技术方案带来的有益效果是:获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言,确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息,以基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行,这种通过将第一着色器中第一关键信息处理为基于第二着色语言编写的第二关键信息的方式,解决了相关技术中因对第一着色语言中第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在目标运行平台的目的,降低了将着色器跨平台运行在目标运行平台的研发成本和维护成本。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种着色器的转换方法的流程示意图;
图2为本申请实施例提供的优化器的流程示意图;
图3为本申请实施例提供的一种着色器的转换装置的结构示意图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
实施例一
本申请实施例提供了一种着色器的转换方法,如图1所示,该方法包括:步骤S101、步骤S102和步骤S103。
步骤S101、获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言。
本申请实施例中,目标运行平台是指运行着色器的平台,例如安卓平台,安卓平台支持OpenGL ES(英文名称:Open Graphics Library for Embedded Systems)编写的着色器,如采用GLSL ES 2.0着色语言编写的着色器。具体地,第二着色语言用于表征对第一着色器进行转换之后,得到的着色器所遵守的着色语言规范。
例如,可以将第一着色语言设置为GLSL ES着色语言,第二着色语言设置为MSL(Metal Shading Language)着色语言,实现将符合OpenGL ES语法规范的着色器转换为符合MSL语法规范的着色器。
步骤S102、确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息。
本申请实施例中,第一关键信息用于表征将第一着色语言编写的第一着色器转换为第二着色语言编写的第二着色器过程中,容易发生异常的信息,例如,将OpenGL ES着色语言编写的第一着色器向MSL着色语言编写的第二着色器转换过程中,容易出现异常的信息。
本申请实施例通过第一关键信息向第二关键信息转换,实现了将第一着色语言编写的第一关键信息转换为基于第二着色语言编写的第二关键信息的目的,解决了现有技术中第一着色器向第二着色器中转换过程中,因第一关键信息转换失败或转换错误,导致的无法转换或者转换得到的第二着色器无法运行的问题。
步骤S103、基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行。
本申请实施例,获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言,确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息,以基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行,这种通过将第一着色器中第一关键信息处理为基于第二着色语言编写的第二关键信息的方式,解决了相关技术中因对第一着色语言中第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在目标运行平台的目的,降低了将着色器跨平台运行在目标运行平台的研发成本和维护成本。
本申请实施例中,第一着色语言为GLSL ES着色语言,第二着色语言为MSL着色语言,
本申请实施例中,第一关键信息包括以下至少一项:
预定类型变量;
全局自定义函数;
全局常量。
具体应用时,可以通过关键词对第一着色器,如符合OpenGL ES语法规范的着色器,进行检索,确定第一着色器对应的各项第一关键信息。具体地,符合OpenGL ES语法规范的着色器一般采用GLSL ES着色语言编写,如GLSL ES3.0、GLSL ES2.0。具体应用时,预定类型变量可以为uniform变量、attribute变量等。具体应用时,uniform变量既可以在顶点着色器中声明,也可以在片段着色器中声明,uniform变量一般用于表征变换矩阵、材质、光照参数、颜色等信息;attribute变量一般用于表征顶点着色器中顶点坐标,法线,纹理坐标,顶点颜色等信息。
在一个实现方式中,步骤S102将基于第一着色语言编写的第一着色器的第一关键信息,转换为基于第二着色语言编写的第二关键信息,包括以下至少一项:
基于预配置的第一着色语言与第二着色语言对应的转换关系,将基于第一着色语言编写的预定类型变量存储至基于第二着色语言编写的结构体变量;
基于预配置的第一着色语言与第二着色语言对应的转换关系,将第一着色语言编写的全局常量对应的关键词,替换为第二着色语言编写的全局常量对应的关键词;
将预定义的基于第二着色语言编写的至少两类形参,写入第一着色语言编写的全局自定义函数。
具体应用时,假设第一着色语言为OpenGL ES着色语言,第二着色语言为MSL着色语言,对第一着色器进行解析,解析到关键字uniform,则利用MSL着色语言的语法规范中结构体变量structure对uniform变量进行存储,即解析到uniform变量,则读取该变量并执行写操作,写入structure,以实现将多个uniform变量均存储至structure的目的。
具体应用时,假设第一着色语言为OpenGL ES着色语言,OpenGL ES语法规范中针对全局常量的关键词为const,那么转换过程中,将关键词const替换为关键词constant(即MSL语法规范的修饰符),通过关键词替换,防止将第一着色器转换为第二着色器的过程中,出现的异常或者转换失败的问题。
具体应用中,若OpenGL ES着色语言编写的第一着色器中定义有全局自定义函数,且若该全局自定义函数使用的是诸如uniform变量或attribute变量等全局变量时,将该第一着色器转换为基于MSL着色语言编写的第二着色器之后,将会使该全局自定义函数使用的全局变量转换为局部变量,从而导致无法完成第二着色器的转换或者转换的第二着色器无法运行的问题,为了解决这个问题,本申请实施例通过在该全局自定义函数中写入预定义的基于第二着色语言编写的至少两类形参,如针对uniform变量的形参和针对attribute变量的形参,来保证转换之后,使第二着色器中该全局自定义函数能够通过该至少两类形参调用全局变量,即存储在结构体变量的成员变量(即预定类型变量)。
具体地应用时,一般将uniform变量存储至一个结构体变量,attribute变量存储至另一个结构体变量,因此,本申请实施例通过在全局自定义函数中写入两个类型的形参,从而确保将第一着色器中全局自定义函数(即第一关键信息)转换为第二着色器之后,能够调用针对uniform变量的结构体变量和针对attribute变量的结构体变量。
在又一个实现方式中,将基于第一着色语言编写的预定类型变量存储至基于第二着色语言编写的结构体变量,包括:
确定结构体变量的结构体成员变量大小;
若多个预定类型变量均为同一预定类型变量,则基于结构体成员变量大小,确定多个预定类型变量分别对应的对齐偏移量,并依据多个预定类型变量分别对应的对齐偏移量将基于第一着色语言编写的预定类型变量存储至基于第二着色语言编写的结构体变量。
本申请实施例提供不同结构体变量存储不同类型的变量,例如,将uniform变量存储至一个结构体变量,将attribute变量存储至另一个结构体变量,起到分类存储第一着色器中不同类型变量的目的,以在后期渲染过程中,依据存储attribute变量的结构体变量中的成员变量(即attribute变量)来进行调用;或依据存储uniform变量的结构体变量中的成员变量(即uniform变量)来进行调用。
具体应用时,结构体成员变量大小既可以是预定义的;也可以是实时计算的,即通过比较多个预定类型变量分别对应的字节大小,并将最大的字节作为结构体成员变量大小。
具体应用时,由于第一着色器中同一类预定类型变量的数据类型不同,如uniform变量,各uniform变量对应的对齐偏移量的字节就不是固定的。各uniform变量对应的对齐偏移量是依据结构体变量中上一个uniform成员的位置,以及当前需要对齐的unifrom变量的对齐字节进行计算得来的,即[上一个uniform变量的location+(当前uniform变量的alignment-1)]&[~(当前uniform变量的alignment-1)],这里上一个uniform变量的location表示uniform变量的偏移地址,(当前uniform变量的alignment-1)表示当前uniform变量的对齐字节。假如uniform1为三维向量vec3(12字节),uniform2为四维向量vec4(16字节),uniform1为结构体变量中的第一个成员变量,uniform2为结构体变量中的第二个成员变量,在MSL着色语言对应的语法规范中,三维向量是按四维向量对齐的,即对于vec3,是按16字节对齐。因此在uniform1的末尾补0,从而保证uniform1达到16字节。uniform2的起始位置计算如下:[16+(16-1)]&[~(16-1)]=16。针对偏移地址,例如,uniform1的location=0,表示它是从零开始的往后连续16个字节的数据,uniform2的location=16(通过16+(16-1))&~(16-1)计算出来的),表示它是从第16个字节开始的往后连续16个字节的数据,用于表示unifrom2。
在又一个实现方式中,步骤S101中确定目标运行平台对应的第二着色语言,包括:
基于预配置的多种运行平台分别对应的至少一种着色语言,确定目标运行平台对应的第二着色语言。
本申请实施例中,一般设置适配两种平台分别对应的着色语言,如GLSL ES和MSL,具体应用时,可以通过预设的交互界面以供用户进行选择,以根据用户在该交互界面的选择操作,来确定目标运行平台对应的第二着色语言。例如,若用户选定MSL,那么确定将OpenGL ES(即第一着色语言)编写的第一着色器转换为MSL着色语言编写的第二着色器。具体应用时,若用户选定GLSL ES,即确定目标运行平台对应的第二着色语言为GLSL ES着色语言,那么基于预设的优化程序对第一着色器(即符合OpenGL ES语法规范的着色器)进行优化处理,以简化第一着色器对应的代码,例如,将定义在第一着色器中的变量,但顶点着色器或片段着色器中并未使用的变量删除,起到过滤无效代码的作用。
实施例二
下面以应用本申请提供的着色器的转换方法的优化器(即glsl-optimizer)为例进行进一步说明,如图2所示为该优化器的处理流程,利用该优化器,既可以将基于OpenGLES着色器文件(即采用OpenGL ES着色语言编写的着色器文件)进行优化,简化OpenGL ES着色器文件中代码,例如将定义在OpenGL ES着色器文件中,但并未使用到的变量删除,最终处理为GLSL ES(即为OpenGL ES采用的着色语言)着色器文件;也可以将OpenGL ES着色器文件转换为可以运行在MSL平台的MSL着色器文件。
利用优化器glsl-optimizer将符合OpenGL ES语法规范的着色器文件转化为MSL着色器文件的具体过程如下:
首先,启动优化器glsl-optimizer,并加载待优化处理的着色器文件,该着色器文件可以是采用GLSL ES2.0版本的着色语言编写的着色器文件;
其次,确定对该着色器文件进行转换的第二着色语言为MSL(即Metal ShadingLanguage),即确定目标运行平台对应的着色语言为MSL;
接着,解析该着色器文件,若解析到关键词uniform,则读取uniform变量,并利用结构体变量structure1进行存储;若解析到关键词attribute,则读取attribute变量,并利用结构体变量structure2进行存储。具体应用时,可以在解析到关键词uniform或关键词attribute时,创建结构体变量,也可以预先创建。假设结构体成员变量大小为预定义的,存储时,需要确定待存储的变量的大小,例如,若uniform1变量类型为vec3,其大小为12字节,uniform2变量类型为vec4,其大小为16字节,uniform1和uniform2按照预定义结构体成员变量16字节对齐,那么在结构体变量中在uniform1和uniform2之间插入填充字节(一般插入在填充字节为“0”),通过插入填充字节的操作,能够快速确定结构体变量中各个uniform变量进行快速读取。例如,结构体变量中第1个成员变量(即uniform1)为从第0字节至第15个字节,结构体变量中第2个成员变量(即uniform2)为从第16个字节至第31字节;
若解析到const(即GLSL ES2.0着色语言编写的全局常量对应的关键词),则利用constant(MSL着色语言编写的全局常量对应的关键词)进行替换;
若解析到全局自定义函数,则在该全局自定义函数中写入引用uniform变量的形参和引用attribute变量的形参;
最后,基于以上步骤完成转换,完成OpenGL ES着色器文件至MSL着色器文件的转换,以降低将OpenGL ES着色器文件跨平台在MSL平台运行的成本及维护成本。
实施例三
本申请实施例提供了一种着色器的转换装置,如图3所示,该着色器的转换装置30可以包括:着色器获取模块301、关键信息处理模块302以及着色器转换模块303,其中,
着色器获取模块301,用于获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;
关键信息处理模块302,用于确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息;
着色器转换模块303,用于基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行。
本申请实施例,获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言,确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息,以基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行,这种通过将第一着色器中第一关键信息处理为基于第二着色语言编写的第二关键信息的方式,解决了相关技术中因对第一着色语言中第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在目标运行平台的目的,降低了将着色器跨平台运行在目标运行平台的研发成本和维护成本。
进一步地,第一关键信息包括以下至少一项:
预定类型变量;
全局自定义函数;
全局常量。
进一步地,关键信息处理模块包括以下至少一项:
基于预配置的第一着色语言与第二着色语言对应的转换关系,将基于第一着色语言编写的预定类型变量存储至基于第二着色语言编写的结构体变量;
基于预配置的第一着色语言与第二着色语言对应的转换关系,将第一着色语言编写的全局常量对应的关键词,替换为第二着色语言编写的全局常量对应的关键词;
将预定义的基于第二着色语言编写的至少两类形参,写入第一着色语言编写的全局自定义函数。
进一步地,关键信息处理模块用于:
确定结构体变量的结构体成员变量大小;
若多个预定类型变量均为同一预定类型变量,则基于结构体成员变量大小,确定多个预定类型变量分别对应的对齐偏移量,并依据多个预定类型变量分别对应的对齐偏移量将基于第一着色语言编写的预定类型变量存储至基于第二着色语言编写的结构体变量。
进一步地,关键信息处理模块用于:
基于预配置多种运行平台分别对应的至少一种着色语言,确定目标运行平台对应的第二着色语言。
进一步地,第一着色语言为GLSL ES着色语言,第二着色语言为MSL着色语言。
本实施例的着色器的转换装置可执行本申请实施例一提供的着色器的转换方法,其实现原理相类似,此处不再赘述。
实施例四
本申请实施例提供了一种电子设备,如图4所示,图4所示的电子设备400包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。进一步地,电子设备400还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备400的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI总线或EISA总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现图3所示实施例提供的着色器的转换装置的动作。
本申请实施例提供的电子设备,获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言,确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息,以基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行,这种通过将第一着色器中第一关键信息处理为基于第二着色语言编写的第二关键信息的方式,解决了相关技术中因对第一着色语言中第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在目标运行平台的目的,降低了将着色器跨平台运行在目标运行平台的研发成本和维护成本。
实施例五
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现实施例一所示的方法。
本申请实施例提供了一种计算机可读存储介质,与现有技术相比,获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言,确定第一着色器对应的第一关键信息,并将基于第一着色语言编写的第一关键信息,转换为基于第二着色语言编写的第二关键信息,以基于第二关键信息,将第一着色器转换为第二着色器,第二着色器是基于第二着色语言编写的,以使得第二着色器在目标运行平台上运行,这种通过将第一着色器中第一关键信息处理为基于第二着色语言编写的第二关键信息的方式,解决了相关技术中因对第一着色语言中第一关键信息的转换机制不合理而导致的转换异常或转换失败问题,实现了将第一着色语言编写的第一着色器跨平台运行在目标运行平台的目的,降低了将着色器跨平台运行在目标运行平台的研发成本和维护成本。
本申请实施例提供了一种计算机可读存储介质适用于上述方法实施例。在此不再赘述。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (11)
1.一种着色器的转换方法,其特征在于,包括:
获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;
确定所述第一着色器对应的第一关键信息,并将基于所述第一着色语言编写的所述第一关键信息,转换为基于所述第二着色语言编写的第二关键信息;
基于所述第二关键信息,将所述第一着色器转换为第二着色器,所述第二着色器是基于所述第二着色语言编写的,以使得所述第二着色器在所述目标运行平台上运行;
其中,所述将基于所述第一着色语言编写的所述第一关键信息,转换为基于所述第二着色语言编写的第二关键信息,包括以下至少一项:
基于预配置的所述第一着色语言与所述第二着色语言对应的转换关系,将基于所述第一着色语言编写的预定类型变量存储至基于所述第二着色语言编写的结构体变量;
基于预配置的所述第一着色语言与所述第二着色语言对应的转换关系,将所述第一着色语言编写的全局常量对应的关键词,替换为所述第二着色语言编写的全局常量对应的关键词;
将预定义的基于所述第二着色语言编写的至少两类形参,写入所述第一着色语言编写的全局自定义函数。
2.根据权利要求1所述的方法,其特征在于,所述第一关键信息包括以下至少一项:
预定类型变量;
全局自定义函数;
全局常量。
3.根据权利要求1所述的方法,其特征在于,
所述将预定义的基于所述第二着色语言编写的至少两类形参,写入所述第一着色语言编写的全局自定义函数,包括:在所述第一着色语言编写的全局自定义函数中写入针对uniform变量的形参和针对attribute变量的形参;以使所述第一着色器转换为所述第二着色器之后,所述第二着色器中的全局自定义函数通过所述至少两类形参调用全局变量。
4.根据权利要求3所述的方法,其特征在于,所述在所述第一着色语言编写的全局自定义函数中写入针对uniform变量的形参和针对attribute变量的形参,包括:将所述uniform变量存储至一个结构体变量,将所述attribute变量存储至另一个结构体变量。
5.根据权利要求1所述的方法,其特征在于,所述将基于所述第一着色语言编写的所述预定类型变量存储至基于所述第二着色语言编写的结构体变量,包括:
确定所述结构体变量的结构体成员变量大小;
若多个预定类型变量均为同一预定类型变量,则基于所述结构体成员变量大小,确定多个预定类型变量分别对应的对齐偏移量,并依据多个预定类型变量分别对应的对齐偏移量将基于所述第一着色语言编写的所述预定类型变量存储至基于第二着色语言编写的所述结构体变量。
6.根据权利要求1所述的方法,其特征在于,所述确定目标运行平台对应的第二着色语言,包括:
基于预配置的多种运行平台分别对应的至少一种着色语言,确定目标运行平台对应的第二着色语言。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述第一着色语言为GLSL ES着色语言,所述第二着色语言为MSL着色语言。
8.一种着色器的转换装置,其特征在于,包括:
着色器获取模块,用于获取基于第一着色语言编写的第一着色器,确定目标运行平台对应的第二着色语言;
关键信息处理模块,用于确定所述第一着色器对应的第一关键信息,并将基于所述第一着色语言编写的所述第一关键信息,转换为基于所述第二着色语言编写的第二关键信息;
着色器转换模块,用于基于所述第二关键信息,将所述第一着色器转换为第二着色器,所述第二着色器是基于所述第二着色语言编写的,以使得所述第二着色器在所述目标运行平台上运行;
其中,所述将基于所述第一着色语言编写的所述第一关键信息,转换为基于所述第二着色语言编写的第二关键信息,包括以下至少一项:
基于预配置的所述第一着色语言与所述第二着色语言对应的转换关系,将基于所述第一着色语言编写的预定类型变量存储至基于所述第二着色语言编写的结构体变量;
基于预配置的所述第一着色语言与所述第二着色语言对应的转换关系,将所述第一着色语言编写的全局常量对应的关键词,替换为所述第二着色语言编写的全局常量对应的关键词;
将预定义的基于所述第二着色语言编写的至少两类形参,写入所述第一着色语言编写的全局自定义函数。
9.根据权利要求8所述的装置,其特征在于,所述着色器获取模块用于:
基于预配置多种运行平台分别对应的至少一种着色语言,确定目标运行平台对应的第二着色语言。
10.一种电子设备,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据权利要求1-7任一项所述的着色器的转换方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7任一项所述的着色器的转换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910625826.XA CN111796867B (zh) | 2019-07-11 | 2019-07-11 | 着色器的转换方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910625826.XA CN111796867B (zh) | 2019-07-11 | 2019-07-11 | 着色器的转换方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111796867A CN111796867A (zh) | 2020-10-20 |
CN111796867B true CN111796867B (zh) | 2022-11-08 |
Family
ID=72805383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910625826.XA Active CN111796867B (zh) | 2019-07-11 | 2019-07-11 | 着色器的转换方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796867B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112612459B (zh) * | 2020-12-28 | 2024-03-22 | 广州引力波信息科技有限公司 | 一种跨平台着色器语言配置方法 |
CN114356289A (zh) * | 2021-12-28 | 2022-04-15 | 深圳市趣推科技有限公司 | 一种基于多平台的着色器使用方法和相关设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7746347B1 (en) * | 2004-07-02 | 2010-06-29 | Nvidia Corporation | Methods and systems for processing a geometry shader program developed in a high-level shading language |
CN106997610A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种图像渲染方法、装置及电子设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011106672A1 (en) * | 2010-02-26 | 2011-09-01 | Sensable Technologies, Inc. | Systems and methods for creating near real-time embossed meshes |
CN105335141B (zh) * | 2014-07-25 | 2018-08-07 | 龙芯中科技术有限公司 | 图形处理方法及装置 |
CN108874396A (zh) * | 2018-05-31 | 2018-11-23 | 苏州蜗牛数字科技股份有限公司 | 基于hlsl的多平台多目标语言的交叉编译器及编译方法 |
-
2019
- 2019-07-11 CN CN201910625826.XA patent/CN111796867B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7746347B1 (en) * | 2004-07-02 | 2010-06-29 | Nvidia Corporation | Methods and systems for processing a geometry shader program developed in a high-level shading language |
CN106997610A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种图像渲染方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111796867A (zh) | 2020-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10853905B2 (en) | Instruction execution in graphics processor shader programs | |
CN106415492B (zh) | 用于图形处理器单元上的图形和非图形计算的语言、函数库和编译器 | |
US9189881B2 (en) | Graphics processing | |
RU2459260C2 (ru) | Текстурная дискретизация | |
US9256466B2 (en) | Data processing systems | |
US9818218B2 (en) | Graphics processing | |
GB2504587A (en) | Associating meta-information with vertex shader attributes | |
CN111813380B (zh) | 基于游戏引擎的着色数据处理方法、装置及电子设备 | |
CN111796867B (zh) | 着色器的转换方法、装置及电子设备 | |
US5822591A (en) | Virtual code system | |
US11029924B2 (en) | Program optimization by converting code portions to directly reference internal data representations | |
CN107038060B (zh) | 一种页面着色器代码调试方法、装置 | |
US10657698B2 (en) | Texture value patch used in GPU-executed program sequence cross-compilation | |
CN111833429A (zh) | 三维游戏渲染方法、三维引擎、电子设备及可读存储介质 | |
US10861124B2 (en) | Methods and systems for generating shaders to emulate a fixed-function graphics pipeline | |
US8935657B2 (en) | Model-to-model transformation by kind | |
CN104063329A (zh) | 64位立即数处理方法及装置 | |
Kosarevsky et al. | 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan | |
US9123151B2 (en) | Exchanging data between vertex shaders and fragment shaders on a graphics processing unit | |
CN111142848B (zh) | 一种软件程序编译方法、执行方法及装置 | |
EP3997593B1 (en) | A streaming compiler for automatic adjoint differentiation | |
US8683454B1 (en) | Reducing redundancy in source code | |
US10310856B2 (en) | Disabling thread execution when executing instructions in a data processing system | |
CN117289913B (zh) | 编译器源文件处理方法、电子设备和介质 | |
CN114077433B (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 | ||
GR01 | Patent grant |