初始化bgfx时出现问题(使用sdl2窗口)

3

我正在尝试使用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个回答

1

在工作/等地方询问后,我终于得到了解决方案,实际上有几件事情是我错过的。

  1. 因为我没有将任何渲染工作添加到帧中,bgfx是“智能”的并且实际上什么都不会做。 添加对 bgfx::touch 的调用将添加一个空图元以进行渲染。 添加此操作后,我可以看到窗口左上角的小点,这导致我错过了另一个调用。

  2. 我从未设置过我的视图! 我还只呈现了窗口的一个像素。 通过添加对 bgfx::setViewRect 的调用,我能够为我的窗口视图设置大小,清除颜色最终成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接