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

Я оцениваю, могу ли я адаптировать свое приложение 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 прохода пользовательского интерфейса.

Может кто-нибудь пролить некоторый свет на это?

0 ответов

Другие вопросы по тегам