#c #sdl-2 #bgfx
#c #sdl-2 #bgfx
Вопрос:
Я пытаюсь создать окно с использованием 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(amp;windowManInfo.version);
if (SDL_GetWindowWMInfo(window, amp;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(amp;_event) > 0);
}
bgfx::frame();
}
bgfx::shutdown();
SDL_Quit();
return 0;
}
Ответ №1:
После расспросов о работе / etc.. Я, наконец, нашел решение, и на самом деле было несколько вещей, которых мне не хватало.
-
Поскольку я не добавлял никаких операций рендеринга к фрейму, bgfx является «умным» и фактически ничего не делает. Добавление вызова к bgfx::touch добавит пустой примитив для рендеринга. После того, как я добавил это, я смог увидеть маленькую точку в верхнем левом углу моего окна, что приводит к другому вызову, который я пропустил.
-
Я никогда не устанавливал свой вид! Я также отображал только один пиксель своего окна. Добавив вызов bgfx::setViewRect, я смог установить размер для моего вида окна, и, наконец, был получен чистый цвет.