1

Тема: Маски

На данный момент есть большое неудобство связанное с использованием масок. По нашей идее маска должна распространять свое действие только на свою подгруппу и не влиять на другие группы. Например
1
1.1
1.2
...
1.n
2
2.1
2.2

маска созданная в подруппе 1.1 должна уметь оказывать влияние на группы 1.*, но не должна сказываться на группе 2 и её подгруппах. А маска созданная в подгруппе 1.1.1 дожна "работать" только на 1.1.* причем не замещая 1.1, а перемножаясь с ней. Сейчас это не так.

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

2

Re: Маски

Здравствуйте!
К сожалению, разрабатывая механизм масок нам пришлось исходить из наших возможностей и думать о скорости прорисовки. Как мы поняли, речь идёт о маскировании телами примитивов. Данный механизм полностью основан на использовании буфера трафарета, который выделяется в видеопамяти видеоадаптера. При создании маски, прорисовка идёт не в буфер кадра, а именно в буфер трафарета. Чтобы группа 2 получила в распоряжение чистый слой маски, буфер трафарета необходимо очистить. А это достаточно затратная операция, время которой измеряется уже вплоть до миллисекунды. При этом не понятен критерий, для какой группы нужно очищать трафарет, а для какой нет. Что, если группе 1.2, как и группе 2, потребуется чистая маска? Таких очисток трафарета может происходить много, что в результате ‘убьёт’ производительность любой самой современной видеокарты.
Поэтому, реализуя механизм маскирования телами примитивов, мы перешли на более низкий уровень, дав пользователю возможность самому управлять очисткой слоя маски.
Режим прорисовки группы ‘Новая маска’ необходимо использовать в самом крайнем случае. Если область, которую на самом деле необходимо очистить небольшая, то может оказаться более быстрой по времени очистка этой области с помощью вырезки из маски телом, например, залитого прямоугольника.
Старайтесь всегда, когда это возможно, использовать отсечение с помощью секущей линии или секущего прямоугольника. Практически всегда они реализуются аппаратно и работают достаточно быстро.
По поводу дуги эллипса, посмотрите, пожалуйста, приложенный файл проекта.

Post's attachments

Иконка вложений ellipse.fpproj 4.44 Кб, 222 скачиваний с 2017-04-18