Новая демка

Потоки/барьер/GL — в architecture.html.

Обнаружение таргетов

fe_discover_apps в CMakeLists.txt сама находит любой main.cpp под demo/ и tests/, руками ничего не регистрируется. Имя таргета — из пути:

demo/life/full/main.cpp   →  Demo_life_full
tests/capture/main.cpp    →  Test_capture

Соседние .cpp в той же папке подхватываются как часть таргета.

Скелет

#include "engine/core/DefaultApplication.h"
#include "engine/core/TaskScheduler.h"
#include "demo/life/full/LifeMap.h"

int main() {
    TaskScheduler::instance().initialize();

    auto factory = []() -> std::unique_ptr<ChunkedTileMap> {
        auto map = std::make_unique<LifeMap>(0x400, 0x400, 2.0f, 64);
        map->randomize(0.3f);
        map->commitInitialState();   // без этого первый кадр пустой
        return map;
    };

    DefaultApplication app(factory, std::chrono::milliseconds(0),
        1920, 1080, "название", true);
    app.run();

    TaskScheduler::instance().shutdown();
}

commitInitialState() переносит simBuffer → renderBuffer и грузит в GL. Забыл — чёрный экран, движок при этом молчит.

Своё правило

Наследник LifeLikeAutomaton, конструктор — (w, h, chunkSize, tileSize, rule):

class MyRuleMap : public LifeLikeAutomaton {
public:
    MyRuleMap(int w, int h, float ts, int chunkSize = 64)
        : LifeLikeAutomaton(w, h, chunkSize, ts, makeRule()) {}
private:
    static LifeRule makeRule() {
        LifeRule r{};
        r.table[0][3] = 255;   // рождение при 3
        r.table[1][2] = 255;   // выживание при 2
        r.table[1][3] = 255;   // выживание при 3
        return r;
    }
};

Свой ввод / ImGui

Наследник DefaultApplication, переопределить onUpdate/onImGuiExtra. onUpdate — update-поток, GL там нет. Не забыть DefaultApplication::onUpdate(dt) внутри override — там пауза/шаг/симуляция.

Паттерны

.rle — в demo/life/patterns/, копируются в ${CMAKE_BINARY_DIR}/patterns один раз для всех таргетов. В коде — относительный путь: RleLoader::load("patterns/имя.rle").

Без окна

simulateAndWait() вместо цикла DefaultApplication — синхронный шаг, блокируется до конца поколения. См. tests/capture, tests/correctness.