古川です。

お忙しいところ、すみません。

>> 1. すでに実装されていた関数を若干修正
>
>Gtk::GLArea#newだけ?

それと static VALUE gdkglcont_new() を書き換えてます(たしか)。
これについては以下で説明します。

>trackballと metrix(でしたっけ)は、wrapperだけにしようかと思ってたんです
>がどうでしょう?

metrix って何ですか ? matrix ?
何にしても、どれほどオリジナルのサンプルをいじっていいのかという
ところで迷ってます。

>> 1. rbgdkgl.c に GLX がらみの定数を入れたのですが(これは
>>    gdk_gl_get_config() の戻り値のチェックに必要)、Gdk::GL 以下に
>>    あってはまずい。
>
>これ、あっても良いと思いますけど。戻り値が GLの intじゃなくて gintと
>docに書いてありましたし。どうですか?

gdk_gl_get_config() の中で glXGetConfig() を呼んでまして、
その返り値は GLX_NO_EXTENSION 等です。で、これらは GLX の範疇なので
Gdk::GL 以下にあってはまずいかなあと。GDK_GL_USE_GL などのように
gdkgl.h に GLX の定数が再定義されてれば、違和感もないのでしょうけど。

>あと、glarea_initで、get_gtkglarea()する必要があるのか分らないので説明し
>ていただけると勉強になります (__)

GtkWidget* gtk_gl_area_new (int *attrlist);
GtkWidget* gtk_gl_area_share_new (int *attrlist, GtkGLArea *share);
GtkWidget* gtk_gl_area_new_vargs(GtkGLArea *share, ...);

の 3 つを Gtk::GLArea#new 1 つで対応してます。
argv[0] が T_ARRAY で argc == 2 の時と、 argv[0] が T_ARRAY で
ない時には GtkGLArea *share があるので、そのための
get_gtkglarea() です。

ただ GtkWidget* gtk_gl_area_new_vargs(GtkGLArea *share, ...);
に関しては
Gtk::GLArea.new([Gdk::GL::RGBA, Gdk::GL::DOUBLEBUFFER, Gdk::GL::NONE])
など ruby 側では簡単に配列が作れるので、必要ないような気もします。

static VALUE gdkglcont_new() では
GdkGLContext *gdk_gl_context_new(GdkVisual *visual);
GdkGLContext *gdk_gl_context_share_new( GdkVisual *visual,
    GdkGLContext *sharelist, gint direct);
の 2 つを 1 つの関数で対応してます。

>if(last != GDK_GL_NONE) rb_ary_push(argv[0], GDK_GL_NONE);
>                                             ^^^^^^^^^^^は、
>INT2FIX(GDK_GL_NONE)の typo?

あらら、そうですね。

--------
古川大介