Хобрук: Ваш путь к мастерству в программировании

Металл пропускает commandBuffer.present (drawable), чтобы не отображать рамку?

В моем приложении Metal для macOS у меня возникла ситуация, когда я хочу только время от времени отображать результаты рендеринга. Я хочу выполнять проход рендеринга каждый кадр и сохранять изображение текстуры в файл, но я хочу отображать рендеринг только каждый шестнадцатый кадр или около того. Я пробовал просто пропустить commandBuffer.present (drawable), когда я не хочу отображать, но он не работает. Как только я это сделаю, он просто перестанет отображать новые кадры. После пропуска одного вызова commandBuffer.present () он просто не отображает никаких новых кадров. Однако он продолжает работать.

Почему так могло случиться? Требуется ли, чтобы после фиксации командного буфера он был представлен?

Если я не могу заставить это работать, я попытаюсь выполнить рендеринг во внеэкранном буфере для тех кадров, которые я не хочу отображать. Но это будет лишняя работа и потребует больше памяти для закадрового буфера рендеринга, поэтому я бы предпочел просто использовать свой обычный экранный буфер рендеринга, если это возможно.

Спасибо!

18.08.2018

Ответы:


1

Необязательно, чтобы командный буфер имел возможность рисования. Я думаю, проблема в том, что после того, как вы получили объект для рисования, он не возвращается в пул, поддерживаемый CAMetalLayer (или, косвенно, MTKView), который его предоставил, до тех пор, пока он не будет представлен.

Не выполняйте рендеринг в текстуру, доступную для рисования, если вы не планируете презентацию. Рендеринг в текстуру вне экрана - правильный подход. Фактически, если вы всегда сначала визуализируете текстуру вне экрана, а затем копируете ее только для тех кадров, которые хотите отобразить, в текстуру, доступную для рисования, тогда вы можете оставить для свойства framebufferOnly свойства CAMetalLayer его истинное значение по умолчанию. В этом случае есть приличная вероятность, что вы не увеличите требуемую память (потому что текстура отрисовываемого объекта на самом деле является лишь частью резервного хранилища экрана).

18.08.2018
Новые материалы

Что такое структура данных?
Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

мои январские чтения по программированию
Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

Введение в машинное обучение для обнаружения аномалий (часть 1)
Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

Начало работы с Pulumi в Digital Ocean
Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..

#Day68 из #100days_of_coding
Вчера был мой 68-й день кодинга. я решил один вопрос Проблема: Разбить двоичную строку на подстроки с равным количеством нулей и единиц Дана двоичная строка str длины N . Задача состоит..