OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 08 Июль, 2025 23:41

Часовой пояс: UTC + 3 часа


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему  [ Сообщений: 688 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 35  След.
Автор Сообщение
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 25 Июль, 2023 19:02 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
собственно, вот. привинтил максимально тупо: собираю обращения в списочек, в конце процедуры проверяю.

списочек нужен затем, что мы можем иметь такое:
Код:
PROCEDURE Nested;
BEGIN
  SomeCall(Nested);
  UP.i := 029AH
END Nested;


здесь в момент `SomeCall()` компилятор ещё не в курсе, что дальше есть `UP`, и спокойно такой код пропустит; так что проверять надо в конце. в подавляющем большинстве случаев в списочке NIL, так что особо ничего не портит.

ради безопасности и упрощения вложеные во вложеные (и так далее) считаются небезопасными если любой их родитель имеет `UP`. ну право, не стоит такие извращения писать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Суббота, 29 Июль, 2023 01:35 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
добавил отвратительный, но полезный хак: команду компилятору быстренько зарезолвить все forward type declarations. надо попросить `TYPE:RESOLVE;` — и он сделает. хак недокументирован специально, потому что не надо его использовать.

зачем такое? а вот зачем, например:
Код:
   TYPE
      Cluster* = POINTER [untagged] TO ClusterHeader;
      ClusterHeader* = RECORD [untagged]
         size-: SIZET;   (* total size *)
         next-: Cluster;
         gcCount: INTEGER   (* number of times this cluster was unused in collections *)
         (* start of first block *)
      END;

   TYPE:RESOLVE;   (* UltraPascal hack: resolves all forward type references. required for SIZE below. *)

   CONST
      ClusterHeaderSize* = (SIZE(ClusterHeader) + 16 - 1 + 4) DIV 16 * 16 - 4;

без принудительного резолва тип поля `ClusterHeader.next` в момент объявления константы неизвестен, и `SIZE()` не получается.

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

форсить резолв по встрече CONST/VAR нельзя, потому что некоторые стандартные модули приходят в экстаз. например, интерфейс к libc довольно грязно сделан, и объявляет переменные посреди описания типов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Суббота, 29 Июль, 2023 13:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
чота я с этим хаком поторопился — привычка пихать хаки как первое решение. можно ведь намного проще: при встрече VAR/CONST просто вызывать разрешалку типов с флагом: «а не кидай ошибки, дорогой, молчи!» тогда и хак не нужен: что не смогли починить — оставлять в списке на починку, который потом обработается правильно. там в разрешалке всё так и делается, а ошибки кидаются отельным циклом в самом конце — который можно спокойно обернуть в условие.

в оригинале так не делалось для скорости — но мы давно уже никуда не торопимся. запилил — работает. хак больше не нужен, компилятор автоматически сделает всё, что сможет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Суббота, 29 Июль, 2023 23:30 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
пора дизайнить полезное. поскольку одна из целей разработки LC — писать ретровидеоигори и прочее бесполезное (гыг), надо делать для LC аналог SDL.

по плану это будет отдельный интерфейс в HostBackends, плюс апи повыше в подсистеме Quackerjack (Qjack). оно, собственно, и будет уметь только необходимый минимум: сделать окошко с OpenGL-контекстом, получать события от клавомыши, да показывать задний буфер OpenGL по команде. само окно даже не View, и View'ы туда складывать нельзя, конечно. а, ещё окну должна быть возможность установить желаемый FPS, чтобы сообщение «готовь новый кадр» посылалось с нужной частотой (которая может быть меньше, чем квант внутри Loop).

вся эта механика должна быть интегрирована в обычный главный цикл, чтобы можно было открывать как Q-окна, так и нормальные (для удобства написания всяких там редакторов, например).

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

самая неприятная проблема, кстати — это обработка мыши. если надо, чтобы мышью управлялась какая-нибудь камера в 3д, то сразу возникает куча граблей. начиная с того, что мышь надо постоянно центрировать в окно (нет, просто грабать нельзя, тогда в иксах на другую задачу не переключиться), и дальше по проспекту «блин, дайте мне relative motion без системной акселерации, у меня своя акселерация!» до тупика отчаянья.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 00:32 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
в общем, сижу, дизайню интерфейс. совершенно уверен, конечно, что первый блин получится как голубцы семён семёныча, но надо ж с чего-то начинать. поддержку шинды пока делать не буду, потому что лень; да и смысла нет, пусть интерфейс сначала устаканится.

по некотором размышлении я решил, что возможность делать окна без OpenGL не нужна. не вижу в этом никакого смысла: OpenGL сразу даёт кучу фич типа альфа-блита, поворотов и прочих приятностей, которые без него надо опять пилить ручками на асме, и использовать это всё равно никто (читай: я) не будет. на самый крайний случай у нас есть модуль Drawings, который стандартная рисовалка. его можно использовать для «обычного рисования», и потом просто обновлять текстуру его буфером.

а к OpenGL обращаться будем через стандартные бинды, которые я сгенерю из хроносовых xml, и положу в Host. зря я, что ли, генератор пилил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 03:19 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 144
Откуда: Equestria
arisu писал(а):
при встрече VAR/CONST просто вызывать разрешалку типов
А если TYPE MyArray = ARRAY SIZE(MyRec) OF Something или типа того?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 03:29 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
SovietPony писал(а):
arisu писал(а):
при встрече VAR/CONST просто вызывать разрешалку типов
А если TYPE MyArray = ARRAY SIZE(MyRec) OF Something или типа того?
а мне такое не встречалось, и я об этом не подумал. ;-) на самом деле можно и после каждого нового типа вызов крутить. как только понадобится — вставлю и туда.

p.s.: но вообще, есть хак: просто пустое `CONST` без ничего. на удивление, парзер позволяет `CONST TYPE A = …`.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 05:22 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
что-то у меня настроение плохое. переведу LC полностью под GPLv3 поэтому. официальному 2.0 официально разрешаю брать код под старой MIT^w 2-clause BSDL, а остальные пусть склоняются перед GPL. такие дела.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 05:50 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
а. и само собой, добавил code of conduct. без него никак.
Код:
Article 1.   This is the Code of Conduct.

Article 2.   Anyone advocating or suggesting modifications to this Code of Conduct shall be immediately removed and banished from this organization/project.

Article 3.   There is no Article 4 or any other substance to this Code of Conduct beyond this Article, Article 3.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 06:36 

Зарегистрирован: Суббота, 04 Май, 2019 10:21
Сообщения: 29
arisu писал(а):
SovietPony писал(а):
arisu писал(а):
при встрече VAR/CONST просто вызывать разрешалку типов
А если TYPE MyArray = ARRAY SIZE(MyRec) OF Something или типа того?
а мне такое не встречалось, и я об этом не подумал. ;-) на самом деле можно и после каждого нового типа вызов крутить. как только понадобится — вставлю и туда.

p.s.: но вообще, есть хак: просто пустое `CONST` без ничего. на удивление, парзер позволяет `CONST TYPE A = …`.
it seem that the DevCPP.Type need a fixup:
Код:
IF (id = NIL) OR (id.mode = -1) OR (id.mode = Typ) & IncompleteType(id.typ) THEN   (* forward type definition *)
            name := DevCPT.NewName(DevCPS.name);
            IF (id # NIL) & (id.mode = Typ)  THEN typ := id.typ;END;(*add this line*)
            DevCPS.Get(sym);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 09:12 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
luowy писал(а):
it seem that the DevCPP.Type need a fixup
i don't get it. what it fixes, and why? i mean, could you give a code sample which needs this fix, please? incomplete types should not work in SovietPony's case, this is not a bug.

p.s.: oh, and i forgot. you can take any my code too, it is still BSDL for you. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 10:24 

Зарегистрирован: Суббота, 04 Май, 2019 10:21
Сообщения: 29
arisu писал(а):
luowy писал(а):
it seem that the DevCPP.Type need a fixup
i don't get it. what it fixes, and why? i mean, could you give a code sample which needs this fix, please? incomplete types should not work in SovietPony's case, this is not a bug.

p.s.: oh, and i forgot. you can take any my code too, it is still BSDL for you. ;-)

I test this code with bbCenter 1.73
Код:
MODULE TestTypeSize;

   IMPORT Log := StdLog,SYSTEM;
      
   
    TYPE
      Cluster* = POINTER [untagged] TO ClusterHeader;
      ClusterHeader* = RECORD [untagged]
         size-: INTEGER;   (* total size *)
         next-: Cluster;
         gcCount: INTEGER   (* number of times this cluster was unused in collections *)
         (* start of first block *)
      END;

 
   CONST
      ClusterHeaderSize* = (SIZE(ClusterHeader) + 16 - 1 + 4) DIV 16 * 16 - 4;


   TYPE MyArray = ARRAY SIZE(ClusterHeader) OF INTEGER;

   
END  TestTypeSize.
after this fixup, it worked;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 30 Июль, 2023 10:46 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
i see. but i don't fully understand what is going on there, and what unforseen consequences that may have, so i'd better avoid applying that patch for now. but i'll try to get my mind around it later. thank you!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 01 Август, 2023 01:26 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
ура. квагговое окно открывается, получает события, и в нём даже можно порисовать через OpenGL (ну, по крайней мере почистить его в красный цвет).

заодно докинул импорты для OpenGL разных версий. разделил для уменьшения размеров на разные модули; всё, что выше версии 1.1 автоматически импортируется в момент первого вызова.

также квагоокну можно установить желаемый FPS. ежели установлен — главный цикл будет стараться посылать событие о новом кадре через правильный промежуток времени. теоретически, потому что на практике эта механика ещё не тестировалась.

в общем, ещё немного секса — и можно будет писать 2д платформеры. правда, без звука пока: надо сделать импорты для OpenAL и всяких библиотек-декодеров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 01 Август, 2023 08:04 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
все любят скриншоты. я знаю. и видео тоже любят, но видео потом.

на шоте открытое Quackerjack-окошко, в нём зелёный прямоугольник, а поверх текстурный атлас. через OpenGL. атлас загружен из png встроеной читалкой (Raster). вся эта дребедень перерисовывается шыйсят раз в секунду, хоть оно из шота и неочевидно.

естественно, среда в это время вполне рабочая: ей квагга-окошко совершенно не мешает.


Вложения:
2023_08_01_07_59_09_736x545.png
2023_08_01_07_59_09_736x545.png [ 10.2 КБ | Просмотров: 4405 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 01 Август, 2023 09:58 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
ну и кстати: убрал LinGtk и WinMdi. оба устаревшие, оба только добавляют ненужных проблем, оба бесполезны. про mdi и так всё ясно: тяжёлое наследие тёмного прошлого. а X11 сейчас намного круче и фичастей, чем готэка; и дотягивать готэка до этого уровня я смысла не вижу. кто-то может разве что пострадать по (не очень хорошо) сглаженым линиям из панги, но сглаживание можно реализовать и в фрэймбуферной рисовалке. мне просто не надо, но можно — или спереть из A2, или допилить AGGLite (я показывал предварительный порт со сглажеными полигонами).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 01 Август, 2023 21:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
и приделал экспериментальный mouse warping. хоть я и не собираюсь пока делать AAA-тржиде-шутан. вообще, надо бы делать режим чтения мыши через xi2, но мне так лень туда нырять… короче, понадобится — тогда. а так-то я просто хочу 2д игори в окошечке.

ну, и для виндоверсии я Q-бэкэнд не сделал. оно можно, но мне не нужно. на самом деле самая большая проблема в том, чтобы таймер тикал с частотой в миллисекунды, а не десятки миллисекунд. для чего надо переписывать event loop — а я вообще винду не использую, например. так что когда-нибудь я, конечно, сделаю, но вряд ли скоро.

тем не менее, API для батлнека более-менее вырисовывается. это, по сути, отдельный бэкэнд; просто главная получалка сообщений от системы должна знать о таких бэкэндах, чтобы сообщения для них обработать иначе. благодаря этому оно и в обычный цикл сообщений встраивается seamless. конечно, штука опциональная: можно просто не реализовывать. именно поэтому я в отдельный бэкэнд вынес.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 03 Август, 2023 05:08 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
кстати, НЕНАВЕЗДЬ. почему текстовый контроллер делает вид, что не в курсе про нажатые ctrl, alt и ты пы, и позволяет вставлять в текст такие буковки? в смысле, если, например, Ctrl+T ни на что не забиндена, то оно вставит буковку «t». и зачем мне в тексте вот такое?

я подозреваю, что это тяжёлое наследие винды (и, может, мака — не в курсе, как там): винда отдельно присылает KEYDOWN и CHAR. и для ctrl+x чары не шлёт. в общем, заблокировал такие фокусы, а то надоело: промажешь по хоткею — и сразу в текст гадит.

заодно сделал возможность в кейкомбах второй и дальнейшие кнопочки иметь или без модификатора вообще, или с любым модификатором. потому что, например, я привык букмарки ставить через «C-k C-1», но иногда сбиваюсь на «C-k 1». или ещё какой модификатор нажму нечаянно. почему, собственно, я должен подстраиваться под машину, а не машина под меня?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 04 Август, 2023 01:48 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
хочу: переделать TextModel на деревья. сделать lazy sweep в GC. сделать потокобезопасный GC (мне надо). сделать View с OpenGL-контекстом внутри (для всяких редакторов). допилить Quackerjack, сделать бинды к OpenAL и демо-платформер. это не считая нескольких проектов чисто для личного пользования.

проблема: в сутках всего двадцать четыре часа, и те нормально использовать не выходит — потому что я где-то потерял десять своих клонов, а без них задачи никак не параллелятся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Суббота, 05 Август, 2023 05:42 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1559
кстати сказать, реализовать OpenGL View — весьма нетривиальная задача; именно поэтому я сделал отдельное окно. собственно, тут только один нормальный вариант реализации: перевести весь рендер на OpenGL, и вдобавок выделять каждому фрэйму свой задний буфер. иначе композитинг работать толком не будет.

вариант второй, кривой — использовать тот же трюк, который использует BBCB на винде, чтобы показывать нативные контролы, и получить всю кучу сопутствующих проблем. я планирую именно это. конечно, тут куча ограничений, и вдобавок проблема с тем, что поверх такого View нельзя класть другие views. то есть, можно, но их всё равно не будет видно.


и кстати, чтобы два раза не вставать: мне тут в процессе пришла мысль. а почему, собственно, не отказаться от gx, gy, unit, и не использовать вместо этого полноценную матрицу 2д-трансформаций? понятно, что в своё время это было слишком тормозно, но сейчас-то уже можно.

конечно, тут есть своя банка червей: повороты и shearing. отказываться от них не хочется, но если поддерживать — то мгновенно появляются проблемы с непрямоугольными регионами, и с поворотом шрифтов (проблемы со шрифтами будут ещё и в случае разного масштаба по разным осям). но идея интересная, надо бы её обдумать.


p.s.: и кстати, про OpenGL на шинде. в отличие от glX, в шынде динамически полученые адреса OpenGL API (то есть, почти все) могут отличаться для разных контекстов. это потрясающей силы идиотия, которая не позволяет один раз без привязки к контексту получить адрес и запомнить его (как сейчас делают мои бинды). так что технически на шынде возможно иметь только одно открытое окно с GL-контекстом, и по его закрытию все адреса API надо вайпать (такое действие в биндах предусмотрено).

риторический вопрос: почему шында такая удолбищная?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 688 ]  На страницу Пред.  1 ... 19, 20, 21, 22, 23, 24, 25 ... 35  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB