Добрый день! Кто-нибудь пробовал создать приложение на Common Lisp с использованием Gtk+ и виджетом GtkGlArea? Если пробовал, то подкиньте, пожалуйста, примеров.:) Ни в одном байндинге не нашел байндинга к этому виджету. Самому байндинг не получилось написать (как видно, руки не оттуда растут.:)).
Если кому-нибудь интересно, то вот способ использовать OpenGL 2.0 с Gtk3+. Рисовать можно на любом виджете, но я использовал EventBox. Если что, вот ссылка на полный код проекта -
gemstone hunter.(defcfun ("gdk_win32_window_get_handle" gdk-win32-window-get-handle) :pointer
(window :pointer))(defcfun ("gtk_widget_get_window" gtk-widget-get-window) :pointer
(widget :pointer))(defcfun ("gdk_pixbuf_new_from_file" gdk-pixbuf-new-from-file)
(g-object gdk-pixbuf:gdk-pixbuf)
(filename :string)
(error :pointer))(defcfun ("gdk_pixbuf_new_subpixbuf" gdk-pixbuf-new-subpixbuf)
(g-object gdk-pixbuf:gdk-pixbuf)
(src-pixbuf (g-object gdk-pixbuf:gdk-pixbuf))
(src-x :int)
(src-y :int)
(src-width :int)
(src-height :int))(defun create-gl-context (widget)
(let* (gdk-window hwnd)
(log-msg "test : ~a" (pointer widget))
(setf gdk-window (gtk-widget-get-window (pointer widget)))
(log-msg "test2 : ~a" gdk-window)
(when (null-pointer-p gdk-window) (return-from create-gl-context nil))
(setf hwnd (gdk-win32-window-get-handle gdk-window))
(log-msg "test3 : ~a" hwnd)
(when (null-pointer-p hwnd) (return-from create-gl-context nil))
(setf *hdc* (glop-win32:get-dc hwnd))
(when (null-pointer-p *hdc*) (return-from create-gl-context nil))
(glop-win32:choose-pixel-format *hdc*)
(let ((gl-context (glop-wgl:wgl-create-context *hdc*)))
(glop-wgl:wgl-make-current *hdc* gl-context)
gl-context)))Здесь способ использования под Windows, но в Gtk3+ есть функции для получения handle'а окна и в linux. Весь код тестировался только на sbcl.