Быстрое рисование с использованием NSBezierPath рисует не менее 4000 сегментов - PullRequest
1 голос
/ 02 декабря 2010

Я пытаюсь нарисовать около 4000-10000 сегментов, используя NSBezierPath на каждом drawRect NSView (около 300x300 пикселей). Это очень трудоемкий ресурс, и рисование занимает много времени (относительно долго).

Может кто-нибудь предложить замену этому? Я пытался использовать один NSBezierPath для 1000 сегментов за раз, но он все еще слишком ресурсоемкий.

Я ищу любые возможные альтернативы. Я уверен, что OpenGL будет быстрее, но я не знаю, нужно ли мне изучать новую платформу, чтобы делать то, что мне нужно. Я открыт для предложений.

1 Ответ

4 голосов
/ 02 декабря 2010

Не ответ, только результаты теста

Я провел простой эксперимент с Mathematica. Этот эксперимент дает нам абсолютную верхнюю границу для вашего времени, так как я не использовал оптимизацию, графический процессор, интерпретируемый язык и т. Д. Поэтому я думаю, что гораздо более одного порядка достижимо.

Результаты:

Создание списка кривых Безье на 10.000

b = Table[
    {Hue[RandomReal[]], 
     BezierCurve@RandomReal[{0, 300}, {4, 2}]}, {10000}]; 

очень быстро, потому что mathematica ничего не оценивает.

Теперь рендеринг:

h1 = AbsoluteTime[]; Print@Graphics[b]; h2 = AbsoluteTime[]; Print[h2 - h1];

Time spent 11.8 secs

Результат:

alt text

PS: Намерение состоит в том, чтобы установить временные рамки для нашего мышления.

...