CN105446704B - 一种着色器的解析方法和装置 - Google Patents
一种着色器的解析方法和装置 Download PDFInfo
- Publication number
- CN105446704B CN105446704B CN201410256093.4A CN201410256093A CN105446704B CN 105446704 B CN105446704 B CN 105446704B CN 201410256093 A CN201410256093 A CN 201410256093A CN 105446704 B CN105446704 B CN 105446704B
- Authority
- CN
- China
- Prior art keywords
- tinter
- index information
- macro
- target platform
- platform
- 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
Landscapes
- Image Generation (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种着色器的解析方法和装置。所述方法包括:针对适用于多个平台的着色器源代码,根据设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;根据目标平台的配置文件确定所述目标平台的着色器包含的各个宏;根据适用于多个平台的第一索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;所述目标平台解析所述第二索引信息,生成所述目标平台下可编译的着色器,并根据所述着色器进行场景渲染。本发明可以使一种着色器源代码能在多个平台运行,减少对计算机资源的消耗。
Description
技术领域
本发明涉及计算机图形学领域,特别是涉及一种着色器的解析方法,以及,一种着色器的解析装置。
背景技术
Shader(着色器)是用来实现图像渲染的用来替代固定渲染管线的可编辑程序。在现有的虚拟场景中,着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制,极大的提高了图像的画质。
在具体的应用中,每个平台的着色器系统都有对应的语法、语意以及算法,由于不同的语法、语意、算法在不同的平台之间无法识别,因而不同平台的着色器系统并不能在不同平台使用,例如Window平台、主机平台、手游平台都分别有不同的算法,Window平台的着色器系统不能在主机平台和手游平台使用。
因此,开发人员需要针对不同的系统编写相应的着色器源代码,不仅增加了开发人员的工作量,还会占用较大的存储空间,为此,需要提供一种着色器解析的解析方法,使一种着色器源代码能在多个平台运行,减少对计算机资源的消耗。
发明内容
本发明提供了一种着色器的解析方法和装置,使一种着色器源代码能在多个平台运行,减少对计算机资源的消耗。
本发明提供了一种着色器的解析方法,包括:
针对适用于多个平台的着色器源代码,根据设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;
根据目标平台的配置文件确定所述目标平台的着色器包含的各个宏;
根据适用于多个平台的第一索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;
所述目标平台解析所述第二索引信息,生成所述目标平台下可编译的着色器,并根据所述着色器进行场景渲染。
优选地,所述根据目标平台的配置文件确定目标平台下着色器包含的各个宏包括:
初始化预置的静态宏定义,并提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了所述静态宏与宏标记的映射关系,所述动态宏定义定义了所述动态宏与宏标记的映射关系;
组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
优选地,所述根据适用于多个平台的第二索引信息以及目标平台下着色器包含的各个宏,生成适用于目标平台的着色器的第二索引信息包括:
查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
优选地,所述根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于目标平台的着色器的第二索引信息包括:
根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
优选地,在所述生成适用于目标平台的着色器的第二索引信息之前,所述方法还包括:
根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下所述第二索引信息的名称。
优选地,在所述生成适用于目标平台的着色器的第二索引信息之前,所述方法还包括:
根据所述第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
优选地,在生成适用于多个平台的着色器的第一索引信息之前,所述方法还包括:
根据所述第一索引信息的名称,查找已生成的适用于多个平台的着色器的第一索引信息,并确定不存在所述第一索引信息。
优选地,所述解析着色器对应的第二索引信息,生成目标平台下可编译的着色器包括:
解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
本发明还提供了一种着色器的解析装置,包括:
第一索引信息生成模块,用于针对适用于多个平台的着色器源代码,根据预先设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;
宏确定模块,用于根据目标平台的配置文件确定所述目标平台的着色器包含的各个宏;
第二索引信息生成模块,用于根据适用于多个平台的第二索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;
索引解析模块,用于所述目标平台解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器;
渲染模块,用于根据所述着色器进行场景渲染。
优选地,所述宏确定模块包括:
静态宏定义初始化子模块,用于初始化预置的静态宏定义;
动态宏定义提取模块,用于提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了所述静态宏与宏标记的映射关系,所述动态宏定义定义了所述动态宏与宏标记的映射关系;
宏提取子模块,用于组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
优选地,所述第二索引信息生成模块包括:
索引信息查找子模块,用于查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
索引信息组织子模块,用于根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
优选地,所述索引信息组织子模块包括:
第一生成子单元,用于根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
第二生成子单元,用于根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
优选地,所述装置还包括:
名称组织模块,用于根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下所述第二索引信息的名称。
优选地,所述装置还包括:
第二索引信息查找模块,用于根据所述第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
优选地,所述装置还包括:
第一索引信息查找子模块,用于根据所述第一索引信息的名称,查找已生成的适用于多个平台的着色器的第一索引信息,并确定不存在所述第一索引信息。
优选地,所述索引解析模块包括:
源代码生成子模块,用于解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
汇编子模块,用于对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
与背景技术相比,本发明包括以下优点:
依据本发明实施例,预置适用于多个平台的着色器源代码,根据设置的宏、宏标记和索引信息,生成适用于多个平台的着色器的索引信息,然后进一步根据配置文件中目标平台下包含的各个宏,生成适用于目标平台的着色器的第二索引信息,目标平台根据索引信息可以解析出适用于该平台的着色器,因此,本发明实施例提供的着色器解析方法可以使一种着色器源代码在多个平台上运行,无需针对各个平台编写相应的着色器源代码,减少对计算机资源的消耗,并减少开发人员的工作量。
并且,由于本发明实施例采用索引信息组织各个着色器,在数据处理的过程中,数据量非常小,在编译着色器之前就解析得到适用于目标平台的代码,不需要编译器进行额外的解析处理,非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
附图说明
图1是本发明实施例1所述一种着色器的解析方法的流程图;
图2是本发明实施例2所述一种着色器的解析方法的流程图;
图3是本发明实施例中一个示例的着色器的解析方法的示意图;
图4是本发明实施例中另一个示例的着色器的解析方法的示意图;
图5是本发明实施例1所述一种着色器的解析装置的结构框图;
图6是本发明实施例2所述一种着色器的解析装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
下面通过实施例对本发明所述方法的实现流程进行详细说明。
参照图1,其示出了本发明实施例1所述一种着色器的解析方法流程图。
步骤101、对适用于多个平台的着色器源代码,根据设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息。
本发明实施例中,着色器是用于场景渲染的可编辑程序,其包含的多个代码段分别用宏进行标记,从而使着色器可以表示为多个宏的组合。例如,采用字符串格式的宏标记各段代码段,则着色器表示为多个字符串的组合。
根据所标记的代码的功能不同,宏可以分为多种,例如,实时宏标记RTMask,全局宏标记GLMask(nMaskGen),光源宏标记LightMask,纹理宏标记MDMask,顶点格式定义宏标记MDVMask。
本发明实施例采用宏标记对宏进行标记,可以采用宏定义来定义宏标记与宏之间的映射关系,并进一步使用索引信息(Token)来标记宏标记,索引信息可以为uint32格式,即32位无符号整数,如此,实际上着色器的每个代码段都会与一个索引信息进行一一对应,将所有的索引信息组织起来就得到第一索引信息,可以记为shaderbin chache文件,可以采用unit32的数据格式,因此,Shaderbin Cache是把代码字符串通过索引表转换成索引信息的文件,保存Shaderbin信息的一个文件缓存。
例如,对着色器反射效果的代码段标记的宏为MIRROR,对应的宏标记可以为0x2000,对0x2000可以进一步标记的索引信息为Mask,还可以对MIRROR进一步标记的索引信息为Name,宏定义可以表示为Name=MIRROR,Mask=0x2000。
由于本发明实施例采用索引信息组织着色器,在数据处理的过程中,数据量非常小,非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
着色器在目标平台进行渲染之前,可以选择着色器的渲染效果,例如实时水反射效果,相应的,在材质编辑器给水的材质打上MIRROR的标记,将材质和宏标记关联起来,并进入场景gamestar,使场景的水拥有自定义的实时反射效果。
由于针对着色器设置了渲染效果,因此,着色器对应的第一索引信息不仅包括着色器源代码对应的宏的宏标记的索引信息,还包括渲染效果所包含的宏对应的索引信息,例如,反射效果MIRROR对应的索引信息为Name。
步骤102、根据目标平台的配置文件确定所述目标平台的着色器包含的各个宏。
不同的平台的算法、语义和语法可能不同,本发明实施例中通过针对不同平台的着色器定义不同的宏,并记录在平台的配置文件中,这些宏会最终反映到着色器源码里面。
具体而言,所述根据目标平台的配置文件确定目标平台的着色器包含的各个宏可以包括:
子步骤S11、初始化预置的静态宏定义,并提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了所述静态宏与宏标记的映射关系,所述动态宏定义定义了所述动态宏与宏标记的映射关系;
子步骤S12、组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
宏定义定义了宏与宏标记的映射关系,在本发明实施例中,宏包括动态宏和静态宏,动态宏和引擎中的实时效果相关,是引擎根据当前需要表现的效果生成的,在游戏运行过程中传入的宏标记(nMaskGen)生成,可以从可以从配置文件中读取,也可以在游戏运行过程中实时修改,多个宏标记的组合可以用uint64数据表示,静态宏是跨平台已经不需要修改的全局宏,例如,适用于DX9(Windows平台渲染器)、DX11(Windows平台渲染器)、PS3(主机平台)等平台。
相应的,宏定义包括静态宏定义和动态宏定义,动态宏定义定义了动态宏与宏标记的映射关系,静态宏定义定义了静态宏与宏标记的映射关系。
本发明实施例中,需要列出目标平台包含的所有的宏,然后根据所有的宏进一步组织着色器对应的索引信息。
通过初始化预置的静态宏定义可以获取静态宏,通过配置信息中包含的动态宏定义可以获取动态宏,所有的静态宏和动态宏组成了目标平台下着色器包含的所有的宏,为便于查看可以更进一步生成宏列表。
步骤103、根据适用于多个平台的第一索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息。
着色器源代码适用于多个不同的平台,对应的第一索引信息可以适用于多个平台,各个平台特殊的算法、语义和语法等不同,根据不同平台的配置文件中定义不同的宏,每一个平台的宏都会定义本平台相对应的语法和实现,因此,通过对各平台通用的第一索引信息与适用于当前目标平台的宏进行组合,就可以得到适用于目标平台的着色器的第二索引信息。因此,本发明实施例通过全局跨平台的索引信息在不同的平台生成不同的代码段(部分代码段是可以通用的,例如某些算法可以在多个平台通用),从而在目标平台可以得到可编译的着色器。
具体而言,步骤103可以包括:
子步骤S21、查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
子步骤S22、根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
根据步骤101确定了各平台通用的着色器的索引信息。根据步骤102中确定的着色器包含的各个宏,可以进一步查找宏对应的宏标记,根据宏标记查找对应的索引信息,将此处查找的索引信息与第一索引信息结合起来,得到适用于目标平台的着色器对应的索引信息,记为第二索引信息(可以记为Token索引,保存在shaderchache文件,采用uint32的数据格式)。
进一步优选地,所述子步骤S22可以包括:
子步骤S22-1、根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息。
子步骤S22-2、根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
由于全局宏定义了着色器的整个界面,实时宏标记等定义了着色器的渲染效果在生成第二索引信息时,可以先根据着色器所包含的全局宏对第一索引信息进行一次选择,得到不包含渲染效果的第三索引信息,然后除去全局宏之外的其他宏对第三索引信息进行选择,生成第二索引信息。
采用这种方案,第三索引信息可以用于下次解析中使用,可以节省生成第一索引信息和第二索引信息的步骤,大大节省了计算机资源,节约了着色器的解析时间。
步骤104、所述目标平台解析所述第二索引信息,生成所述目标平台下可编译的着色器。
对第二索引信息进行解析是指,按照第二索引信息与宏标记的对应关系以及宏标记与宏的对应关系,确定该着色器对应的宏,并根据宏所标记的代码段,确定在目标平台下可编译的着色器。
根据索引信息查找对应的宏标记,并根据宏标记再次解析组装第二索引信息,即使用shadercache中索引信息生成可编译shader代码。
具体而言,所述解析着色器对应的第二索引信息,生成目标平台下可编译的着色器包括:
子步骤S31、解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
子步骤S32、对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
根据索引信息查找对应的宏标记,根据宏标记查找对应的宏,根据宏查找所标记的代码段,将代码段组合可得到着色器的源代码。得到的源代码还需要进一步的汇编,即将源代码的汇编语言翻译成机器语言,得到目标平台下可编译的着色器。
因此,本发明实施例提供的着色器解析方法可以使一种着色器源代码在多个平台上运行,无需针对各个平台编写相应的着色器源代码,减少对计算机资源的消耗,并减少开发人员的工作量。
步骤105、根据所述着色器进行场景渲染。
目标平台的渲染器对着色器进行渲染生成全局的场景。综上所述,通用的跨平台着色器一般的做法仅仅是把一些通用的算法提炼出来,实际上相当于每个不同的平台都会有一个不同的着色器系统,非常浪费计算机资源,而本发明的方案通过根据跨平台的着色器源代码和适用于当前平台的宏组织着色器对应的索引信息,并根据索引信息和索引信息来解析生成最终可编译的适用于当前平台着色器代码,因此,本发明实施例提供的着色器解析方法可以使一种跨平台的着色器源代码生成分别适用于各个平台的着色器,无需针对各个平台编写相应的着色器,减少对计算机资源的消耗,并减少开发人员的工作量。
并且,背景技术中各个平台的着色器代码是编译阶段进行解析,本发明实施例在最后编译阶段本解析系统编译的已经是目标平台的代码,而不需要通过编译器来做额外的解析处理,所以非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
除此之外,本解析系统通过自定义一些语法和脚本来实现和优化最终的着色器,非常灵活和易用,例如,通过自定义的语法来指定寄存器,通过自定义的脚本来区分着色器类型等。
参照图2,其示出了本发明实施例2所述一种着色器的解析方法流程图。
步骤201、根据所述第一索引信息的名称,查找已生成的适用于多个平台的着色器的第一索引信息,并确定不存在所述第一索引信息。
在生成第一索引信息之前,本实施例中,可以先查找是否有以前已经生成的第一索引信息,若存在,则无需重复生成,可以直接使用,提高着色器解析的效率并减少对计算机资源的浪费,若不存在,则执行步骤202。
步骤202、针对适用于多个平台的着色器源代码,根据设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息。
步骤203、根据目标平台的配置文件确定所述目标平台的着色器包含的各个宏。
步骤204、查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息。
步骤205、根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息。
步骤206、根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下适用于所述目标平台的着色器的第二索引信息的名称。
在生成第二索引信息之前,可以根据第一索引信息的名称、渲染效果的类型和渲染效果对应的入口函数以及所有的宏标记(包括全局宏标记GLMask(nMaskGen)等),生成第二索引信息的名称。
该步骤可以在步骤206之前执行,也可以在步骤205之前执行。
步骤207、根据第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
与上个实施例不同的是,本实施例中,在生成目标平台的着色器对应的第二索引信息之前,还可以先查找是否有已经生成的第二索引信息,从而可以避免重复生成,浪费计算机资源。
在查找时,根据第二索引信息的名称进行查找,并在查找不到时,执行步骤206生成着色器对应的索引信息。
需要说明的是,在实际的场景展示过程中,可能会实时对渲染效果进行修改,此时,可以根据根据shader名,类型,入口函数名已经所有的宏标记(不仅包括GLMask,还包括实时宏标记RTMask、光源宏标记LightMask、纹理宏标记顶点格式定义宏标记MDMask以及MDVMask),重新生成一个新的第二索引信息的名称,并根据重新生成的第二索引信息的名称,并根据新的名称查找是否存在对应的第二索引信息,若不存在,则根据RTMask,LightMask、MDMask和MDVMask,再次解析组装着色器的第二索引信息。
步骤208、根据除去所述全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
步骤209、所述目标平台解析所述第二索引信息,生成所述目标平台下可编译的着色器。
步骤210、根据所述着色器进行场景渲染。
依据本发明实施例,预置适用于多个平台的着色器源代码,根据设置的宏、宏标记和索引信息,生成适用于多个平台的着色器的索引信息,然后进一步根据配置文件中目标平台下包含的各个宏,生成适用于目标平台的着色器的第二索引信息,目标平台根据索引信息可以解析出适用于该平台的着色器,因此,本发明实施例提供的着色器解析方法可以使一种着色器源代码在多个平台上运行,无需针对各个平台编写相应的着色器源代码,减少对计算机资源的消耗,并减少开发人员的工作量。
并且,由于本发明实施例采用索引信息组织各个着色器,在数据处理的过程中,数据量非常小,在编译着色器之前就解析得到适用于目标平台的代码,不需要编译器进行额外的解析处理,非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
为了使本领域技术人员更好的理解本发明实施例,以下通过一个具体的示例对所述的一种着色器的解析方法进行说明。
参考图3,给出了本发明实施例中一个示例的着色器的解析方法的示意图,具体包括:
1.1初始化所有静态宏定义,根据配置信息生成宏定义并加入宏列表。
1.2遍历shader目录下所有的shader源文件。
1.3根据Token索引和解析shader源文件的字符串生成unit32格式的第一索引信息。
1.4保存到shaderbin chache文件。
参考图4,给出了本发明实施例中另一个示例的着色器的解析方法的示意图,具体包括:
2.1开始加载shader。
2.2在shaderbin cache中查找水的shaderbin cache。
2.3查找成功,则执行下一步,没查找成功则先新生成一个水的shaderbin cache(water.cfxb)文件,保存到shaderbin cache。
2.4根据shaderbin cache和宏标记组装第三索引信息,并保存到shadercache文件,shadercache文件还可能保存有已编译的shader buffer。
2.5根据shaderbin cache名、类型、入口函数名和所有宏标记生成的shaderbuffer名称。
2.6根据shader buffer名称,从shadercache中查询编译好的shader buffer。
2.7查询shader buffer成功则执行步骤3.1,查询不成功,则执行2.7。
2.8使用shadercache中第三索引信息与实时宏标记、光源宏标记、纹理宏标记、顶点格式定义宏标记生成第二索引信息,并根据第二索引信息进一步生成可编译的着色器代码。
2.9编译着色器代码得到shader buffer。
3.0保存编译好的shader buffer到shadercache文件。
3.1使用编译好的shader buffer创建硬件设备shader。
在此之前,可以自定义实时水反射效果:
在shader宏定义文件里定义实时反射效果属性:
Name=MIRROR
Mask=0x2000
并在材质编辑器给水的材质打上MIRROR的标记,进入场景gamestar,让场景的水拥有自定义的实时反射效果。
需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必需的。
基于上述方法实施例的说明,本发明还提供了相应的着色器的解析装置实施例,来实现上述方法实施例所述的内容。
参照图5,其示出了本发明实施例1所述一种着色器的解析装置结构框图。
第一索引信息生成模块301,用于针对适用于多个平台的着色器源代码,根据预先设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;
宏确定模块302,用于根据目标平台的配置文件确定所述目标平台下着色器包含的各个宏;
第二索引信息生成模块303,用于根据适用于多个平台的第二索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;
索引解析模块304,用于所述目标平台解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器;
渲染模块305,用于根据所述着色器进行场景渲染。
本发明实施例中,优选地,所述宏确定模块可以包括:
静态宏定义初始化子模块,用于初始化预置的静态宏定义;
动态宏定义提取模块,用于提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了所述静态宏与宏标记的映射关系,所述动态宏定义定义了所述动态宏与宏标记的映射关系;
宏提取子模块,用于组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
本发明实施例中,优选地,所述第二索引信息生成模块包括:
索引信息查找子模块,用于查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
索引信息组织子模块,用于根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
本发明实施例中,优选地,所述索引信息组织子模块包括:
第一生成子单元,用于根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
第二生成子单元,用于根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
本发明实施例中,优选地,所述索引解析模块可以包括:
源代码生成子模块,用于解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
汇编子模块,用于对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
依据本发明实施例,预置适用于多个平台的着色器源代码,根据设置的宏、宏标记和索引信息,生成适用于多个平台的着色器的索引信息,然后进一步根据配置文件中目标平台下包含的各个宏,生成适用于目标平台的着色器的第二索引信息,目标平台根据索引信息可以解析出适用于该平台的着色器,因此,本发明实施例提供的着色器解析方法可以使一种着色器源代码在多个平台上运行,无需针对各个平台编写相应的着色器源代码,减少对计算机资源的消耗,并减少开发人员的工作量。
并且,由于本发明实施例采用索引信息组织各个着色器,在数据处理的过程中,数据量非常小,在编译着色器之前就解析得到适用于目标平台的代码,不需要编译器进行额外的解析处理,非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
参照图6,其示出了本发明实施例2所述一种着色器的解析装置结构框图。
第一索引信息查找模块401,用于根据适用于多个平台的着色器的第一索引信息的名称,查找已生成的第一索引信息,并确定不存在所述第一索引信息。
第一索引信息生成模块402,用于针对适用于多个平台的着色器源代码,根据预先设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息。
宏确定模块403,用于根据目标平台的配置文件确定所述目标平台下着色器包含的各个宏。
第二索引信息生成模块404,用于根据适用于多个平台的第二索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息。
所述第二索引信息生成模块404包括:
索引信息查找子模块4041,用于查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
索引信息组织子模块4042,用于根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
所述索引信息组织子模块4042包括:
第一生成子单元4042-1,用于根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
第二生成子单元4042-2,用于根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
名称组织模块405,用于根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下所述第二索引信息的名称。
第二索引信息查找模块406,用于根据所述第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
索引解析模块407,用于所述目标平台解析所述着色器对应的索引信息,生成所述目标平台下可编译的着色器。
渲染模块408,用于根据所述着色器进行场景渲染。
依据本发明实施例,预置适用于多个平台的着色器源代码,根据设置的宏、宏标记和索引信息,生成适用于多个平台的着色器的索引信息,然后进一步根据配置文件中目标平台下包含的各个宏,生成适用于目标平台的着色器的第二索引信息,目标平台根据索引信息可以解析出适用于该平台的着色器,因此,本发明实施例提供的着色器解析方法可以使一种着色器源代码在多个平台上运行,无需针对各个平台编写相应的着色器源代码,减少对计算机资源的消耗,并减少开发人员的工作量。
并且,由于本发明实施例采用索引信息组织各个着色器,在数据处理的过程中,数据量非常小,在编译着色器之前就解析得到适用于目标平台的代码,不需要编译器进行额外的解析处理,非常简洁高效地提升了着色器的解析效率以及最终跨平台着色器的编译时间。
对于上述着色器的解析装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见图1和图2所示方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本发明中,“组件”、“装置”、“系统”等等指应用于计算机的相关实体,如硬件、硬件和软件的组合、软件或执行中的软件等。详细地说,例如,组件可以、但不限于是运行于处理器的过程、处理器、对象、可执行组件、执行线程、程序和/或计算机。还有,运行于服务器上的应用程序或脚本程序、服务器都可以是组件。一个或多个组件可在执行的过程和/或线程中,并且组件可以在一台计算机上本地化和/或分布在两台或多台计算机之间,并可以由各种计算机可读介质运行。组件还可以根据具有一个或多个数据包的信号,例如,来自一个与本地系统、分布式系统中另一组件交互的,和/或在因特网的网络通过信号与其它系统交互的数据的信号通过本地和/或远程过程来进行通信。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
而且,上文中的“和/或”表示本文既包含了“和”的关系,也包含了“或”的关系,其中:如果方案A与方案B是“和”的关系,则表示某实施例中可以同时包括方案A和方案B;如果方案A与方案B是“或”的关系,则表示某实施例中可以单独包括方案A,或者单独包括方案B。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
以上对本发明所提供的一种着色器的解析方法和装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (16)
1.一种着色器的解析方法,其特征在于,包括:
针对适用于多个平台的着色器源代码,根据设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;
根据目标平台的配置文件确定所述目标平台下着色器包含的各个宏;
根据适用于多个平台的第一索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;
所述目标平台解析所述第二索引信息,生成所述目标平台下可编译的着色器,并根据所述着色器进行场景渲染。
2.根据权利要求1所述的方法,其特征在于,所述根据目标平台的配置文件确定目标平台下着色器包含的各个宏包括:
初始化预置的静态宏定义,并提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了静态宏与宏标记的映射关系,所述动态宏定义定义了动态宏与宏标记的映射关系;
组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
3.根据权利要求1所述的方法,其特征在于,所述根据适用于多个平台的第一索引信息以及目标平台下着色器包含的各个宏,生成适用于目标平台的着色器的第二索引信息包括:
查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
4.根据权利要求3所述的方法,其特征在于,所述根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于目标平台的着色器的第二索引信息包括:
根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
5.根据权利要求1或4所述的方法,其特征在于,在所述生成适用于目标平台的着色器的第二索引信息之前,所述方法还包括:
根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下所述第二索引信息的名称。
6.根据权利要求5所述的方法,其特征在于,在所述生成适用于目标平台的着色器的第二索引信息之前,所述方法还包括:
根据所述第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
7.根据权利要求1所述的方法,其特征在于,在生成适用于多个平台的着色器的第一索引信息之前,所述方法还包括:
根据所述第一索引信息的名称,查找已生成的适用于多个平台的着色器的第一索引信息,并确定不存在所述第一索引信息。
8.根据权利要求1所述的方法,其特征在于,所述目标平台解析所述第二索引信息,生成目标平台下可编译的着色器包括:
解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
9.一种着色器的解析装置,其特征在于,包括:
第一索引信息生成模块,用于针对适用于多个平台的着色器源代码,根据预先设置的用于标记所述着色器的一段代码的宏所对应的宏标记以及用于标记所述宏标记的索引信息,生成适用于多个平台的着色器的第一索引信息;
宏确定模块,用于根据目标平台的配置文件确定所述目标平台下着色器包含的各个宏;
第二索引信息生成模块,用于根据适用于多个平台的第一索引信息以及所述目标平台下着色器包含的各个宏,生成适用于所述目标平台的着色器的第二索引信息;
索引解析模块,用于所述目标平台解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器;
渲染模块,用于根据所述着色器进行场景渲染。
10.根据权利要求9所述的装置,其特征在于,所述宏确定模块包括:
静态宏定义初始化子模块,用于初始化预置的静态宏定义;
动态宏定义提取模块,用于提取针对所述目标平台预置的配置信息中包含的动态宏定义,所述静态宏定义定义了静态宏与宏标记的映射关系,所述动态宏定义定义了动态宏与宏标记的映射关系;
宏提取子模块,用于组织所述静态宏定义中包含的静态宏和所述动态宏定义中包含的动态宏,作为所述目标平台下着色器包含的各个宏,并生成宏列表。
11.根据权利要求9所述的装置,其特征在于,所述第二索引信息生成模块包括:
索引信息查找子模块,用于查找所述目标平台下着色器包含的各个宏对应的宏标记,并进一步查找所述宏标记对应的索引信息;
索引信息组织子模块,用于根据查找的索引信息对适用于多个平台的第一索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
12.根据权利要求11所述的装置,其特征在于,所述索引信息组织子模块包括:
第一生成子单元,用于根据所述目标平台下着色器包含的宏之中的全局宏对应的索引信息对所述第一索引信息进行选择,生成适用于所述目标平台的着色器的第三索引信息;
第二生成子单元,用于根据除去全局宏之外的其他宏对应的索引信息对所述第三索引信息进行选择,生成适用于所述目标平台的着色器的第二索引信息。
13.根据权利要求9或12所述的装置,其特征在于,还包括:
名称组织模块,用于根据所述第一索引信息的名称、针对所述着色器的选择的渲染效果的类型、所述渲染效果对应的入口函数名以及所有的宏标记,组织在所述渲染效果下所述第二索引信息的名称。
14.根据权利要求13所述的装置,其特征在于,还包括:
第二索引信息查找模块,用于根据所述第二索引信息的名称,查找已生成的适用于所述目标平台的着色器对应的第二索引信息,并确定不存在所述第二索引信息。
15.根据权利要求9所述的装置,其特征在于,还包括:
第一索引信息查找子模块,用于根据所述第一索引信息的名称,查找已生成的适用于多个平台的着色器的第一索引信息,并确定不存在所述第一索引信息。
16.根据权利要求9所述的装置,其特征在于,所述索引解析模块包括:
源代码生成子模块,用于解析所述着色器对应的第二索引信息,生成所述目标平台下可编译的着色器源代码;
汇编子模块,用于对所述着色器源代码进行汇编,生成目标平台下可编译的着色器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410256093.4A CN105446704B (zh) | 2014-06-10 | 2014-06-10 | 一种着色器的解析方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410256093.4A CN105446704B (zh) | 2014-06-10 | 2014-06-10 | 一种着色器的解析方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105446704A CN105446704A (zh) | 2016-03-30 |
CN105446704B true CN105446704B (zh) | 2018-10-19 |
Family
ID=55556960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410256093.4A Active CN105446704B (zh) | 2014-06-10 | 2014-06-10 | 一种着色器的解析方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105446704B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106569799B (zh) * | 2016-10-17 | 2020-08-11 | 搜游网络科技(北京)有限公司 | 程序处理方法及其设备 |
CN108597014B (zh) * | 2018-04-03 | 2022-04-19 | 苏州天魂网络科技股份有限公司 | 一种基于可视化编程的跨平台渲染效果的编辑系统 |
CN111813380B (zh) * | 2019-04-29 | 2022-11-08 | 厦门雅基软件有限公司 | 基于游戏引擎的着色数据处理方法、装置及电子设备 |
CN111831273B (zh) * | 2019-04-30 | 2022-10-28 | 厦门雅基软件有限公司 | 基于着色器的数据处理方法、装置及电子设备 |
CN110609688A (zh) * | 2019-09-19 | 2019-12-24 | 网易(杭州)网络有限公司 | 着色器的处理方法及处理装置、储存介质和处理器 |
CN111767046B (zh) * | 2020-05-18 | 2023-09-08 | 福建天晴数码有限公司 | 一种着色器代码复用方法及终端 |
US20230306670A1 (en) * | 2020-08-10 | 2023-09-28 | Xiamen Yaji Software Co., Ltd | Game Engine-Based Shading Data Processing Method And Apparatus, And Electronic Device |
CN114077433B (zh) * | 2021-11-18 | 2024-05-03 | 大连东软信息学院 | 一种跨平台模块化的着色器语言通用集成方法 |
CN114115905A (zh) * | 2021-11-30 | 2022-03-01 | 北京字跳网络技术有限公司 | 着色器代码的编译方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013500A (zh) * | 2006-07-20 | 2007-08-08 | 威盛电子股份有限公司 | 可执行多线程的顶点着色器、图形处理器及其控制方法 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器系统及其处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7385607B2 (en) * | 2004-04-12 | 2008-06-10 | Nvidia Corporation | Scalable shader architecture |
-
2014
- 2014-06-10 CN CN201410256093.4A patent/CN105446704B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013500A (zh) * | 2006-07-20 | 2007-08-08 | 威盛电子股份有限公司 | 可执行多线程的顶点着色器、图形处理器及其控制方法 |
CN102254297A (zh) * | 2010-10-15 | 2011-11-23 | 威盛电子股份有限公司 | 多着色器系统及其处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105446704A (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105446704B (zh) | 一种着色器的解析方法和装置 | |
CN108614960B (zh) | 一种基于前端字节码技术的JavaScript虚拟化保护方法 | |
US8473911B1 (en) | Documentation generation from a computer readable symbolic representation | |
CN110196815B (zh) | 一种软件模糊测试方法 | |
CN108139891B (zh) | 用于生成建议以纠正未定义标记错误的方法和系统 | |
CN111522994A (zh) | 用于生成信息的方法和装置 | |
CN103377045B (zh) | 用于翻译验证测试的方法和系统 | |
CN104346274B (zh) | 程序调试器及一种程序的调试方法 | |
US10613844B2 (en) | Using comments of a program to provide optimizations | |
WO2017014318A1 (ja) | 命令セットシミュレータおよびそのシミュレータ生成方法 | |
CN104375875B (zh) | 用于应用程序的编译优化的方法以及编译器 | |
CN110688122A (zh) | 编译和执行智能合约的方法及装置 | |
US20210157553A1 (en) | Source code auto-suggestion based on structural and semantic features | |
CN112507260A (zh) | 网页加载方法及装置、电子设备、计算机可读存储介质 | |
CN111291882A (zh) | 一种模型转换的方法、装置、设备和计算机存储介质 | |
CN110427586A (zh) | 一种页面显示方法、装置、设备及存储介质 | |
CN113656590A (zh) | 行业图谱的构建方法、装置、电子设备及存储介质 | |
CN118245050B (zh) | 前端框架组件自动转换方法、系统、电子设备及存储介质 | |
CN115686467A (zh) | 动态语言中的类型推断 | |
CN109816038B (zh) | 一种物联网固件程序分类方法及其装置 | |
CA2602749C (en) | System and method of report representation | |
CN110489563B (zh) | 图结构的表示方法、装置、设备及计算机可读存储介质 | |
CN106293862B (zh) | 一种可扩展标记语言xml数据的解析方法和装置 | |
CN110083845A (zh) | 网页翻译方法及系统 | |
CN110378457B (zh) | 一种码标的生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |