2012-10-08 5 views
0

저는 OpenGL 창과 gtk 창을 가지고있는 프로젝트에서 일하고 있습니다. 이제는 gtk에서 OpenGL을 제어 할 수 있기를 원합니다.다른 스레드의 OpenGL 다시 그리기

Gtk 창에서 이미지 생성기를 호출하는 버튼이 있는데, 결과를 볼 수 있도록 OpenGL 창을 다시 그리기를 원합니다.하지만 버튼 콜백에서 디스플레이 기능을 호출해도 아무 일도 일어나지 않습니다. 지금까지 작동 한 유일한 생각은 glutIdleFunc을 디스플레이 func에 설정했을 때, OpenGL 창이 계속 그려지는 방식 이었지만, 나에게 더 나은 방법이 있어야한다고 생각합니다. 또한 조건 변수를 확인하기 위해 glutTimerFunc를 시도했지만 다시 좋은 방법이 있습니다.

내 생각은 버튼을 클릭 할 때마다/신호/직접 OpenGL 디스플레이 기능을 호출하거나 반복을 수행하도록 glutMainLoop을 강제 할 수 있지만 실제로 어떻게해야할지 모르겠다.

아이디어가 있으십니까?

답변

0

우선, 평범한 GLUT를 사용하여 을 사용하는 것이 좋습니다. 응용 프로그램이 여러 종류의 요구 사항 (여러 개의 창, GTK +, ...)으로 커지면 GLUT는 실행 가능한 솔루션이 될 정도로 유연하지 않습니다.

예를 들어 GLFW을 적절한 대체품으로 보면 실제 응용 프로그램에서 사용하기에 더 유연하고 실제로 충분히 유용합니다.

둘째, 제목에는 스레드를 언급하지만 질문 본문에는 언급하지 않기 때문에 실제로 스레드를 사용하고 있는지는 분명하지 않습니다. 그렇다면 스레드로부터 안전한 통신을 조사해야합니다. GTK +가 내장되어있는 glib 라이브러리는이를위한 몇 가지 API를 가지고있다. 스레드를 사용하지 않는다면 몇 가지 직접 함수 호출을 제거하고 OpenGL 상태를 무효화하여 다시 그립니다.

+0

GTK GLArea 위젯을 사용하고 싶습니다. – datenwolf

1

아이디어가 있으십니까?

GLUT 또는 GLFW 또는 다른 OpenGL 프레임 워크를 사용하지 마십시오. 당신은 GTK +를 사용하고 있습니다. GTK + 용 OpenGL 위젯이 있습니다. 그것을 사용하십시오. OpenGL 코드가 GTK +와 잘 통합되어 있기 때문에 GLib (GTK +에서 사용되는)의 일반적인 신호 이벤트 메커니즘을 사용할 수 있습니다.