Почему при обновлении пользовательского интерфейса Nuklear после событий ввода требуется обновление дважды? - PullRequest
0 голосов
/ 09 декабря 2018

Я оцениваю, могу ли я адаптировать свое приложение Windows OpenGL для использования библиотеки Nuklear imgui.

Я бы использовал ее в стиле «блокировки», то есть только обновлял и перерисовывал пользовательский интерфейс на основесобытия пользовательского ввода.

В документации при обсуждении этой темы говорится следующее:

Если вы действительно обновляете только ввод, убедитесь, что пользовательский интерфейс обновляется два раза в каждом кадре, иВызывайте nk_clear сразу после первого прохода и рисуйте только во втором проходе.

и предоставьте следующий пример кода:

struct nk_context ctx;
nk_init_xxx(&ctx, ...);
while (1) {
    // [...wait for input ]
    // [...do two UI passes ...]
    do_ui(...)
    nk_clear(&ctx);
    do_ui(...)
    //
    // draw
    const struct nk_command *cmd = 0;
    nk_foreach(cmd, &ctx) {
        switch (cmd->type) {
            case NK_COMMAND_LINE:
            your_draw_line_function(...)
            break;
            case NK_COMMAND_RECT
            your_draw_rect_function(...)
            break;
            case ...:
            //[...]
        }
        nk_clear(&ctx);
    }
    nk_free(&ctx);

}

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

Кто-нибудь может пролить свет на это?

...