You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下使用entry::setWindowSize设置BGFX窗口大小异常求助

bgfx窗口大小设置问题解决方案

针对Windows10下使用bgfx时,调用entry::setWindowSize设置800x600窗口大小无效,但渲染缓冲区已正确设置的问题,可尝试以下解决步骤:

调整调用顺序

entry::setWindowSize需要在bgfx::init之后调用——bgfx初始化阶段会根据init.resolution的参数创建或重置窗口,提前调用的设置会被初始化流程覆盖。修改代码顺序如下:

m_width = 800;
m_height = 600;
init.platformData.nwh  = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt  = entry::getNativeDisplayHandle();
init.resolution.width  = m_width;
init.resolution.height = m_height;
init.resolution.reset  = m_reset;
// 先完成bgfx初始化
bgfx::init(init);
// 初始化后再设置窗口大小
entry::setWindowSize(entry::kDefaultWindowHandle, m_width, m_height);

检查reset参数配置

确认init.resolution.reset的参数值,如果该参数包含窗口尺寸重置相关的标志(如某些默认重置选项),可能会覆盖你设置的窗口大小。可将其设置为0,仅在需要时添加如BGFX_RESET_VSYNC这类非尺寸相关的标志,避免初始化时强制重置窗口尺寸。

直接调用Windows原生API(备选方案)

如果上述方法仍无效,可通过Windows原生API直接修改窗口尺寸,获取原生窗口句柄后调用SetWindowPos:

#include <windows.h>

// ...

HWND hwnd = reinterpret_cast<HWND>(entry::getNativeWindowHandle(entry::kDefaultWindowHandle));
if (hwnd != nullptr) {
    // 计算包含标题栏和边框的窗口整体尺寸
    RECT clientRect = {0, 0, m_width, m_height};
    AdjustWindowRect(&clientRect, GetWindowLongPtr(hwnd, GWL_STYLE), FALSE);
    SetWindowPos(hwnd, nullptr, 0, 0, 
                 clientRect.right - clientRect.left, 
                 clientRect.bottom - clientRect.top, 
                 SWP_NOMOVE | SWP_NOZORDER);
}

注:渲染缓冲区尺寸正确是因为init.resolution参数已正确配置,bgfx会按该尺寸创建渲染目标,但窗口本身的尺寸受初始化流程或窗口管理逻辑影响,需要调整调用顺序或直接干预原生窗口。

内容的提问来源于stack exchange,提问作者LazerBlazer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:33