Как загрузить черно-белое изображение в металлическую текстуру - PullRequest
0 голосов
/ 09 июля 2020

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

 //1.
    mtltexture01 = [textureLoader newTextureWithName:@"texture02"
                                         scaleFactor:1.0
                                              bundle:nil
                                             options:textureLoaderOptions
                                               error:&error];



 //2.
    UIImage *img = [UIImage imageNamed:@"texture02"];

    mtltexture01 = [textureLoader newTextureWithCGImage:img.CGImage options:textureLoaderOptions error:&error];

но оба cra sh, журнал ошибок:

"Error Domain = MTKTextureLoaderErrorDomain Code = 0 «Ошибка декодирования изображения» UserInfo = {NSLocalizedDescription = Ошибка декодирования изображения, MTKTextureLoaderErrorKey = Ошибка декодирования изображения} ",

как исправить эту проблему? Также, если я загружаю красочное изображение в металл, оно запускается. введите описание изображения здесь

1 Ответ

0 голосов
/ 09 июля 2020
-(id<MTLTexture>)textureWithName:(NSString*)imgname UsingDevice:(id<MTLDevice>)device {

     MTKTextureLoader* textureLoader = [[MTKTextureLoader alloc] initWithDevice:device];

     NSDictionary *textureLoaderOptions = @{
         MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
         MTKTextureLoaderOptionTextureStorageMode : @(MTLStorageModePrivate)
     };

     return [textureLoader newTextureWithName:imgname
         scaleFactor:1.0
         bundle:nil
         options:textureLoaderOptions
         error:nil];
}

и в ваших металлических конфигурациях

id<MTLTexture> mtltexture01;

mtltexture01 = [self textureWithName:@"texture02" UsingDevice:device];

Имейте в виду, что texture02 - это имя файла, и файл должен быть доступен в активах ваших приложений. Вы можете сохранить изображение как MTLTexture в свой актив в Xcode, и поэтому преобразование будет выполнено во время сборки.

Также проверьте, содержит ли изображение хотя бы правильную непрозрачность и является ли оно одним из форматов PNG, JPEG или TIFF. Известная проблема с загрузчиком, когда текстуры содержат только серый / черный цвета и используется 0% прозрачности. введите описание изображения здесь

...