我正在尝试使用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;
}
答案 0 :(得分:0)
询问了周围的工作等之后,我终于找到了解决方案,实际上我缺少了几件事。
因为我没有在帧中添加任何渲染工作,所以bgfx是“智能”的,实际上不执行任何操作。向bgfx::touch添加呼叫会添加一个空的primitve进行渲染。添加此内容后,我可以在窗口的左上方看到一个小点,这导致我错过了另一个呼叫。
我从来没有发表过看法!我也只渲染到窗口的一个像素。通过向bgfx::setViewRect添加呼叫,我可以为窗口视图设置尺寸,并最终获得清晰的颜色。