0

嗨,我用核 gui 工具包写了这个简单的例子,但没有显示窗口?我该怎么办?

#define NK_IMPLEMENTATION
#define NK_INCLUDE_DEFAULT_ALLOCATOR
#define NK_INCLUDE_FONT_BAKING
#define NK_INCLUDE_STANDARD_IO
#include <nuklear.h>

int main(int argc, char **argv) {
    struct nk_font_atlas font_atlas;
    nk_font_atlas_init_default(&font_atlas);
    nk_font_atlas_begin(&font_atlas);

    int img_width, img_height;
    // struct nk_font_config font_config;
    const char *font_path = "/home/.../font/file.ttf";
    struct nk_font *font = nk_font_atlas_add_from_file(&font_atlas, font_path, 13, NULL);
    const void* img = nk_font_atlas_bake(&font_atlas, &img_width, &img_height, NK_FONT_ATLAS_RGBA32);

    // char *img_two[img_width * img_height];
    // memcpy(img_two, img, img_width * img_height);
    nk_font_atlas_end(&font_atlas, nk_handle_id(0), NULL);

    int running = 1;
    struct nk_context ctx;
    nk_init_default(&ctx, &font->handle);

    enum {EASY, HARD};
    static int op = EASY;
    static float value = 0.6f;
    static int i =  20;

    while (running) {
        struct nk_rect window_bound = { 50, 50, 220, 220 };
        nk_flags window_flag = NK_WINDOW_BORDER | NK_WINDOW_MOVABLE | NK_WINDOW_CLOSABLE;
        int window_status = nk_begin(&ctx, "show", window_bound, window_flag);
        if (window_status) {
            nk_layout_row_static(&ctx, 30, 80, 1);
            if (nk_button_label(&ctx, "button")) {
                /* event handling */
            }

            /* fixed widget window ratio width */
            nk_layout_row_dynamic(&ctx, 30, 2);
            if (nk_option_label(&ctx, "easy", op == EASY)) op = EASY;
            if (nk_option_label(&ctx, "hard", op == HARD)) op = HARD;

            /* custom widget pixel width */
            nk_layout_row_begin(&ctx, NK_STATIC, 30, 2);

            {
                nk_layout_row_push(&ctx, 50);
                nk_label(&ctx, "Volume:", NK_TEXT_LEFT);
                nk_layout_row_push(&ctx, 110);
                nk_slider_float(&ctx, 0, &value, 1.0f, 0.1f);
            }

            nk_layout_row_end(&ctx);
        }

        nk_end(&ctx);
        nk_clear(&ctx);
    }

    nk_font_atlas_clear(&font_atlas);
    nk_free(&ctx);
    return 0;
}
4

1 回答 1

2

问题是,Nuklar 靠自己做不了太多事情。您需要使用一些渲染 API 来实际绘制您的窗口,例如 SDL、OpenGL、DirectX 或其他东西。

于 2020-01-20T22:08:22.240 回答