2016-07-29 4 views
-3

Вопрос довольно прост. В Windows у вас есть BitBlt() для рисования на экране. На OS X вы обычно можете использовать OpenGl, но как рисовать растровое изображение на экране с помощью новой металлической рамки Apple? Я не могу найти ничего ценного в ссылках на Яблоки. Я сейчас использую Core Graphics для части чертежа, но поскольку мое растровое изображение постоянно обновляется, мне кажется, что я должен перейти на Metal, чтобы уменьшить накладные расходы.Рисование растрового изображения с использованием металла

+3

вот почему нам нужно «недостаток минимального понимания» назад – tbodt

+0

Нет причин, по которым вам нужно будет использовать Металл для рисования изображений. '- [NSImage drawInRect:]' будет прекрасно. – tbodt

+0

Не слишком ли NSImage по сравнению с металлом? Что делать, если я обновляю растровое изображение 30 раз в секунду? Я попросил «Металл», потому что я хочу использовать «Металл». – user148013

ответ

1

Очень короткий ответ таков: во-первых, вам нужно настроить стандартный конвейер рендеринга с помощью Metal, который немного работает, если вы ничего не знаете о конвейере рендеринга (обратите внимание: но это можно упростить избегая трехмерного материала, создавая квадрат с двумя треугольниками, просто дайте xy координаты для вершин). Существует много примеров кода от Apple, который показывает, как настроить стандартный конвейер рендеринга, самым простым может быть MetalImageProcessing, поэтому вы можете снять этот снимок (хотя он использует сложный шейдер, который слишком усложнен для рисования, вам нужно заменить его на стандартные вершинные и фрагментарные шейдеры).

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

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

+0

Благодарим вас за ответ! Будет ли это быстрее, чем использование CoreGraphics? Предполагая, что я перерисовываю битмап 60 раз в секунду и что он довольно большой и используется для полноэкранного просмотра. В противном случае мне не нужно было проходить этот гораздо более сложный путь. – user148013

+0

Да, он будет быстрее, чем CoreGraphics, когда он настроен, вы можете визуализировать текстуру 1080p примерно за 1-3 мс с помощью Металла, чтобы он мог легко работать со скоростью 60 кадров в секунду, но независимо от того, будет ли это способ, зависит от нескольких факторов, в основном касаются того, что вы рисуете, как вы его рисуете, как быстро вы можете подготовить его для GPU (MTLTexture) или хотите ли вы рисовать с помощью шейдеров (что может быть очень неудобно), в последнем случае вы в основном имеете xy координаты, и весь ваш рисунок должен быть чистой математикой, нет удобных функций, которые вы найдете в CoreGraphics. – Gary

+0

Я не и не буду использовать любую библиотеку для рендеринга моих вещей в растровое изображение. – user148013

Смежные вопросы