2011-02-02 3 views
1

OpenGL을 직접 호출하지 않는 Ogre3d 및 SDL을 사용하는 OpenGL 응용 프로그램이 있고 런타임에 해상도를 변경하려고합니다. 새로운 해결 방법으로 OpenGL 컨텍스트를 다시 초기화해야 할 필요가있는 것으로 보이지만 여러 항목이 진행되고 있습니다. 리눅스에서는 당분간 작동하는 것처럼 보입니다. 그러면 화면 상에 그래픽 손상이 생깁니다. Windows에서는 다음에 프레임을 렌더링하려고 할 때 충돌이 발생합니다. Ogre에서 텍스처를 다시로드하도록 강요했지만, 텍스처 만 렌더링하면 (3D 모델 없음)이 작업은 정상적으로 작동하지만 3D 모델은 렌더링 전에 크래시 및 다시로드가 발생하지 않으므로 아무런 효과가 없습니다. 여기 리소스 초기화 및 OpenGL 컨텍스트

는 Ogre3d의 깊이 설명에 대한 링크가 우리가하고있는 호출입니다 : http://www.ogre3d.org/forums/viewtopic.php?f=2&t=62825

우리가 정말 때, 자원을 복원 할 필요는 OpenGL 컨텍스트를 다시 초기화 알아야 할 모든?

왜 OpenGL 컨텍스트를 조정하면 다른 리소스에 영향을 줍니까? OpenGL이 작동하는 방식입니까, 아니면 우리가 사용하는 라이브러리 중 하나가이 문제를 소개 했습니까? 알지 못하면서이 문제를 추가 할 수 있었습니까?

+0

개발 SDL 1.3 분기로 전환하여이 문제를 완전히 해결했습니다. – Sqeaky

+0

이 문제의 핵심은 Ogre-SDL 'Binder'에 포인터를 어떻게 되짚어 놓았는지입니다. 참조로 스택에있는 해당 객체를 반환 했으므로 삭제되는 중이었고 이전에 사용한 주소를 실제로 반환했습니다. 그래서 초등이지만 신선한 관점을 얻지 않고는 그것을 볼 수 없었습니다. – Sqeaky

답변

1

this forum thread을 보셨습니까?

해상도를 변경할 때 SDL이 OpenGL을 파괴하는 것처럼 보입니다. 이 경우 모두 GL 리소스가 컨텍스트로 삭제됩니다.

다른 가능한 '더미'GL 컨텍스트를 만들고 리소스를 '실제'GL 컨텍스트와 공유하고 SDL로 '기본'컨텍스트를 파괴하지 않도록 유지하는 것이 하나의 가능한 솔루션입니다. 이 방법으로 대부분의 리소스가 살아남습니다.

일부 리소스는 공유 할 수 없으며 텍스처와 VBO는 괜찮지 만 VAO은 공유 할 수 없습니다.

+0

SDL이 필요하지 않을 때 SDL이 컨텍스트를 파괴하고 있다는 것을 알고있는 것이 좋습니다. 우리는 '가짜'GL 컨텍스트 아이디어를 조사 할 것입니다. SDL 1.3을 개발할 때 아직 살펴볼 것 같아요. 분명히 이러한 문제가 수정되었을 수도 있습니다. 우리가 'Dummy'GL 문맥을 사용한다면, 나는 돌아와 이것을 대답으로 표시 할 것이다. – Sqeaky

1

표면 코드가 설정된 후 OpenGL 지원에 SDL이 추가되었습니다. 그래서 SDL 창의 크기를 변경하는 것은 파괴적입니다. OpenGL 컨텍스트 공유 및 그주의 사항을 지적했습니다. 그러나 OpenGL 창을 만드는 데 SDL을 사용하지 않으면이 문제를 완전히 피할 수 있습니다. SDL이 관리하는 창없이 SDL이 제공하는 다른 모든 기능을 사용할 수 있으므로 변경되는 것은 입력 이벤트 처리와 창 생성 방법뿐입니다. SDL 대신 GLFW를 사용합니다. SDL처럼 자신 만의 이벤트 처리 루프를 구현해야하므로 GLFW를 OpenGL 윈도우 대신 사용할 수 있습니다. 컨텍스트 생성은 간단합니다.

+1

Seconded. 주로 SDL에 도입 된 약점입니다. 어떤 종류의 애셋을 잃지 않고 자유롭게 크기를 조정할 수있는 사용자 정의 OpenGL 윈도우를 직접 만들었습니다 (OS 고유 코드 사용). – TheBuzzSaw

+0

응답을 고맙게 생각하지만 입력 이벤트 처리가 SDL을 사용하는 이유입니다. 그것은 우리가 알고있는 모든 플랫폼에서 간단하고 지원됩니다. GLFW는 충분히 crossplatform하지 않는 것 같습니다 (나는 내 ​​포스트에서 언급하지 않았다는 것을 알고 있지만,이 앱은 iPhone, android 등의 전화기에서도 실행됩니다). 이것이 우리의 연구에 집중할 수 있도록 이것이 SDL 제한이라는 것을 아는 것은 좋은 일입니다. – Sqeaky