CPU3D.com2D графикаО 2D графике → Простой рендеринг нескольких окон без аппаратного ускорения

Простой рендеринг нескольких окон без аппаратного ускорения

измерение информации

Изначальный способ 2D-рендеринга, который скрывается под наложением окон на экране дисплея, прост и прямолинеен. Нам нужно знать два параметра: первый – это область на экране внутри каждого окна, которая будет меняться (поэтому её требуется перерисовывать). Второй – это порядок, в котором окна или объекты накладываются друг на друга (будет ли объект виден полностью или частично, либо он будет закрыт другим окном). Данный тип информации требует так называемого 2, 5-мерного измерения или использования слоёв графики, когда третья координата принимает значение 0 (скрытая) или 1 (видимая), то есть выступает как своего рода вспомогательное измерение. Именно по этой причине многие эксперты в области Windows много говорят о графике 2, 5D.

После того, как с порядком или видимостью окон всё будет определено, содержимое видимых окон может выводиться с помощью чистых двумерных графических функций. В любом случае, необходимо не только просчитывать содержимое окон дисплея полностью, но также нужно управлять различными типами информации и контентом окон. Что случится, например, если окно будет перемещено? Когда другое окно содержит область, которая полностью или частично открывается в результате этого действия, то должна быть вызвана системная графическая функция WM_PAINT с точной информацией о том, какую прямоугольную область следует перерисовать. Оптимизированные реализации функции будут реконструировать или перерисовывать эту область. К сожалению, многие реализации вместо этого перерисовывают окно полностью, несмотря на возможность доступа к более точным инструкциям, независимо от того, требуется полностью или частично воспроизвести содержимое окна. Это, в свою очередь, оказывает влияние на графическую производительность. Другой недостаток хорошо известен – он заключается в размывании или дублировании, когда окно начинаешь быстро перетаскивать по всему экрану на системе, где отсутствует аппаратное ускорение 2D.

Но позвольте подвести итог тому, что мы рассмотрели на данный момент. На дисплее есть отдельные окна, чей двумерный контент должен отрисовываться на экране, чтобы его можно было видеть. Эти окна можно двигать как угодно, при этом они могут перекрываться и частично или полностью закрываться другими окнами. Необходимо управлять видимым содержанием всех этих окон, его требуется выводить на экран с минимальной задержкой. Мы также знаем, что сам по себе CPU, пусть даже это будет очень быстрый процессор, может слишком сильно нагрузиться при выполнении подобных сложных задач. Какие есть выходы, кроме того, чтобы переложить эту нагрузку на видеокарту? Что для этого требуется? И почему всё звучит проще в теории, чем реализуется на практике? Всё это мы рассмотрим чуть ниже.



Источник: http://www.thg.ru