GTK기반 프로그램에서 쓰레드 내에서 OpenGL 함수를 호출 하는 방법에 대한 질문

mistra의 이미지

안녕 하세요

현재 제가 작업 하고 있는 프로그램은 GTK기반과OpenGL로 만들어진 프로그램에 일부 모듈을 추가하고 기능을 확장 하고 있습니다.
다른 부분들은 어렵지 않게 이루어지는데, 문제가 쓰레드를 돌리면서 서버와 통신을 하면서 변경 사항이 생기는 경우에 자동으로 프로그램의 렌더링을 갱신해야 하는 상황인데,
다음과 같은 문제에 빠져 있습니다.

1. 쓰레드에서 렌더링 하는 함수 호출
쓰레드에서 렌더링을 하는 함수를 호출 하게 되면, GdkGLExt-WARNING **: wglMakeCurrent() failed 이와 같은 메시지가 뜹니다.

2. 사용자 시그널을 등록한 호출시
1번 문제를 해결하고자, 사용자 시그널을 만들어서 호출 해서 렌더링을 하도록 코드를 수정해봤습니다. 그런데 이런 경우 일정 이상의 시그널을 받게 되면 프로그램이 뻗는 현상이 발생합니다. 또한 렌더링도 제대로 이루어 지지 않는 현상이 발생 합니다.

혹시 이러한 비슷한 상황을 해결해보신분들이 있으시면 도움좀 부탁 드립니다.
참고로 제 개발 환경은 MinGW 5.1.3에서 개발 하고 있습니다.

정태영의 이미지

바로 렌더링을 다시 하는게 아니고 다시 그리라는 메시지를 날려줘야 하는거 아닐까요 ;)

만약 쓰레드 내에서 그냥 렌더링을 해버리면 다시 그려야할 상황이 생겼을 때 (다른 창에 의해 가려졌다가 돌아왔다던지...) 하면 예전 화면으로 돌아가게 됩니다.

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

mistra의 이미지

먼저 답변 감사 드립니다.

태영님께서 지적 하신 것 처럼 쓰레드에서 바로 렌더링을 호출하는게 아니고, 다시 그려주는 메서드를 호출해 주고 있습니다. OpenGL 에서 사용 하는 PostReDisplay 같은 함수가 해당 프로그램에 정의 되어 있어서 호출 했더니 위에 제가 언급한 문제가 발생하고 있습니다. 제가 GTK에 익숙 하지 않아서 그러는데 이런 경우에 정석적으로 처리하는 시그널이나 Event 처리 방식을 알고 계시면 알려주시면 감사하겠습니다 :)

정태영의 이미지

그 함수를 직접 호출해 주는게 아니라 redraw 시그널을 날려서 다시 그리게 만드는 방법을 사용하시는게 좋을 것 같습니다. :)

http://library.gnome.org/devel/gobject/stable/gobject-Signals.html#g-signal-emit

(시그널을 보내주는 함수가 이게 맞는지까지는 모르겠네요.)

--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.