2014-05-24 7 views
3

내 프로그램은 셰이더를 컴파일하고 텍스처를로드하는 동안로드 윈도우로 시작합니다. 그런 다음 전체 화면 응용 프로그램을 시작하고 이러한 리소스를 사용할 수 있기를 원합니다. 제 이해는 OpenGL 컨텍스트가 이전과 이후에 동일해야한다는 것입니다. 나는 이것을 위해 두 가지 방법을 시도했다. 첫 번째는 전체 화면 인 두 번째 창을 만들려고했는데,이 창에서 SDL_GL_makecurrent 명령을 사용하여 컨텍스트를 가로 질러서 (이 메서드에 대해 읽은 곳을 찾을 수 없음) 두 번째로 로딩 창을 전체 화면으로 보려고했습니다. 이 두 가지 방법 모두 로딩 화면이 화면의 왼쪽 상단 모서리로 이동되었습니다. 그러나 opengl 명령은 더 이상 전체 화면으로 제대로 실행되지 않았습니다. 버퍼를 지우는 것과 같이 바탕 화면/배경 응용 프로그램의 내용이 창에 있음을 의미합니다.OpenGL을 사용하여 SDL2에서 윈도우 전체 화면 표시하기

올바른 방법이 있습니까? 아니면 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

답변

0

나는 정말 그 경우 버그를 잘 모릅니다. 나는 sdl2와 opengl에서 같은 문제를 경험했다.

  • 는 OpenGL을 컨텍스트에 연결 일반 창을 만듭니다.
  • 전체 화면
  • 붐. 검은 화면과 추락 한 창.

나는 단지 우분투에서 그 문제를 발견했다.

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); 

지금 전체 화면이 문제없이 작동하는 것 같다 :

Trought 몇 가지 테스트는 내가 그것을 해결하는 빠른 방법을 찾아 냈다.