Forth
http://www.fforum.winglion.ru/

Quark C64
http://www.fforum.winglion.ru/viewtopic.php?f=23&t=3165
Страница 4 из 4

Автор:  VoidVolker [ Чт фев 21, 2019 00:29 ]
Заголовок сообщения:  Re: Quark C64

Hishnik писал(а):
В целом там форт-машина упакована в два массива - код и данные. Если их сохранить и потом загрузить, компиляцию можно будет пропустить. Правда, возможен вариант, когда при старте будет генерироваться много данных, и попытка записи непомерно раздует сохраняемые файлы.

Отлично, думаю вполне нормальное решение. Генерацию больших объемов данных можно и отложить. Да и при современных объемах и характеристиках ПК даже несколько мегабайт данных это ничтожно мало.
Hishnik писал(а):
Свой экран есть у форт-машины, его можно достать в Qt при необходимости. Виджеты создаются движком Qt, но их параметрами управляет форт-машина. Наложение виджетов на экран Форта может быть некоторой проблемой из-за особенностей отрисовки, но можно будет делать виджет "изображение" и связывать его с экраном Форта.

Вот как. В таком случае, думаю виджет вполне подходящее решение. Тогда, возможно, имеет смысл сделать экран не один, а инстансом — т.е. вот есть экран по умолчанию, но если надо — то можно еще наклепать сколько надо и сделать их виджетами? Чтобы можно было сделать несколько виджетов и/или окон. Например при наличии двух мониторов можно будет на один вывести красивую 3D графику, а на втором разные элементы управления, виджеты или еще что-то нужное. Или для каждого экрана лучше просто делать отдельную форт-машину форком в отдельном потоке?

Автор:  Hishnik [ Вс фев 24, 2019 18:44 ]
Заголовок сообщения:  Re: Quark C64

Начал работать TextEdit. Загрузка, сохранение, подсчет строк и отправка i-й строки в форт-машину.

Вложения:
screen02.png
screen02.png [ 39.05 Кб | Просмотров: 24660 ]

Автор:  Hishnik [ Пн июл 01, 2019 01:08 ]
Заголовок сообщения:  Re: Quark C64

Немного предсказуемый, но все равно неприятный эффект - никакие ухищрения с QImage и отложенным обновлением отрисовки не помогают привести двумерную графику к приемлемому уровню производительности. Проблема в отсылке сообщений из Форта в Qt - каждый пиксель надо "обернуть" в сообщение, поместить в FIFO, а оттуда его заберет основной поток приложения. А это все существенно медленнее, чем просто писать в массив. Так что еще одно препятствие образовалось на пути к красивым приложениям...

Автор:  Wlad [ Сб июл 06, 2019 12:11 ]
Заголовок сообщения:  Re: Quark C64

Hishnik писал(а):
... каждый пиксель ...

А - зачем каждый и - по одному?
Или - задачей диктуется?

Автор:  Hishnik [ Сб июл 06, 2019 21:04 ]
Заголовок сообщения:  Re: Quark C64

В принципе, какого-то специального требования нет. Однако аналог объекта Canvas очень даже удобен. Достаточно просто ставить пиксели и другие объекты куда-то в буфер, а они оттуда сами забираются. Так сделано в Кварке, где вся графика рисуется без всякого знания о GDI со стороны программиста, просто буфер регулярно забирается движком Кварка и посылается на экран (с самостоятельным определением реального размера и прочего). По сравнение с написанием обработчика wm_paint это существенно проще, потому что при необходимости вывода чего-то другого в другой части программы уже не нужно думать, как это будет стыковаться с уже написанным для wm_paint кодом.

Я уже посматриваю в сторону QImage.loadFromData, который может принимать на вход указатель на массив, содержащий графический файл. В принципе, нет ничего сложного в подготовке bmp в самой программе, достаточно сделать фиксированный заголовок. Чуть неудобнее то, что инициировать отрисовку этого bmp придется программисту же, каждый раз, когда он захочет увидеть на экране сделанные изменения.

Автор:  Hishnik [ Пн июл 08, 2019 02:08 ]
Заголовок сообщения:  Re: Quark C64

Уфф. Создание в памяти bmp, похоже, работает. И с учетом того, что момент обновления выбирается в программе, скорость вполне приличная. Остается еще один интересный вопрос - ведь с таким подходом "экранов" в программе становится много - столько, сколько будет создано QImage для вывода картинок.

Вложения:
neutron001.png
neutron001.png [ 3.01 Кб | Просмотров: 23213 ]

Автор:  vikt [ Пн июл 08, 2019 15:49 ]
Заголовок сообщения:  Re: Quark C64

Возможно не к месту, я использовал простой формат ppm
https://ru.wikipedia.org/wiki/Portable_anymap
он элементарно пишется и читается всем, чем угодно

P6
#тут возможна строка комментариев это текстовый заголовок
X Y
255
тут конец текстового заголовка, идут байты rgb в количестве X*Y

Автор:  Hishnik [ Пн июл 08, 2019 21:46 ]
Заголовок сообщения:  Re: Quark C64

vikt писал(а):
Возможно не к месту, я использовал простой формат ppm
https://ru.wikipedia.org/wiki/Portable_anymap
он элементарно пишется и читается всем, чем угодно

Действительно, интересная штука. Вот возможность записи/чтения в очевидной текстовой форме как раз и подкупает. Только боюсь, на обработку придется тратить больше времени. bmp все-таки самый простой вариант с точки зрения представления пикселов, причем достаточно фиксированного заголовка. Пока тестирую написанное, и скорость у bmp более или менее приемлемая. Понятно, что игровая графика при такой реализации получается с натяжкой, но для нее есть OpenGL.

Автор:  vikt [ Пн июл 08, 2019 23:50 ]
Заголовок сообщения:  Re: Quark C64

В P6 только заголовок текстовый, rgb - это обычные бинарные байты
по байту на каждый цвет.

Автор:  Hishnik [ Вт июл 09, 2019 00:33 ]
Заголовок сообщения:  Re: Quark C64

Да, вот тут написано, что ppm поддерживается.
https://doc.qt.io/qt-5/qimage.html#reading-and-writing-image-files

В принципе да, получается просто еще одна разновидность двумерного массива пикселов (что и нужно), просто с другим заголовком.

Автор:  Victor__v [ Сб сен 28, 2019 10:23 ]
Заголовок сообщения:  Re: Quark C64

Ну так что?
Есть 64-битный Кварк в виде DLL?

Если есть, то какие конвенции вызозов поддерживаются.
И может ли Кварк пересохранить себя в виде DLL c записью новых функций в секцию экспорта?

Автор:  Hishnik [ Сб сен 28, 2019 17:32 ]
Заголовок сообщения:  Re: Quark C64

Victor__v писал(а):
Ну так что?
Есть 64-битный Кварк в виде DLL?

Нет, он такой пока не нужен. Он в виде forth.h и компилируется в составе проекта - например, с GUI. Соответственно, и dll создает пускай внешняя программа.

Автор:  Hishnik [ Вт июн 16, 2020 04:39 ]
Заголовок сообщения:  Re: Quark C64

QChart прошел по той же схеме подключения

Вложения:
qt2.png
qt2.png [ 182.89 Кб | Просмотров: 17577 ]

Страница 4 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/