一种跨平台模块化的着色器语言通用集成方法技术

技术编号:32435245 阅读:18 留言:0更新日期:2022-02-24 19:07
本发明专利技术公开了一种跨平台模块化的着色器语言通用集成方法,包括,定义宏定义解析文件的格式与语法,创建宏定义解析文件;创建语法解析器Shader

【技术实现步骤摘要】
一种跨平台模块化的着色器语言通用集成方法


[0001]本专利技术涉及图像渲染
,尤其涉及一种跨平台模块化的着色器语言通用集成方法。

技术介绍

[0002]图像渲染是将三维的光能传递处理转换为一个二维图像的过程。场景和实体用三维形式表示,更接近于现实世界,便于操纵和变换,而图形的显示设备大多是二维的光栅化显示器和点阵化打印机。从三维实体场景的表示N维光栅和点阵化的表示就是图像渲染——即光栅化。光栅显示器可以看作是一个像素矩阵,在光栅显示器上显示的任何一个图形,实际上都是一些具有一种或多种颜色和灰度象素的集合。
[0003]着色器语言Shader Language目前主要有3种语言:基于OpenGL的OpenGL Shading Language,简称GLSL;基于DirectX的High Level Shading Language,简称HLSL;还有Metal语言,具体如下:
[0004]OpenGL(全写Open Graphics Library)是一个定义了跨编程语言、跨平台的编程接口规格的专业图形程序接口。它用于三维图像(二维亦可),是一个功能强大,调用方便的底层图形库。
[0005]DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛适用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。
[0006]Metal提供对图形处理器(GPU)的接近直接访问,能最大程度地发挥iOS、macOS和Apple tvOS app中的图形和计算潜能。Metal构建于易用的低开销架构之上,而且提供预编译的GPU着色器和精细的资源控制,并支持多线程处理。目前,在图像渲染API中,不同平台分别对应了不同的着色器语言(Shader Language),这些着色语言不兼容,如:Windows平台使用DirectX,其他平台基本都是基于OpenGL,移动端平台出于性能考虑使用GLSL的一个子集——GLES,除此之外,Metal及Vulkan等API也应运而生。如此众多的图形API接口都提供了各自的着色器语言,在进行跨平台开发时,同一个功能需要针对多个平台编写多份着色器程序,使得编程效率低下。
[0007]为了解决跨平台的渲染问题,目前比较主流的的解决方案为编写GLSL程序,再利用glslang编译器将GLSL编译成一种“中间表示语言”SPIR

V,再利用SPIRV

Cross反编译为各个平台的可使用的Shader,如GLSL/HLSL/MSL等。此方案利用SPIR

V作为中间语言编写一份着色器程序,以实现跨平台。
[0008]现有技术存在以下缺陷:第一,将GLSL编译成SPIR

V有使用限制,即在实际的使用过程中,着色器需要根据宏定义设置参数,那么着色器程序只能根据传入的宏定义在线编译生成SPIR

V,然后再反编译为各个平台对应的Shader,这就需要有在线编译和反编译两个步骤,这使得整个渲染过程非常耗时,在渲染引擎中经常是无法直接使用的。第二,着色器不支持如C/C++这种高级语言的模块引入语法,这就导致在编写着色器时,底层共通的代
码段不得不分布在各个着色器中,导致程序规模扩大时,难以维护。无法做到模块通用性。

技术实现思路

[0009]本专利技术提供一种跨平台模块化的着色器语言通用集成方法,以克服上述技术问题。
[0010]一种跨平台模块化的着色器语言通用集成方法,其特征在于,包括以下步骤,
[0011]步骤一,定义宏定义解析文件的格式与语法,创建宏定义解析文件;
[0012]步骤二,创建语法解析器Shader

X,使用Shader

X解析器预编译着色器文件,所述Shader

X解析器包括着色器语法以及预编译指令;
[0013]步骤三,解析宏定义解析文件,生成宏定义结果集合,根据宏定义结果集合生成宏定义结果有序列表;
[0014]步骤四,分别计算宏定义结果有序列表的哈希值,分别根据宏定义结果生成宏定义结果所对应平台的着色器文件,通过Shader

X解析器将着色器文件预编译为二进制文件,并通过宏定义结果有序列表的哈希值以及平台对二进制文件进行标记;
[0015]所述根据宏定义结果生成宏定义结果所对应平台的着色器文件是指首先通过GLSLang编译器将GLSL程序编译成SPIR

V文件,然后通过SPIRV

Cross生成平台所对应的着色器文件,
[0016]所述平台包括且不限于Windows平台、iOS平台、macOS平台;
[0017]步骤五,渲染程序根据宏定义结果的哈希值以及平台,定位二进制文件并执行,所述定位二进制文件是根据宏定义结果有序列表的哈希值以及平台匹配相应的二进制文件。
[0018]优选地,所述通过Shader

X解析器将着色器文件预编译为二进制文件还包括根据预编译指令进行模块引入和模块引入重复性检查,所述预编译指令包括模块引入的指令以及模块引入重复性检查的指令,所述模块引入是指通过模块引入的指令#include调用具有特定功能的模块,所述模块引入重复性检查是指通过模块引入重复性检查的指令#pragma once检查所引入模块是否重复引用。
[0019]本专利技术提供一种跨平台模块化的着色器语言通用集成方法,具有以下效果,
[0020]第一,建立宏定义预编译解析方案,并结合哈希值生成技术,实现同一套着色器代码可在不同平台使用,无需在线编译,即达到跨平台的目的,又提高了渲染性能,还使得渲染程序更加灵活。
[0021]第二,创建语法解析器Shader

X以支持模块化的编程方案,提高着色器编程效率
[0022]第三,模拟C++的预编译方式,并应用在着色器的语法解析上,让着色器可以支持更高级的语法。
附图说明
[0023]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0024]图1是本专利技术方法流程图。
具体实施方式
[0025]为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种跨平台模块化的着色器语言通用集成方法,其特征在于,包括以下步骤,步骤一,定义宏定义解析文件的格式与语法,创建宏定义解析文件;步骤二,创建语法解析器Shader

X,使用Shader

X解析器预编译着色器文件,所述Shader

X解析器包括着色器语法以及预编译指令;步骤三,解析宏定义解析文件,生成宏定义结果集合,根据宏定义结果集合生成宏定义结果有序列表;步骤四,分别计算宏定义结果有序列表的哈希值,分别根据宏定义结果生成宏定义结果所对应平台的着色器文件,通过Shader

X解析器将着色器文件预编译为二进制文件,并通过宏定义结果有序列表的哈希值以及平台对二进制文件进行标记;所述根据宏定义结果生成宏定义结果所对应平台的着色器文件是指首先通过GLSLang编译器将GLSL程序编译成SPIR

【专利技术属性】
技术研发人员:刘歆宁
申请(专利权)人:大连东软信息学院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1