GTK기반 프로그램에서 쓰레드 내에서 OpenGL 함수를 호출 하는 방법에 대한 질문
글쓴이: mistra / 작성시간: 일, 2008/07/13 - 5:52오후
안녕 하세요
현재 제가 작업 하고 있는 프로그램은 GTK기반과OpenGL로 만들어진 프로그램에 일부 모듈을 추가하고 기능을 확장 하고 있습니다.
다른 부분들은 어렵지 않게 이루어지는데, 문제가 쓰레드를 돌리면서 서버와 통신을 하면서 변경 사항이 생기는 경우에 자동으로 프로그램의 렌더링을 갱신해야 하는 상황인데,
다음과 같은 문제에 빠져 있습니다.
1. 쓰레드에서 렌더링 하는 함수 호출
쓰레드에서 렌더링을 하는 함수를 호출 하게 되면, GdkGLExt-WARNING **: wglMakeCurrent() failed 이와 같은 메시지가 뜹니다.
2. 사용자 시그널을 등록한 호출시
1번 문제를 해결하고자, 사용자 시그널을 만들어서 호출 해서 렌더링을 하도록 코드를 수정해봤습니다. 그런데 이런 경우 일정 이상의 시그널을 받게 되면 프로그램이 뻗는 현상이 발생합니다. 또한 렌더링도 제대로 이루어 지지 않는 현상이 발생 합니다.
혹시 이러한 비슷한 상황을 해결해보신분들이 있으시면 도움좀 부탁 드립니다.
참고로 제 개발 환경은 MinGW 5.1.3에서 개발 하고 있습니다.
Forums:
바로 렌더링을 다시
바로 렌더링을 다시 하는게 아니고 다시 그리라는 메시지를 날려줘야 하는거 아닐까요 ;)
만약 쓰레드 내에서 그냥 렌더링을 해버리면 다시 그려야할 상황이 생겼을 때 (다른 창에 의해 가려졌다가 돌아왔다던지...) 하면 예전 화면으로 돌아가게 됩니다.
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
네 다시 그려주는 호출이 맞습니다.
먼저 답변 감사 드립니다.
태영님께서 지적 하신 것 처럼 쓰레드에서 바로 렌더링을 호출하는게 아니고, 다시 그려주는 메서드를 호출해 주고 있습니다. OpenGL 에서 사용 하는 PostReDisplay 같은 함수가 해당 프로그램에 정의 되어 있어서 호출 했더니 위에 제가 언급한 문제가 발생하고 있습니다. 제가 GTK에 익숙 하지 않아서 그러는데 이런 경우에 정석적으로 처리하는 시그널이나 Event 처리 방식을 알고 계시면 알려주시면 감사하겠습니다 :)
그 함수를 직접
그 함수를 직접 호출해 주는게 아니라 redraw 시그널을 날려서 다시 그리게 만드는 방법을 사용하시는게 좋을 것 같습니다. :)
http://library.gnome.org/devel/gobject/stable/gobject-Signals.html#g-signal-emit
(시그널을 보내주는 함수가 이게 맞는지까지는 모르겠네요.)
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기