пятница, 12 декабря 2014 г.

Проблема отсечения фреймов

И осталось-то всего ничего, воткнуть меню и радоваться работе новой оконной системы. Но, как говорится, джек-пот подкрался незаметно. Конечно, незаметность тут условная, причины затыка были очевидны с самого начала пиления буфера на OpenGL, только не было повода хорошенько разобраться с проблемой.

Итак, вот она, матрёшка. Тёмное отображение (оно ещё с зелёным перекрестьем) встроено в серое (синее перекрестье) со сдвигом, а серое врезано в белое (красный периметр) без сдвига. И результат отсечения на эталонном Блэкбоксе выглядит так, как и должен выглядеть:

Фрейм серого отображения отсекает нарисованное в тёмном автоматическим образом.

 А вот та же самая матрёшка на SDL-хосте. Как видим, отсечения не произошло и невидимые линии тёмного отображения отлично видны:

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

Так что меню втыкать рано, надо сперва победить отсечение.

воскресенье, 30 ноября 2014 г.

Оконный менеджер

Прототип оконного менеджера задышал. Фишка в том, что он делается полностью средствами самого Блэкбокса. То есть, используются отображения - Views.View.

Собственно, ничего военного тут нет. Главное, аккуратность и внимание к деталям. Тогда результат будет удобен в работе. На видео заметно, как меняется цвет бордюра, как работает изменение размеров, как окна передвигаются мышой:

Так что, движемся. Всё-таки решение отказаться от многооконности SDL было правильным. Чем мучаться с ограничениями SDL, так лучше заиметь полностью контролируемые окна. А ведь этот гуй можно будет втереть даже в игровой движок. Двойная выгода!

среда, 12 ноября 2014 г.

Новый этап

Проект перешёл на новый этап. Достигнуты новые возможности, появились новые участники.


Итак, что сделано. Новый хост успешно открывает документы в окнах, текстовая подсистема спокойно рендерит текст, есть обработка шорткатов, перетаскивание, копипаст.


Главное меню открывается как отдельное отображение в окне, подменю в отдельном окне, но здесь-то и произошёл затык. SDL в качестве менеджера окон не годится в силу урезанной поддержки оконных возможностей (что, в общем-то, правильно, ведь задача небольшого SDL не в красивой и богатой оконной функциональности). Поэтому решено делать свою оконную подсистему.

Ну а репозиторий проекта переехал на gitlab.molpit.com, там же открыт баг-трекер.

вторник, 22 апреля 2014 г.

SDL + OpenGL. Начало

Наша компонентная привязка к SDL получила возможность рисовать на контексте OpenGL. А это значит, что скоро SDL-хост сможет, наконец, выполнять весь контракт по рисованию на порте.

понедельник, 14 апреля 2014 г.

Проблема выбора интерфейса аппаратного ускорения

Наш новый SDL-хост начал работу с команды Views.OpenView, которая открывает отображение в новом окне.
На данный момент наше отображение успешно рисует прямоугольник и пару линий. Это всё, чему удалось научить HostPorts.Rider. Вроде бы, можно смело двигаться дальше, но тут нас поджидает подводный камень, в виде очень примитивного базового интерфейса SDL.

Дело в том, что интерфейс Ports.Frame предоставляет функции рисования не только линий и прямоугольников. Фрейм способен нарисовать полигон, с заливкой и без. Можно рисовать окружности, с заливкой и без. Да и обычным линиям можно задавать толщину, а окончания линий рисуются в виде окружности (что улучшает вид ломаных). Прямоугольники тоже можно рисовать линиями разной толщины.

Конечно, на SDL можно изобразить необходимые примитивы с помощью базовых возможностей, но рисоваться всё это будет медленно, к гадалке не ходи. Кстати, сам автор SDL, Сэм Лантинга, тоже задавался этим вопросом и пришёл к логичному выводу: зачем заниматься тормознутым самодельным рендерингом, когда давно есть OpenGL с Direct3D, умеющие рисовать с аппаратным ускорением.

Поэтому нам надо выбирать, на какой интерфейс ориентировать BlackBox. Раньше я считал, что лучшим решением будет использование только средств SDL, но теперь становится очевидно - выбора не избежать. А выбор для нас тоже очевиден - OpenGL.

Таким образом, наш SDL-хост уже нельзя будет считать чисто SDL-платформенным. Весь рендер в нём будет плотно завязан на возможности OpenGL. Но, кстати, в наших силах использовать компонентность так, чтобы это не мешало развитию хоста.

вторник, 18 марта 2014 г.

Что делать дальше?

Итак, пускач для SDL-хоста работает. Средствами SDL мы окно успешно создали. В каком направлении двигаться дальше, как развивать новый хост?

Ответ на этот вопрос может дать понимание документоориентированности каркаса BlackBox. Кроме этого, каркас поддерживает разделение на пространство отображения и пространство документа. Любое окно в нём связано с объектом документа. Стало быть, нам надо научить SDL-хост открывать документы.

А как же открываются документы, и вообще отображения в эталонном BlackBox? Чтобы это понять, пришлось произвести небольшой анализ, который может оказаться полезным всем, кто интересуется внутренним устройством каркаса.

суббота, 15 марта 2014 г.

SDL-хост. Первый шаг сделан.

Отдельной подсистемой появился SDL-хост, согласно идеям герметичности. Для него был собран отдельный пускач x86sdl.exe. Сейчас разработка идёт под Windows, когда каркас поднимется полностью, перенесём и на Linux.

Третьего дня отладили инициализатор, который открывает окно SDL и запускает главный цикл (event loop).

Первая демка успешно отрисовала примитивы:

Постоянные читатели