Вот оно, ребята, GUI моей мечты! :D Не, ну оформление конечно кака, но не суть ) Главное ведь что оно своё :3
upd: дада! Опять без скина GUI ) Скины поддерживаются но мне лениво их рисовать :D
Что изменилось:
Теперь рендеринг всего GUI идёт обычно в 1-5 DIP-ов а не в 100500 как раньше. Сам по себе GUI не только может, но и рисуется ровно в 1 DIP, однако дополнительные ДИП-ы нужны, если в нём юзаются пользовательские текстуры! На скрине, приведённом выше, количество DIP-ов = 3 потому что вон та хренька красная сверху слева - это текстура сцены, которая какраз перед рендером GUI и рисуется. Из за неё и не 1 а 3 дипа: рисуем GUI до картинки, рисуем картинку, рисуем остальное.
То есть я вместо моего адски дебилоидного рендеринга (каждый элемент рисовал сам себя, имел СВОЙ вершинный и константный буфер..омг) сделал чоткий батчинг : )
На самом деле это конечно не сложно совсем. Но кое что изначально слегка напрягло: родительские контролы должны собой обрезать дочерние контролы, чтобы дочерние не рендерились за границами родительских. Раньше я рекурсивно рендерил, постоянно спуская ScissorRectangle и применяя его для каждого контрола. И было всё вздрыжне. НО! Теперь то у меня всё всё всё может нарисоваться за 1 DIP! И Scissor хардварный не применить ( Бида! Вот пришлось симулировать его - вручную обрезаю scissor-ом квады контролов (модифицирую геометрию и текстурные координаты квадов). Впринципе тоже детсвкая задача : ) Обрезание геометрии делается прямо во время её генерации, а генерация вызывается если изменился scissor. Всё просто.
На скрине новые контролы (сейчас сел и допилил их):
1. ScrollBar - он один для вертикального и горизонтального скроллирования! Конструктор требует, чтобы юзер указал направление скроллинга
2. ScrollablePlane - вон тот квадратик посреди скрина с 2 скроллами сразу. ScrollablePlane - наследник Plane + добавил скроллы. Можно скроллить теперь контент очень удобно : ) Надо бы прикрутить "кинетические скроллы" (точнее эти модифицировать), чтобы можо было дёрнуть ползунок, а он ещё будет некоторое время двигаться, останавливаясь (как сейчас на мобилах любят делать)
Adios, ушёл дальше болеть : (
Комментариев нет:
Отправить комментарий