Проекты
GameDev.ru / Проекты / Форум / lib0 engine: C и OpenGL приложение которое компилирует само себя

lib0 engine: C и OpenGL приложение которое компилирует само себя

proceduralПользовательwww6 дек. 201715:45#0
Хочу поделиться своей open source'ной наработкой, кто-то может найти её интересной:

lib0 engine, приложение которое компилирует само себя. Пишем код в окне приложения, нажимаем кнопку Compile или F2 и оно обновляется в соответствии с написанным кодом.

Код и бинарники для x64 Linux'а лежат здесь: https://procedural.itch.io/lib0-engine

Изображение

dayllengerПользовательwww17 дек. 201711:31#1
Очень любопытно. Приложение целиком перезапускается при компиляции?
proceduralПользовательwww12 янв. 20181:04#2
dayllenger, извиняюсь за поздний ответ, не заметил email уведомления этой темы!

Приложение при компиляции перезапускается не целиком, that's the trick: само X11 окно и глобальные структуры, которые не должны меняться, не меняются, перезапускается линковка к динамической библиотеке lib0.so в которой хранятся процедуры и переменные, написанные в окне редактора кода. Так как приложение полностью писалось с нуля, включая загрузку адресов OpenGL процедур, все глобальные переменные известны и хранятся в структурах X11 окна, которые передаются в переменные новой скомпилированной lib0.so при перезапуске.

Здесь я описал каждую строчку кода первой версии приложения поподробнее: https://itch.io/t/166352/v0-0c-explained-line-by-line

Правка: 12 янв. 2018 1:05

dayllengerПользовательwww12 янв. 20183:53#3
Действительно, можно же просто so-шку перелинковывать.

Мелкие проблемы:
- смущает, что шейдер компилируется каждый кадр, а не каждое изменение;
- если clang'а нет в системе, то падает про попытке перекомпиляции из-за переполнения на 98 строчке в CodeEditor.h;
- undo-redo не сохраняются.

proceduralПользовательwww12 янв. 20184:27#4
dayllenger
> - смущает, что шейдер компилируется каждый кадр, а не каждое изменение;
Да, лимитация базового многострочного окна Dear ImGui. Если фокус от него убрать, то рекомпилировать перестанет, на сколько я помню. Для тяжелых шейдеров флаг "Compile on Tab", не совсем то, но помочь поможет.
> - если clang'а нет в системе, то падает про попытке перекомпиляции из-за переполнения на 98 строчке в CodeEditor.h;
Да, приложение эксплицитно писалось под clang для детерминистического поведения прекомпилированных бинарников на других машинах.
> - undo-redo не сохраняются.
Точно. По идее можно попробовать сохранить `mUndoBuffer` и `mUndoIndex` переменные (https://github.com/lib0-engine/ImGuiColorTextEdit/blob/4e6b51a/Te… r.h#L291-L292). У меня времени это сделать пока не было. Спасибо за напоминание, добавил в known issues (https://itch.io/t/171052/all-known-issues).

Правка: 12 янв. 2018 4:38

MisanthropeПостоялецwww12 янв. 201811:57#5
о, я когда-то тоже таким баловался, но меня антивирусы за это ругали ))

/ Форум / Проекты / Утилиты

Тема закрыта.

2001—2018 © GameDev.ru — Разработка игр