GtkGLExt와 g++

GTK+는 LGPL(Lesser General Public License) 약관을 따른다.
즉, 간단하게 말해 GTK+ 라이브러리를 이용하여 사용 코드를 작성해도 된다는 뜻이다.
이와 비교되는 Qt는 GPL 라이센스를 따르기 때문에, 이를 이용하여 상용 프로그램을 개발할 수 없다.

GTK+와 QT 모두 OpenGL과의 연동이 가능하며, 각각 GtkGLExt와 QGL을 제공하고 있다.
이 외에도 리눅스 상에서 GUI를 작성할 수 있게끔 도와주는 라이브러리로는 대표적으로 FLTK 같은 것이 있지만,

GTK+는 GNOME, QT는 KDE를 만드는 데에 사용된 라이브러리 이므로
훨씬 더 고급스러운 느낌을 가지지 않을 수 없다..ㅡ..ㅡ

또한, 이들 라이브러리들은 모두 cross flatform이 가능하므로
리눅스에서 작업한 결과물이 그대로 윈도우즈용으로 포팅되는 것도 가능하다.

Makefile 만드는 것에서 부터 시작해서 고생고생을 해서
(물론 Windows에서 MFC를 처음 시작할 때 만큼의 고통스러움은 없었다…)
GtkGLExt을 시작했으나….
아뿔싸… GTK+는 전부 C를 기반으로 작성되었으며,
g++로 컴파일을 하면 다음과 같은 에러가 발생한다.

In function ‘GdkGLConfig* configure_gl()’:
error: invalid conversion from ‘int’ to ‘GdkGLConfigMode’
error:   initializing argument 1 of ‘GdkGLConfig* gdk_gl_config_new_by_mode(GdkGLConfigMode)’
error: invalid conversion from ‘int’ to ‘GdkGLConfigMode’
error:   initializing argument 1 of ‘GdkGLConfig* gdk_gl_config_new_by_mode(GdkGLConfigMode)’

g++로 컴파일이 불가능하다는 것은
기존 C++ 클래스들을 사용하지 못함을 의미하므로
난감하기 이를 데 없었지만..
구글링을 한 결과 해결책을 찾아내서 이렇게 포스팅을 하게 되었다.

두 군데를 고치면 된다.

첫 번째)

glconfig = gdk_gl_config_new_by_mode ( GDK_GL_MODE_RGB    |
                    GDK_GL_MODE_DEPTH  |
                    GDK_GL_MODE_DOUBLE );

이 부분을 다음과 같이 수정한다.

glconfig = gdk_gl_config_new_by_mode (static_cast<GdkGLConfigMode>
                   (GDK_GL_MODE_RGB    |
                    GDK_GL_MODE_DEPTH  |
                    GDK_GL_MODE_DOUBLE) );

두 번째)

glconfig = gdk_gl_config_new_by_mode ( GDK_GL_MODE_RGB   |
                        GDK_GL_MODE_DEPTH) );

이 부분을 다음과 같이 수정한다.

glconfig = gdk_gl_config_new_by_mode (static_cast<GdkGLConfigMode>
                       (GDK_GL_MODE_RGB   |
                        GDK_GL_MODE_DEPTH) );

(출처: http://mail.gnome.org/archives/gtkglext-list/2005-September/msg00016.html)

답글 남기기