Intereting Posts
Как я могу улучшить отзывчивость кнопок в веб-приложении для iPad-киосков? Хранение кода шейдера из отладчика XCode OpenGL ES Как я могу программно отказаться от клавиатуры? UIDynamicAnimator / UIAttachmentBehavior jiggle? Необходимо удалить границу между ячейками в UITableView при использовании фонового изображения в iOS Невозможно выполнить выход в подключенный пользовательский класс UITableViewCell Общее представление между двумя иерархиями представлений Доля кода CoreData с iOS и Mac OS X CFBundleShortVersionString в info.plist должен быть выше 1.0 Что значит ??? означает в iOS Отображение исключений при отправке запроса на сервер с использованием метода post Создание члена для класса UIViewController Данные о движении iPhone заблокированы параметром Calass Calibration Индикатор страницы вкладки iOS Отслеживание местоположения в фоновом режиме в iOS: стандартное управление местоположением и мониторинг региона

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

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

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

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

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

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

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