Полноэкранное окно в SDL2 с openGL

Моя программа запускается с загрузочного окна во время компиляции шейдеров, загрузки текстур и т. Д. Затем я хочу иметь возможность запустить полноэкранное приложение и использовать эти ресурсы. Насколько я понимаю, контекст 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 назад

3

Решение

Я действительно не знаю, если это ошибка. Я испытал ту же проблему с sdl2 и opengl.

  • Создать обычное окно
  • прикрепить к контексту 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);

Теперь полноэкранный режим, кажется, работает без проблем.

0

Другие решения


По вопросам рекламы [email protected]