Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 金属着色器中的不同顶点格式_Ios_Macos_Graphics_3d_Metal - Fatal编程技术网

Ios 金属着色器中的不同顶点格式

Ios 金属着色器中的不同顶点格式,ios,macos,graphics,3d,metal,Ios,Macos,Graphics,3d,Metal,我的渲染器支持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 texc

我的渲染器支持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 ]])

此着色器渲染的某些网格将使用一种格式,而某些网格将使用另一种格式。如何支持这两种格式?此着色器仅使用顶点中的属性。是否必须编写另一个顶点着色器?

将着色器函数参数定义为结构数组时(如您所做的),着色器顶点函数中的结构定义必须与缓冲区中实际结构(包括填充)的确切形状和大小相匹配

您是否考虑过根据
[[stage\u in]]
限定符和顶点描述符定义输入?这将允许您通过在为每个着色器函数声明的结构的每个元素上使用
[[attribute(n)]]
限定符,逐个着色器按摩顶点输入。您将为每个结构定义一个顶点描述符