Неподдерживаемая архитектура - Shared Enum между Metal и Swift - PullRequest
4 голосов
/ 16 февраля 2020

Я пытаюсь поделиться Enum, который я определил в Заголовочном файле, между металлом и моим быстрым проектом:

#ifndef SharedIndizes_h
#define SharedIndizes_h
#import <Foundation/Foundation.h>

#endif /* SharedIndizes_h */

typedef NS_ENUM(NSInteger, VertexAttribute)
{
    VertexAttributePosition = 0,
    VertexAttributeNormal  = 1,
};
#include <metal_stdlib>
#import "ExchangeTypes/SharedIndizes.h"
using namespace metal;

struct VertexIn {
    float3 position [[ attribute(VertexAttributePosition) ]];
    float3 normal [[ attribute(VertexAttributeNormal) ]];
};
vertexDescriptor.attributes[VertexAttribute.position.rawValue]
vertexDescriptor.attributes[VertexAttribute.normal.rawValue]

Но все, что я получаю, это некоторые неожиданные ошибки:

  • Неподдерживаемая архитектура

  • имя неизвестного типа '_int64_t'

  • имя неизвестного типа '_int32_t'

  • ...

Удаление #import "ExchangeTypes/SharedIndizes.h" из моего металлического файла также удаляет ошибки.

1 Ответ

2 голосов
/ 16 февраля 2020

Заменить это:

#ifndef SharedIndizes_h
#define SharedIndizes_h
#import <Foundation/Foundation.h>

#endif /* SharedIndizes_h */

typedef NS_ENUM(NSInteger, VertexAttribute)
{
    VertexAttributePosition = 0,
    VertexAttributeNormal  = 1,
};

на это:

#ifndef SharedIndizes_h
#define SharedIndizes_h

#ifdef __METAL_VERSION__
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#define NSInteger metal::int32_t
#else

#import <Foundation/Foundation.h>

#endif /* __METAL_VERSION__ */
#endif /* SharedIndizes_h */

typedef NS_ENUM(NSInteger, VertexAttribute)
{
    VertexAttributePosition = 0,
    VertexAttributeNormal  = 1,
};
...