いがらしです。

At Sun, 19 Dec 1999 03:03:18 -0500,
in [ruby-ext:00758] Gdk::Pixmap -> Gdk::GL::Pixmap,
Yasushi Shoji <yashi / yashi.com> wrote:
> 
> gtkglareに GdkGLPixmap *gdk_gl_pixmap_new()と言うのがあります。この
> methodは GdkPixmapを GdkGLPixmapに変換する為の物なんですが、
> 
> pixmap = Gdk::Pixmap.new
> pixmap.to_gl
> 
> の様にする方法がわかりません。

require 'gtkglarea' したときにGdk::Pixmap#to_glが使えればいいん
ですよね。Gtk::GLAreaはまだ見てないので外しているかもしれませんが、
下のようにすればいいのではないでしょうか。

#include <ruby.h>
#include <gtk/gtk.h>
#include "../../src/global.h"

static VALUE mGdk;
static VALUE gdkPixmap;

VALUE
gdkpmap_to_gl(self)
    VALUE self;
{
    GdkPixmap *pixmap = get_gdkpixmap(self);
    /* ...  */
    return Qnil;  /* return GdkGLPixmap object */
}

void
Init_gtkglarea()
{
    rb_require("gtk");
    mGdk = rb_const_get(rb_cObject, rb_intern("Gdk"));
    gdkPixmap = rb_const_get(mGdk, rb_intern("Pixmap"));
    rb_define_method(gdkPixmap, "to_gl", gdkpmap_to_gl, 0);
}

と思ったのですが……Ruby/GTK側のC関数を参照するにはextern宣言だ
けではだめで、gtkglareaライブラリを利用するRuby スクリプトで前もっ
てrequire 'gtk'をやっておかないと、

iga@runal> ruby -I src -r gtkglarea -e 'p Gdk::Pixmap.instance_methods'
ruby: can't resolve symbol 'get_gdkdraw'
: Unable to resolve symbol - src/gtkglarea.so (LoadError)

などと言われてしまいます。Init_gtkglarea()でrequireするのでは遅
過ぎるためです。他にいい方法はないのでしょうか?

--
五十嵐  宏  (Hiroshi IGARASHI)