[SDL2,CEGUI] nvoglv32.dll 위치를 읽는 동안 액세스 위반이 발생했습니다

SDL2에서 간단하게 2D 렌더링을 지원하는 SDL_Renderer를 가지고 지금까지 포팅 작업을 진행하고 있었는데, 이번에 UI 시스템을 기존것을 버리고 다른것으로 가져다 쓰려고 CEGUI를 연동중에 아래와 같은 에러가 발생했네요.

예외 발생(0x62565446(nvoglv32.dll), Debug.exe): 0xC0000005: 0x2844B588 위치를 읽는 동안 액세스 위반이 발생했습니다..

nVIDIA의 opengl 드라이버 관련된 파일 같습니다. 위치는 C:\Windows\SysWOW64\nvoglv32.dll 에 있습니다.

CEGUI SDL2 샘플과 포팅 프로젝트의 다른 부분을 찾아봤습니다. 기존에 SDL_Renderer를 가지고 기존 UI와 캐릭터 에셋을 SDL_Texture로 만들어서 포팅까지 해놓은 상태에서 CEGUI SDL2 샘플에 있는 Opengl을 직접 사용하는 SDL_GLContext와 둘이 충돌이 발생하는 듯 합니다.

CEGUI의 SDL2 샘플 프로젝트의 경우 SDL_Renderer를 생성해서 SDL_RenderPresent 해주면 예외가 발생하지는 않지만, 역시나 둘이 충돌해서 아래와 같이 화면이 깜빡꺼리면서 제대로 렌더링이 되지 않았습니다.
위에는 깜빡임만 있다고 했지만 그것은 SDL_Texture를 사용하지 않았을때고 CEGUI의 SDL2 샘플에도 SDL_Texture를 만들어 SDL_RenderPresent까지 해주면 같은 이슈가 발생하네요.



SDL_Renderer과 OpenGL을 섞어 쓸수 있는 SDL_gpu라는게 있다고는 하는데 확인해보지는 않았습니다.

포팅중인 프로젝트에 기존에 SDL_Renderer 생성 부분을 주석 처리해 SDL_GLContext만 사용하고 렌더링 부분도 SDL_RenderPresent를 사용하지 않고 SDL_GL_SwapWindow로 처리하면 CEGUI가 잘 작동하는 것을 볼 수 있었지만, 기존에 포팅해놓은 SDL_Renderer 기반에서 작동하던 UI나 캐릭터는 볼 수 없었습니다.

굳이 CEGUI가 아니더라도 SDL2를 사용하면서 SDL_Renderer와 SDL_GLContext는 같이 사용하면 안되겠네요. 어짜피 SDL_GLContext에서는 SDL이 기본 제공하는 서피스나 텍스쳐 등은 사용을 할 수 없는 듯 합니다. SDL2가 기본 크로스 플랫폼이니 크로스 플랫폼인 CEGUI를 사용하는데 이슈가 없을 것이라 생각했는데 이런 부분에 이슈가 있네요.

원본 프로젝트와 인터페이스가 비슷한 SDL_Renderer를 계속 사용할 예정이고, 제가 opengl에 대한 해박한 지식이 있는것도 아니라 아무래도 CEGUI는 여기서 끝을 내야하지 싶네요. CEGUI와 디펜던시 소스 빌드하고 샘플 실행까지 소모한 시간이 아깝네요. 이번 기회에 CEGUI나 마스터 해볼참이었는데...

https://discourse.libsdl.org/t/problem-with-sdl-renderpresent-sdl-gl-swapwindow/338
https://stackoverflow.com/questions/28307814/drawing-2d-stuff-with-sdl-renderer-and-opengl-stuff-with-sdl-glcontext
https://forums.tigsource.com/index.php?topic=36909.0
https://wiki.libsdl.org/MigrationGuide#Video

내용 추가합니다. imgui에 SDL2를 사용시에도 SDL_Renderer, OpenGl context가 충돌이 나는 이슈에 대한 글이 있네요. SDL_Renderer이 opengl 2.1 때의 구버전으로 context를 처리하는 것 같습니다. 위에서 언급한 SDL_gpu를 사용하면 해결이 되는 것도 같네요.

내용 또 추가합니다. SDL_gpu를 사용해서 해봤지만 아래 스샷과 같이 실패 했습니다. 처음에는 SDL_gpu를 2015년에 미리 빌드된 lib로 사용해서 안되길래, 아예 최신 소스를 받아 빌드 후 적용해 봤지만 안되네요. opengl을 모르고 cegui 내부도 모르기 때문에 실패한 것 같은데, 여기서 SDL2에 SDL_Renderer로 CEGUI 연동은 마무리 지어야 할 것 같습니다. 다른 대안을 사용해봐야겠네요.


이 블로그의 인기 게시물

CMake Windows에 설치하기

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

Unity3D 안드로이드 Keystore 생성하기