0 Members and 2 Guests are viewing this topic.
а зачем кнопкам маска? маска нужна для элементов, внутри которых есть какое-то чужеродное содержимое (обложка альбома, дочерние элементы или т.п). Тут достаточно просто фоновой текстуры правильной формы.
а много таких в пределах скина? нельзя ли положить контейнер в контейнер? у верхнего будет маска, у внутреннего - заливка.
Итого, я пока вижу смысл в отдельном свойстве для маски только у Container-а и Panel-и (да, сейчас можно обойтись двумя вложенными, но лучше одним - быстрее будет работать). Еще имеет смысл для CoverArtDisplay (чтобы не рисовать прозрачный первый кадр, если фон не нужен), в общем-то и всё. Разве оно где-то еще имеет смысл быть?
Это маска видимости, а маска доступности для мыши может не совпадать с текстурой фона
А еще я мог бы нарисовать эти кнопки прямоугольной формы и задать им всем скругление уже отдельной маской которую еще и менять можно.
Маска доступности для мыши - это отдельный слой текстуры кнопки. Речь же шла про маску, которая применяется к контенту кнопки. Или я не правильно вас понял?
Не надо так делать. Каждая маска - это удар по производительности. Для отрисовки элемента с маской используется тройной буфер, + это программное отсечение по маске, это довольно небыстро. Поэтому там, где можно нарисовать сразу текстурой - лучше рисовать текстурой.
Если делать все через маски это куда более гибко и просто в редактировании.
Ну и то, и это, маски.
Заметил за собой что в половине случаев я не использую текстуры в качестве фона, я использую текстуры в качестве масок
Вроде изначально речь шла про маски при отрисовках? Или я не правильно понял?
Тут надо понимать, чем проще вам, чем больше работы отдаётся скин-движку, тем больше он будет делать на стороне пользователя.
А если текстура маски небольшая но растягивается на весь объект это та же самая тяжесть или это уже проще?
Да, изначально я поднял вопрос о необходимости рисовать маски с пустым пространством
Такая же. Размер текстуры лишь влияет на размер итогового скина. А скорость отрисовки - от размеров рисуемого слоя.Read more...Как работает наложение маски:1) Движок рисует маску во временный буфер по размерам элемента.2) Движок рисует содержимое (к которому должна применяться маска) во второй временный буфер.3) Затем, в третьем буфере формируется результирующее изображение - альфа-канал с первого буфера применяется к альфа-каналу второго буфера.4) И уже содержимое третьего буфера уходит на экран.Без маски:1) Текстура сразу рисуется на экран.Понятное дело, что плеер старается не перерисовывать области, которые не изменились, но отнюдь не то же самое, если бы маски вовсе не было.
Пустые кадры влияют разве что на сложность создания самих этих текстур. Движок полностью прозрачные кадры не рисует, т.ч. тут на производительности они никак не сказываются, но я был бы не против и этот момент упростить, но пока не очень понимаю сценарий использования.
Если попытаться использовать однокадровую текстуру маски то она будит применяться и как маска, и как фон, что в целом могло бы быть рабочим вариантом но, к сожалению это дает артефакты на сглаженных краях
Как часто у вас возникает именно этот сценарий? Т.е. когда идёт контейнер с маской, у него есть фон, но фон вы вынуждены задавать отдельным слоем именно из-за косяка сглаживания на краях?
Из-за косяка на краях я всегда вынужден использовать маску на втором кадре, так как маска всегда подразумевает криволинейность.
Подождите, если фон задаётся просто цветом, то откуда берутся косяки на краях?
Я пытался использовать маску на первом кадре присваевая ей цвет прямо в параметрах текстуры что в результате заставляет прозрачные пиксели на краях становиться еще более прозрачными из-за наложения маски самой на себя, но вот если на прямоугольный контейнер с заливкой цветом наложить текстуру того же цвета она там раствориться и применение маски не даст артефактов, в теории. Но это конечно такой костыль и лишние действия движка.