© Георгиевский Анатолий, 23.01.2008

Пример интеграции интерфейса OpenGL в GTK

Пример создания простого приложения с интерфейсом OpenGL. Считается что читатель подготовился и знает что такое "Widget", потому что по ходу статьи это не разъясняется.

// описания библиотек GTK
#include <gtk/gtk.h>
#include <gtk/gtkgl.h>

// описаниe функций OpenGL
#include <GL/gl.h>
#include <GL/glu.h>


int main (int   argc,  char *argv[])
{
// Надо сконфигурировать библиотеку GTK. В командной строке 
//	могут содержатся опции настройки 
  gtk_init (&argc, &argv);
// точно также ряд настроек можно передать в библиотеку GtkGLExt
  gtk_gl_init (&argc, &argv);

// Пытаемся задать режим работы OpenGL
// Задается цветовая палитра, буфер глубины и двойной выходной буфер
  GdkGLConfig *glconfig;
  glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGBA    |
        GDK_GL_MODE_DEPTH  |  GDK_GL_MODE_DOUBLE);
// создаем окно приложения со своим заголовком
  GtkWidget *window;
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "test");
// это необходимо чтобы окно нормально закрывалось
  g_signal_connect (G_OBJECT (window), "delete_event",
                    G_CALLBACK (gtk_main_quit), NULL);
// создаем окно необходимого размера, в котором рисовать можно
  GtkWidget *drawing_area;
  drawing_area = gtk_drawing_area_new ();
  gtk_widget_set_size_request (drawing_area, 600, 600);
// теперь надо привязать возможности OpenGL к окну для рисования
  gtk_widget_set_gl_capability (drawing_area, glconfig,
             NULL, TRUE, GDK_GL_RGBA_TYPE);
// вставить область рисования в головное окно и сделать видимым
  gtk_container_add (GTK_CONTAINER (window), drawing_area);
  gtk_widget_show (drawing_area);
/*
 * Где-то здесь надо объяснить, что делает ваша программа 
 *   кроме открывания окна
 */
// передаем управление событиями оконному интерфейсу GTK
// пока не вызвано завершение приложения, окно будет открыто
  gtk_main ();
}

()