Отправить идентификатор <MTLTexture>из IOS в Unity - PullRequest
0 голосов
/ 20 мая 2018

Я пишу плагин для Unity, и мне нужно отправить текстуру из IOS в Unity.Существует функция UnitySendMessage, которая принимает char* в качестве параметра, но я не нашел способа конвертировать id<MTLTexture> в char*.

Как я могу отправить id<MTLTexture> с ios иполучить его в единстве?

Мой текущий код:

//ios side ...
id<MTLTexture> _texture = CVMetalTextureGetTexture(texture);
UnitySendMessage(CALLBACK_OBJECT, CALLBACK_TEXTURE_READY,_texture);//error
//...

//unity side
private void OnTextureReady(string texture_str)
{
   IntPtr texture = new IntPtr(Int32.Parse(texture_str));
   int width = 256;
   int height = 256;
   rawImage.texture = Texture2D.CreateExternalTexture(width, height, 
   TextureFormat.ARGB32, false, false, texture);
}

1 Ответ

0 голосов
/ 20 мая 2018

Документация по плагину для iOS говорит, что вы можете передавать только строки, используя UnitySendMessage.

Обходной путь может заключаться в создании отображения из строки в объекты текстуры на стороне Objective-C, передав строкуключ через UnitySendMessage, а затем получить объект текстуры с помощью пользовательской функции DllImport.

Объявить карту:

// class field
{
    NSMutableDictionary<NSString *, id<MTLTexture>> _textures;
}

// in constructor
_textures = [NSMutableDictionary new];

// in function code
NSString *textureName = @"cookies";
_textures[textureName] = texture; // save MTLTexture for later

UnitySendMessage(CALLBACK_OBJECT, CALLBACK_TEXTURE_READY, textureName);

На стороне C # CreateExternalTexture требуется указатель на объект текстуры типа IntPtr.Чтобы получить его, вы можете объявить функцию DllImport, которая принимает имя текстуры и возвращает IntPtr:

[DllImport("__Internal")]
static extern IntPtr GetMetalTexturePointerByName(string textureName);

и реализует ее на стороне iOS следующим образом:

return plugin->_textures[textureName];

Не уверенесли это работает, хотя и с точки зрения того, что ожидает CreateExternalTexture.

См. также этот пост, парень делает нечто подобное (но наоборот): Преобразование uintptr_t в id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...