[英]Different vertex formats in a Metal shader
我的渲染器支持2种顶点格式:
typedef struct
{
packed_float3 position;
packed_float2 texcoord;
packed_float3 normal;
packed_float4 tangent;
packed_float4 color;
} vertex_ptntc;
typedef struct
{
packed_float3 position;
packed_float2 texcoord;
packed_float4 color;
} vertex_ptc;
我的着色器库的顶点着色器签名之一如下:
vertex ColorInOut unlit_vertex(device vertex_ptc* vertex_array [[ buffer(0) ]],
constant uniforms_t& uniforms [[ buffer(1) ]],
unsigned int vid [[ vertex_id ]])
此着色器渲染的某些网格将使用一种格式,而另一些将使用另一种格式。 如何支持两种格式? 此着色器仅使用vertex_ptc中的属性。 我是否需要编写另一个顶点着色器?
在将着色器函数参数定义为结构数组时(如您所做的那样),着色器顶点函数中的结构定义必须与缓冲区中实际结构的精确形状和大小(包括填充)匹配。
您是否考虑过根据[[stage_in]]
限定词和顶点描述符来定义输入? 通过在为每个着色器函数声明的结构的每个元素上使用[[attribute(n)]]
限定符,可以使您在逐个着色器的基础上按摩顶点输入。 您将为每个结构定义一个顶点描述符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.