Моя программа запускается с загрузочного окна во время компиляции шейдеров, загрузки текстур и т. Д. Затем я хочу иметь возможность запустить полноэкранное приложение и использовать эти ресурсы. Насколько я понимаю, контекст 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+f1 к терминалу тогда Ctrl+f7 назад
Я действительно не знаю, если это ошибка. Я испытал ту же проблему с sdl2 и opengl.
Я заметил только эту проблему в Ubuntu.
Пройдя несколько тестов, я нашел быстрый способ исправить это:
Uint32 flags = 0;
flags |= SDL_WINDOW_RESIZABLE;
//bla bla bla your tags
flags |= SDL_WINDOW_OPENGL;
m_window = SDL_CreateWindow( "hello gl", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_screen.x, m_screen.y,flags);
m_glContext = SDL_GL_CreateContext(m_window);
//Set right the way the screen to fullscrene false
SDL_SetWindowFullscreen(m_window, SDL_FALSE);
Теперь полноэкранный режим, кажется, работает без проблем.