Intereting Posts
Регулярное выражение для подтверждения пароля Почему Xcode говорит «UTF8Encoding uneclared»? Предотвратить исчезновение / повторение клавиатуры iOS между UITextFields? Сбой отладчика Xcode (Xcode 6.1 / LLDB / Yosemite) Попытка сделать платформы, которые я могу прыгнуть из-под нее, но приземляться сверху. возникли проблемы с точной настройкой логики Xcode 4.5: Объединить две статические библиотеки ,,, Отказ отказался Лучшая практика для обеспечения объектов CoreData уникальна на основе атрибутов сущности перенос данных на основе основных данных Как сохранить ось x видимой, когда я показываю только интервал по оси y, используя Core-Plot Как включить / отключить ориентацию (вращение) до нажатия кнопки UIBarButtonItem? Сортировка NSArray другим nsarray с идентификаторами Просмотр таблицы Скрыть панель поиска до прокрутки Внедрение невидимых метаданных в EDAMNote с использованием API-интерфейсов iOS Evernote Создание Cocoapods с / без автоматического подсчета ссылок Единичное тестирование сетевых вызовов (неудачные тесты) – Swift

Metal Best Practice: Triple-buffering – Текстуры тоже?

В Руководстве по лучшей практике в области металлов говорится, что для достижения наилучшей производительности следует «внедрить модель тройной буферизации для обновления данных динамического буфера» и что «данные динамического буфера относятся к часто обновляемым данным, хранящимся в буфере».

MTLTexture ли MTLTexture как «часто обновляемые данные, хранящиеся в буфере», если он нуждается в обновлении в каждом кадре? Все примеры в руководстве выше сосредоточены на MTLBuffer s.

Я замечаю, что реализация Apple в MetalKit имеет концепцию nextDrawable , так что, возможно, это то, что происходит здесь?

Если команда может находиться в полете, и она может получить доступ (чтение / выборку / запись) текстуры, пока вы изменяете ту же самую текстуру на CPU (например, используя один из методов -replaceRegion:... или путем записи в резервную копию IOSurface), тогда вам понадобится технология с несколькими буферами, да.

Если вы только модифицируете текстуру на графическом процессоре (путем рендеринга на нее, записывая ее из функции шейдера или используя методы кодирования blit-команд для ее копирования), вам не нужна мультибуферизация. Возможно, вам понадобится использовать текстурный забор в функции шейдера или вам может потребоваться вызвать -textureBarrier команды визуализации между вызовами рисования, в зависимости от того, что вы делаете.

Да, nextDrawable предоставляет форму nextDrawable . В этом случае это связано не с доступом к ЦП. Вы будете отображать одну текстуру, в то время как ранее обработанная текстура все еще может быть на пути к экрану. Вы не хотите использовать ту же текстуру для обоих, потому что новый рендеринг может перегружать текстуру непосредственно перед тем, как она будет помещена на экран, что покажет поврежденные результаты.