Почему OS X не имеет тех же мерцающих проблем, которые делает Windows?

Как насчет следующего?

irb(main):003:0> my_string = "Some text with a carriage return \r"
=> "Some text with a carriage return \r"
irb(main):004:0> my_string.gsub(/\r/,"")
=> "Some text with a carriage return "
irb(main):005:0>

Или...

irb(main):007:0> my_string = "Some text with a carriage return \r\n"
=> "Some text with a carriage return \r\n"
irb(main):008:0> my_string.gsub(/\r\n/,"\n")
=> "Some text with a carriage return \n"
irb(main):009:0>
10
задан Derek Park 22 September 2009 в 03:47
поделиться

3 ответа

И Windows Vista / 7, и OSX используют механизмы компоновки для рисования растровых растровых изображений на экране. Эти механизмы компоновки отвечают за обработку вывода из всех окон и рисование окончательного изображения экрана. Этот подход к композиции - это то, как OSX может использовать эффект джинна при сворачивании в док и как aero рисует полупрозрачные границы. Они также предотвращают мерцание, как если бы растровое изображение для заполнения определенной области экрана недоступно, оно будет использовать уже имеющееся изображение, а не рисовать пустую область.

OSX имеет механизм композитинга с момента его первой поставки. В то время многие люди считали это сумасшедшей оценкой, поскольку все поставляемые в то время видеокарты были оптимизированы для рисования растровых изображений (например, кнопок и границ окон), а не составных изображений. В более поздних версиях OSX композитинг был перенесен на графический процессор (в Quartz Extreme), что значительно снизило нагрузку на центральный процессор и сделало возможным больше эффектов.

Поскольку композитор Windows был добавлен только в Windows Vista и только тогда, когда был доступен графический процессор и у вас была правильная версия ОС, он не так широко распространен, как Quartz Compositer в OSX. Поскольку композитор не всегда используется в Windows, мерцание будет происходить, когда область будет очищена и приложение, ответственное за рисование, не сможет перерисовать область достаточно быстро.

это не так широко, как Quartz Compositer в OSX. Поскольку композитор не всегда используется в Windows, мерцание будет происходить, когда область будет очищена и приложение, ответственное за рисование, не сможет перерисовать область достаточно быстро.

он не так распространен, как Quartz Compositer в OSX. Поскольку композитор не всегда используется в Windows, мерцание будет происходить, когда область будет очищена и приложение, ответственное за рисование, не сможет перерисовать область достаточно быстро.

10
ответ дан 3 December 2019 в 15:52
поделиться

Mac OS X имеет окна с двойной буферизацией .

Вам не нужно ничего делать, чтобы это произошло. Это за кулисами.

Вы (почти всегда) явно не рисуете окно в Какао, когда что-то изменяется, вы аннулируете область окна. Позже структура будет спускаться по иерархии представлений и втягивать грязные области окна во вторичный буфер. Затем он меняет местами буферы.

При желании вы можете дать некоторые обещания, которые позволят фреймворку использовать ярлыки при перерисовке, но все они согласны. Это затрагивает только опытные представления.

Если ваш подкласс NSView реализует метод isOpaque для возврата YES, то инфраструктура никогда не очистит что-либо позади вашего представления или нарисует какие-либо представления под ним.

Реализация preserveContentDuringLiveResize для возврата YES дает вам некоторые дополнительные обязанности, но может улучшить производительность при изменении размера окна.

10.6 добавлены еще два новых API такого типа, layerContentsRedrawPolicy и layerContentsPlacement .

Наконец, пользовательское рисование встречается реже, чем в Windows. Большинство представлений, которые вы видите, предоставлены фреймворком, а не подклассами. Поставляемый фреймворком означает оптимизацию Apple.

Большинство представлений, которые вы видите, предоставлены фреймворком, а не подклассами. Поставляемый фреймворком означает оптимизацию Apple.

Большинство представлений, которые вы видите, предоставлены фреймворком, а не подклассами. Поставляемый фреймворком означает оптимизацию Apple.

16
ответ дан 3 December 2019 в 15:52
поделиться

Ага, это все автоматически с двойной буферизацией. Конечно, если вы бежите устаревший код из Mac OS 9 или код, перенесенный из Windoze, это означает, что вы возможно тройная буферизация, не зная об этом. Эй, велосипеды дешевы!

1
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: