Возникли проблемы при инициализации bgfx (с окном sdl2) - PullRequest
2 голосов
/ 03 апреля 2019

Я пытаюсь создать окно с использованием SDL2 и инициализировать BGFX для его использования.Мой текущий тест - просто установить фиолетовое окно, используя чистый цвет.

Я также пытался создать окно, используя CreateWindowEx, но также не смог обновить окно с чистым цветом, который я указал в своем вызовеbgfx :: setViewClear.Я изучал проекты с открытым исходным кодом, а также документы и примеры, и я не могу понять, какой шаг инициализации / обновления bgfx я мог пропустить.Пожалуйста помоги!Я добавил свой текущий подход в качестве небольшой тестовой основы.

int main(int, char**) {
    SDL_InitSubSystem(SDL_INIT_VIDEO);

    const int width = 800;
    const int height = 600;

    SDL_Window* window = nullptr;
    HWND nativeWindow;

    // sdl2
    {
        window = SDL_CreateWindow(
            "test_window",
            SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
            width, height,
            0
        );

        SDL_SysWMinfo windowManInfo;
        SDL_VERSION(&windowManInfo.version);
        if (SDL_GetWindowWMInfo(window, &windowManInfo)) {
            nativeWindow = windowManInfo.info.win.window;
        }
    }

    // bgfx
    {
        bgfx::PlatformData platformData;
        platformData.ndt = nullptr;
        platformData.nwh = nativeWindow;
        bgfx::setPlatformData(platformData);

        // prevent creation of a renderer thread
        bgfx::renderFrame();

        bgfx::Init init;
        init.type = bgfx::RendererType::Count;
        init.resolution.width = width;
        init.resolution.height = height;
        init.resolution.reset = BGFX_RESET_VSYNC;
        bgfx::init(init);

        bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x443355FF /*purple*/, 1.f, 0);
    }

    while (1) {
        // sdl events
        {
            SDL_Event _event;
            while (SDL_PollEvent(&_event) > 0);
        }

        bgfx::frame();
    }

    bgfx::shutdown();
    SDL_Quit();

    return 0;
}

1 Ответ

0 голосов
/ 06 апреля 2019

Спросив вокруг работы / и т.д .. Я наконец-то нашел решение, и на самом деле я пропустил пару вещей.

  1. Поскольку я не добавлял никакой работы рендеринга во фрейм, bgfx «умный» и фактически ничего не делает. Добавление вызова к bgfx :: touch добавит пустой примитив для рендеринга. После того, как я добавил это, я увидел маленькую точку в верхнем левом углу моего окна, что приводит к другому пропущенному вызову.

  2. Я никогда не выставлял свою точку зрения! Я также рендеринг только на один пиксель моего окна. Добавив вызов к bgfx :: setViewRect , я смог установить размер для моего окна, и чистый цвет наконец-то занял.

...