Моя программа начинается с окна загрузки во время компиляции шейдеров, загрузки текстур и т. д. Затем я хочу иметь возможность запускать полноэкранное приложение и использовать эти ресурсы. Насколько я понимаю, контекст openGL должен быть одинаковым до и после. Я попробовал два метода для этого: во-первых, я попытался создать второе окно, которое было полноэкранным, и использовал команду SDL_GL_makecurrent в этом окне, чтобы «перенести» контекст (не смог найти, где я читал об этом методе), а во-вторых пробовал просто развернуть окно загрузки на весь экран. Оба этих метода приводили к перемещению экрана загрузки в левый верхний угол экрана. Однако команды opengl больше не работали должным образом в полноэкранном режиме, включая очистку буферов, что означало, что окно содержало содержимое моих настольных/фоновых приложений.
Есть ли правильный способ сделать это? Или это странная ошибка в драйверах sdl/opengl?
Код для полноэкранного исходного окна:
//opengl commands work fine up to here
//now to fullscreen
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
SDL_SetWindowSize(window, 1366, 768); //tried this on either side of line above and without either line
glViewport(0, 0, 1366, 768); //update viewport
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
//window should be whited, other draw commands tried and all fail or distort
SDL_GL_SwapWindow(window);
Создание нового окна и использование предыдущего контекста:
//Fine up to here
window2 = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1366, 768, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_SHOWN);
SDL_GL_MakeCurrent(window2, glContext); //created with SDL_GL_CreateContext(oldwindow);
//draw commands dont work
PS: работает убунту
Обновление: во втором коде повторное использование контекста в новом окне возвращает ошибку "недействительное окно" в случае сбоя, что происходит в большинстве случаев, но не всегда. Когда это не удается, экран становится полностью поврежденным (черный со странными белыми квадратами и узорами), завершение программы не очистит экран от этого (хотя скриншоты в порядке?), но его можно восстановить с помощью ctrl< /kbd>+f1 в терминал, затем ctrl+f7 назад