初始化bgfx时遇到问题(使用sdl2窗口)

问题描述 投票:2回答:1

我正在尝试使用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;
}
c++ sdl-2 bgfx
1个回答
0
投票

在询问了工作/等等之后。我终于得到了一个解决方案,实际上有一些我不知道的事情。

  1. 因为我没有向框架添加任何渲染工作,所以bgfx是“聪明的”并且实际上并没有做任何事情。添加对bgfx::touch的调用将添加一个空的原始渲染。添加完之后,我可以看到窗口左上方有一个小点,这导致我失踪的另一个电话。
  2. 我从不表达我的观点!我也只渲染到窗口的一个像素。通过添加对bgfx::setViewRect的调用,我能够为我的窗口视图设置大小,最终采用了清晰的颜色。
© www.soinside.com 2019 - 2024. All rights reserved.