当前位置主页 > 1.85雷霆③合① >

最先进的HLSL到GLSL转换器

发布时间:2019-05-16 14:24

介绍

在许多情况下,需要将在HLSL中创作的DirectX着色器转换为GLSL。典型的例子包括将现有应用程序移植到OpenGL和跨平台开发.HLSL和GLSL有许多共同之处,但有时会有很大不同。维护两个版本的着色器非常耗时且容易出错,因此不适用于大多数应用程序。该问题的一个典型解决方案是使用转换为两种语言的中间表示,但是当使用HLSL编写现有着色器时,它不起作用。在HLSL中创作着色器还允许使用HLSL着色器开发工具。

存在多个转换器,但它们提供有限的能。例如,这个和这个项目只支持D3D9样式的着色器。此在线翻译器仅支持顶点和片段着色器。

Diligent Engineuses最先进的着色器变换器,允许将HLSL源转换为GLSL。转换器支持HLSL 5.0和所有着色器类型(顶点,像素,几何,外壳,域和计算)。

可以从此页面下载转换器。

转换细节基本

转换器支持HLSL5.0,所有着色器类型(顶点,几何,像素,域,外壳和计算)以及大多数语言结构。但是,为了将HLSL源成转换为GLSL,必须满足一些特殊要求:

顶点着色器的输入可能具有 ATTRIBn 语义,其中 n 定义相应GLSL输入变量的位置( layout(location = n)) 。对于任何其他输入语义,转换器自动分配输入位置后续着色器阶段的输入必须以与先前着色器阶段的输出完全相同的顺序声明。函数的返回值计为其第一个输出。转换器按声明顺序解析所有输入和输出参数(包括结构成员),并自动为每个参数分配位置。要确保输入和输出位置匹配,必须以完全相同的顺序声明参数。出于同样的原因,如果着色器未使用参数,则仍需要声明它以保留原始排序

下面的代片段提供了受支持的着色器声明的示例:

  struct VSInput{? ? //建议(虽然不是必需的)分配?? ? //?来自IA的输入的ATTRIBn语义? ?在float3中f3PosWS:ATTRIB0;? ?在float2中f2UV?:ATTRIB1;? ? uint VertexID:SV_VertexID;};struct VSOutput{? ? float2 UV:TEX_COORDINATES;? ? float3正常:正常;? ? float4 f4PosPS:SV_Position;};VSOutput VertexShader(在VSInput VSIn中,? ? ? ? ? ? ? ? ? ? ? ?在float3 f3UV中?:ATTRIB2,? ? ? ? ? ? ? ? ? ? ? ? uint InstID:SV_InstanceID,? ? ? ? ? ? ? ? ? ? ? ? out float3 f3Tangent:TANGENT){? ? VSOutput VSOut;? ? //身体被剔除? ? f3Tangent = ...? ?返回VSOut;}float4 PixelShader(//像素着色器输入必须以完全相同的顺序声明?? ? ? ? ? ? ? ? ? ? ?//作为顶点着色器的输出? ? ? ? ? ? ? ? ? ? ?VSOutput PSIn,? ? ? ? ? ? ? ? ? ? ?in float3 f3Tangent:TaNgEnT //语义不区分大小写? ? ? ? ? ? ? ? ? ? ?out float3 Color2:SV_Target2):? SV_Target{? ? //身体被剔除}  在OpenGL中启用细分时,分区和输出补丁拓扑由曲面细分评估着色器(域着色器)定义,而不是由嵌套控件着色器(外壳着色器)定义。因此,转换器无法在不使用特殊提示的情况下生成GLSL代。要指示缺少的属,应在域着色器正文顶部添加以下特殊格式的注释:
  / * partitioning = {integer | fractional_even | fractional_odd},?outputtopology = {triangle_cw | triangle_ccw} * /  例如,以下是有效的域着色器声明:
  [domain(“quad”)]/ * partitioning = fractional_even,outputtopology = triangle_cw * /DSOutput main(HS_CONSTANT_DATA_OUTPUT输入,?? ? ? ? ? ? ? ?float2 QuadUV:SV_DomainLocation,?? ? ? ? ? ? ? ?OutputPatch< HSOutput,2> QuadPatch){? ? //身体被剔除}  必须在单独的文件中定义几何,域和外壳着色器GLSL允许将采样器声明为全局变量或函数参数。它不允许采样器类型的局部变量。纹理和采样器

以下规则用于将HLSL纹理声明转换为GLSL采样器:

HLSL纹理尺寸defi介绍

在许多情况下,需要将在HLSL中创作的DirectX着色器转换为GLSL。典型的例子包括将现有应用程序移植到OpenGL和跨平台开发.HLSL和GLSL有许多共同之处,但有时会有很大不同。维护两个版本的着色器非常耗时且容易出错,因此不适用于大多数应用程序。该问题的一个典型解决方案是使用转换为两种语言的中间表示,但是当使用HLSL编写现有着色器时,它不起作用。在HLSL中创作着色器还允许使用HLSL着色器开发工具。

存在多个转换器,但它们提供有限的能。例如,这个和这个项目只支持D3D9样式的着色器。此在线翻译器仅支持顶点和片段着色器。

Diligent Engineuses最先进的着色器变换器,允许将HLSL源转换为GLSL。转换器支持HLSL 5.0和所有着色器类型(顶点,像素,几何,外壳,域和计算)。

可以从此页面下载转换器。

转换细节基本

转换器支持HLSL5.0,所有着色器类型(顶点,几何,像素,域,外壳和计算)以及大多数语言结构。但是,为了将HLSL源成转换为GLSL,必须满足一些特殊要求:

顶点着色器的输入可能具有 ATTRIBn 语义,其中 n 定义相应GLSL输入变量的位置( layout(location = n)) 。对于任何其他输入语义,转换器自动分配输入位置后续着色器阶段的输入必须以与先前着色器阶段的输出完全相同的顺序声明。函数的返回值计为其第一个输出。转换器按声明顺序解析所有输入和输出参数(包括结构成员),并自动为每个参数分配位置。要确保输入和输出位置匹配,必须以完全相同的顺序声明参数。出于同样的原因,如果着色器未使用参数,则仍需要声明它以保留原始排序

下面的代片段提供了受支持的着色器声明的示例:

  struct VSInp合击传奇私服变态私服ut{? ? //建议(虽然不是必需的)分配?? ? //?来自IA的输入的ATTRIBn语义? ?在float3中f3PosWS:ATTRIB0;? ?在float2中f2UV?:ATTRIB1;? ? uint VertexID:SV_VertexID;};struct VSOutput{? ? float2 UV:TEX_COORDINATES;? ? float3正常:正常;? ? float4 f4PosPS:SV_Position;};VSOutput VertexShader(在VSInput VSIn中,? ? ? ? ? ? ? ? ? ? ? ?在float3 f3UV中?:ATTRIB2,? ? ? ? ? ? ? ? ? ? ? ? uint InstID:SV_InstanceID,? ? ? ? ? ? ? ? ? ? ? ? out float3 f3Tangent:TANGENT){? ? VSOutput VSOut;? ? //身体被剔除? ? f3Tangent = ...? ?返回VSOut;}float4 PixelShader(//像素着色器输入必须以完全相同的顺序声明?? ? ? ? ? ? ? ? ? ? ?//作为顶点着色器的输出? ? ? ? ? ? ? ? ? ? ?VSOutput PSIn,? ? ? ? ? ? ? ? ? ? ?in float3 f3Tangent:TaNgEnT //语义不区分大小写? ? ? ? ? ? ? ? ? ? ?out float3 Color2:SV_Target2):? SV_Target{? ? //身体被剔除}  在OpenGL中启用细分时,分区和输出补丁拓扑由曲面细分评估着色器(域着色器)定义,而不是由嵌套控件着色器(外壳着色器)定义。因此,转换器无法在不使用特殊提示的情况下生成GLSL代。要指示缺少的属,应在域着色器正文顶部添加以下特殊格式的注释:
  / * partitioning = {integer | fractional_even | fractional_odd},?outputtopology = {triangle_cw | triangle_ccw} * /  例如,以下是有效的域着色器声明:
  [domain(“quad”)]/ * partitioning = fractional_even,outputtopology = triangle_cw * /DSOutput main(HS_CONSTANT_DATA_OUTPUT输入,?? ? ? ? ? ? ? ?float2 QuadUV:SV_DomainLocation,?? ? ? ? ? ? ? ?OutputPatch< HSOutput,2> QuadPatch){? ? //身体被剔除}  必须在单独的文件中定义几何,域和外壳着色器GLSL允许将采样器声明为全局变

量或函数参数。它不允许采样器类型的局部变量。纹理和采样器

以下规则用于将HLSL纹理声明转换为GLSL采样器:

HLSL纹理尺寸defi介绍

在许多情况下,需要将在HLSL中创作的DirectX着色器转换为GLSL。典型的例子包括将现有应用程序移植到OpenGL和跨平台开发.HLSL和GLSL有许多共同之处,但有时会有很大不同。维护两个版本的着色器非常耗时且容易出错,因此不适用于大多数应用程序。该问题的一个典型解决方案是使用转换为两种语言的中间表示,但是当使用HLSL编写现有着色器时,它不起作用。在HLSL中创作着色器还允许使用HLSL着色器开发工具。

存在多个转换器,但它们提供有限的能。例如,这个和这个项目只支持D3D9样式的着色器。此在线翻译器仅支持顶点和片段着色器。

Diligent Engineuses最先进的着色器变换器,允许将HLSL源转换为GLSL。转换器支持HLSL 5.0和所有着色器类型(顶点,像素,几何,外壳,域和计算)。

可以从此页面下载转换器。

转换细节基本

转换器支持HLSL5.0,所有着色器类型(顶点,几何,像素,域,外壳和计算)以及大多数语言结构。但是,为了将HLSL源成转换为GLSL,必须满足一些特殊要求:

顶点着色器的输入可能具有 ATTRIBn 语义,其中 n 定义相应GLSL输入变量的位置( layout(location = n)) 。对于任何其他输入语义,转换器自动分配输入位置后续着色器阶段的输入必须以与先前着色器阶段的输出完全相同的顺序声明。函数的返回值计为其第一个输出。转换器按声明顺序解析所有输入和输出参数(包括结构成员),并自动为每个参数分配位置。要确保输入和输出位置匹配,必须以完全相同的顺序声明参数。出于同样的原因,如果着色器未使用参数,则仍需要声明它以保留原始排序

下面的代片段提供了受支持的着色器声明的示例:

  struct VSInput{? ? //建议(虽然不是必需的)分配?? ? //?来自IA的输入的ATTRIBn语义? ?在float3中f3PosWS:ATTRIB0;? ?在float2中f2UV?:ATTRIB1;? ? uint VertexID:SV_VertexID;};struct VSOutput{? ? float2 UV:TEX_COORDINATES;? ? float3正常:正常;? ? float4 f4PosPS:SV_Position;};VSOutput VertexShader(在VSInput VSIn中,? ? ? ? ? ? ? ? ? ? ? ?在float3 f3UV中?:ATTRIB2,? ? ? ? ? ? ? ? ? ? ? ? uint InstID:SV_InstanceID,? ? ? ? ? ? ? ? ? ? ? ? out float3 f3Tangent:TANGENT){? ? VSOutput VSOut;? ? //身体被剔除? ? f3Tangent = ...? ?返回VSOut;}float4 PixelShader(//像素着色器输入必须以完全相同的顺序声明?? ? ? ? ? ? ? ? ? ? ?//作为顶点着色器的输出? ? ? ? ? ? ? ? ? ? ?VSOutput PSIn,? ? ? ? ? ? ? ? ? ? ?in float3 f3Tangent:TaNgEnT //语义不区分大小写? ? ? ? ? ? ? ? ? ? ?out float3 Color2:SV_Target2):? SV_Target{? ? //身体被剔除}  在OpenGL中18点开区的1.85玉兔启用细分时,分区和输出补丁拓扑由曲面细分评估着色器(域着色器)定义,而不是由嵌套控件着色器(外壳着色器)定义。因此,转换器无法在不使用特殊提示的情况下生成GLSL代。要指示缺少的属,应在域着色器正文顶部添加以下特殊格式的注释:
  / * partitioning = {integer | fractional_even | fractional_odd},?outputtopology = {triangle_cw | triangle_ccw} * /  例如,以下是有效的域着色器声明:
  [domain(“quad”)]/ * partitioning = fractional_even,outputtopology = triangle_cw * /DSOutput main(HS_CONSTANT_DATA_OUTPUT输入,?? ? ? ? ? ? ? ?float2 QuadUV:SV_DomainLocation,?? ? ? ? ? ? ? ?OutputPatch< HSOutput,2> QuadPatch){? ? //身体被剔除}  必须在单独的文件中定义几何,域和外壳着色器GLSL允许将采样器声明为全局变量或函数参数。它不允许采样器类型的局部变量。纹理和采样器

以下规则用于将HLSL纹理声明转换为GLSL采样器:

HLSL纹理尺寸defi介绍

在许多情况下,需要将在HLSL中创作的DirectX着色器转换为GLSL。典型的例子包括将现有应用程序移植到OpenGL和跨平台开发.HLSL和GLSL有许多共同之处,但有时会有很大不同。维护两个版本的着色器非常耗时且容易出错,因此不适用于大多数应用程序。该问题的一个典型解决方案是使用转换为两种语言的中间表示,但是当使用HLSL编写现有着色器时,它不起作用。在HLSL中创作着色器还允许使用HLSL着色器开发工具。

存在多个转换器,但它们提供有限的能。例如,这个和这个项目只支持D3D9样式的着色器。此在线翻译器仅支持顶点和片段着色器。

Diligent Engineuses最先进的着色器变换器,允许将HLSL源转换为GLSL。转换器支持HLSL 5.0和所有着色器类型(顶点,像素,几何,外壳,域和计算)。

可以从此页面下载转换器。

转换细节基本

转换器支持HLSL5.0,所有着色器类型(顶点,几何,像素,域,外壳和计算)以及大多数语言结构。但是,为了将HLSL源成转换为GLSL,必须满足一些特殊要求:

顶点着色器的输入可能具有 ATTRIBn 语义,其中 n 定义相应GLSL输入变量的位置( layout(location = n)) 。对于任何其他输入语义,转换器自动分配输入位置后续着色器阶段的输入必须以与先前着色器阶段的输出完全相同的顺序声明。函数的返回值计为其第一个输出。转换器按声明顺序解析所有输入和输出参数(包括结构成员),并自动为每个参数分配位置。要确保输入和输出位置匹配,必须以完全相同的顺序声明参数。出于同样的原因,如果着色器未使用参数,则仍需要声明它以保留原始排序

下面的代片段提供了受支持的着色器声明的示例:

  struct VSInput{? ? //建议(虽然不是必需的)分配?? ? //?来自IA的输入的ATTRIBn语义? ?在float3中f3PosWS:ATTRIB0;? ?在float2中f2UV?:ATTRIB1;? ? uint VertexID:SV_VertexID;};struct VSOutput{? ? float2 UV:TEX_COORDINATES;? ? float3正常:正常;? ? float4 f4PosPS:SV_Position;};VSOutput VertexShader(在VSInput VSIn中,? ? ? ? ? ? ? ? ? ? ? ?在float3 f3UV中?:ATTRIB2,? ? ? ? ? ? ? ? ? ? ? ? uint InstID:SV_InstanceID,? ? ? ? ? ? ? ? ? ? ? ? out float3 f3Tangent:TANGENT){? ? VSOutput VSOut;? ? //身体被剔除? ? f3Tangent = ...? ?返回VSOut;}float4 PixelShader(//像素着色器输入必须以完全相同的顺序声明?? ? ? ? ? ? ? ? ? ? ?//作为顶点着色器的输出? ? ? ? ? ? ? ? ? ? ?VSOutput PSIn,? ? ? ? ? ? ? ? ? ? ?in float3 f3Tangent:TaNgEnT //语义不区分大小写? ? ? ? ? ? ? ? ? ? ?out float3 Color2:SV_Target2):? SV_Target{? ? //身体被剔除}  在OpenGL中启用细分时,分区和输出补丁拓扑由曲面细分评估着色器(域着色器)定义,而不是由嵌套控件着色器(外壳着色器)定义。因此,转换器无法在不使用特殊提示的情况下生成GLSL代。要指示缺少的属,应在域着色器正文顶部添加以下特殊格式的注释:
  / * partitioning = {integer | fractional_even | fractional_odd},?outputtopology = {triangle_cw | triangle_ccw} * /  例如,以下是有效的域着色器声明:
  [domain(“quad”)]/ * partitioning = fractional_even,outputtopology = triangle_cw * /DSOutput main(HS_CONSTANT_DATA_OUTPUT输入,?? ? ? ? ? ? ? ?float2 QuadUV:SV_DomainLocation,?? ? ? ? ? ? ? ?OutputPatch< HSOutput,2> 

QuadPatch){? ? //身体被剔除} 必须在单独的文件中定义几何,域和外壳着色器GLSL允许将采样器声明为全局变量或函数参数。它不允许采样器类型的局部变量。纹理和采样器

以下规则用于将HLSL纹理声明转换为GLSL采样器:

HLSL纹理尺寸defi

上一篇:ATI宣布新的内存规格
下一篇:声音,感觉和空间化 - “修复Inc”的死后事件。

您可能还会喜欢