GLUT for ruby

先週から、マイケル、マイケルでTVやネットは大騒ぎになっている。ネットでは、アクセスが DoSとなって、サーバーが落ちたとか。

ムーン・ウォークを解説する振り付け師が登場してたので、にわかにレッスンを受けて みたけど、出来そうで出来ない技ですなあ。あの機敏な動きと言い、黒->白への変身と 言い、きっと彼はUFOから降りてきた人に違いない。

さもなければ、あの動き30FPSのテープを60FPSで再生したかも知れないな。でも、私は あのロボットみたいな動きより、ファラの方が好きだ。ああ、すっかりおっさんだよ。 (by たださん)。ご冥福をお祈りします。

ああ、そうそう、普段はTVなんて余り見ないけど、 LLTVなら、見てもいいかな。プログラムがまだ、発表になって ないけど、チケットだけは売り出しが始まったようだし。

ruby-opengl on FreeBSD

老舗のruby-openglが有ったので入れてみた。 「このモジュールはruby-1.4.3で動作確認しています」 なんて書かれていて、時代を彷彿させられる。 思えば、私がperlからrubyへスイッチしたのもこの頃だったよなあ。

サンプルが付いていたので、ざっと見てみると、hello.rb そうか、何はなくても、 hello から始まるんだなと思って、開いてみると、

#
#Copyright (c) 1993-1997, Silicon Graphics, Inc.
#ALL RIGHTS RESERVED 
#Permission to use, copy, modify, and distribute this software for 
#any purpose and without fee is hereby granted, provided that the above
#copyright notice appear in all copies and that both the copyright notice
#and this permission notice appear in supporting documentation, and that 
#the name of Silicon Graphics, Inc. not be used in advertising
#or publicity pertaining to distribution of the software without specific,
#written prior permission. 
#
#THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
#AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
#INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
#FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
#GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
#SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
#KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
#LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
#THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
#ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
#ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
#POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
#
#US Government Users Restricted Rights 
#Use, duplication, or disclosure by the Government is subject to
#restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
#(c)(1)(ii) of the Rights in Technical Data and Computer Software
#clause at DFARS 252.227-7013 and/or in similar or successor
#clauses in the FAR or the DOD or NASA FAR Supplement.
#Unpublished-- rights reserved under the copyright laws of the
#United States.  Contractor/manufacturer is Silicon Graphics,
#Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
#
#OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
#

#
#hello.c
#This is a simple, introductory OpenGL program.
#
require "opengl"
require "glut"
display = Proc.new {
   GL.Clear (GL::COLOR_BUFFER_BIT);

   GL.Color(1.0, 1.0, 1.0);
   GL.Begin(GL::POLYGON);
      GL.Vertex(0.25, 0.25, 0.0);
      GL.Vertex(0.75, 0.25, 0.0);
      GL.Vertex(0.75, 0.75, 0.0);
      GL.Vertex(0.25, 0.75, 0.0);
   GL.End();

   GL.Flush();
}

def init
   GL.ClearColor(0.0, 0.0, 0.0, 0.0);

   GL.MatrixMode(GL::PROJECTION);
   GL.LoadIdentity();
   GL.Ortho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
end

   GLUT.Init
   GLUT.InitDisplayMode(GLUT::SINGLE | GLUT::RGB);
   GLUT.InitWindowSize(250, 250); 
   GLUT.InitWindowPosition(100, 100);
   GLUT.CreateWindow("hello");
   init();
   GLUT.DisplayFunc(display); 
   GLUT.MainLoop();

今はなき Silicon Graphics, Inc. ですか。そうそう、たまたま、CQ出版のインターフェース誌 をちょっと立ち読みしてきたけど、組み込みでも、OpenGL EX とか言う、OpenGLのサブセット が使われているんですね。

虎は死して皮を残し。IT企業は死して規格を残す。これまた、Firefoxもしかり。こちらは 進化が止まらず、そろそろ 3.5ですか。モンスターになり過ぎて、死滅しないように願います。

ruby-opengl on WindowsXP

はて、Windows方面では動くかな? FreeBSDのそれを持ってきてやってみると

c:\sakae\opengl>ruby extconf.rb
i386-mswin32
checking for main() in opengl32.lib... no
checking for main() in Mesaopengl32.lib... no
"can't create OpenGL module!"
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

予想はしてたけど、見事にエラー。仰せに従って、ログを見ると

c:\sakae\opengl>more mkmf.log
have_library: checking for main() in opengl32.lib... -------------------- no

"cl -nologo -Feconftest -I. -Ic:/app/ruby/lib/ruby/1.8/i386-mswin32 -I. -Ic:/app/ruby/lib/ruby/1.8/i386-mswin32  -MD -Zi -O2b2xg- -G6 conftest.c   oldnames.lib
user32.lib advapi32.lib ws2_32.lib  -link   -libpath:"." -libpath:"c:/app/ruby/lib" -stack:0x2000000"
checked program was:
/* begin */
1: #define WIN32_LEAN_AND_MEAN
2: #include <winsock2.h>
3: #include <windows.h>
4:
5: /*top*/
6: int main() { return 0; }
7: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
/* end */

あのー、clって、Common Lispの事でしょうか? すっかり、私の嗜好を読まれてるなあ! なんて冗談はやめておく。無料版のVC++ (2005|2008|2010)のどれを入れても、動かん だろうな。

諦めきれずに、extconf.rbを開いてみると、cygwin版もサポートしてるようだから、ひょっと したら、cyginな人は幸せになれるかも知れない。

このままでは悔しいので、 gemの総本山へ行って、 gem版が無いか探してみる。

Ruby bindings for OpenGL and GLUT - ruby-opengl is software that lets you write OpenGL programs in Ruby. Specifically, it primarily consists of extension modules that wrap OpenGL and GLUT. こんなのが有ったので、頂いてきた。

普通は、gem install ruby-opengl で、オンラインインストールが楽なんだけど、私の所 では、ウィルス避けの火壁に遮られて、サーバと通信出来ないので、gem玉を手元に 持って来る事にした。(依存関係があると面倒だけど...)

c:\sakae\tmp>gem install ruby-opengl-0.60.1.gem -l
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-opengl-0.60.1.gem:
        ERROR: Failed to build gem native extension.

c:/app/ruby/bin/ruby.exe -rubygems c:/app/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake RUBYARCHDIR=c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/lib
RUBYLIBDIR=c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/lib
ruby mkrf_conf.rb
(in c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1)
call rake --nosearch
cl -nologo  -MD -Zi -O2b2xg- -G6  -DWIN32 -DRUBY_VERSION=186  -Ic:/app/ruby/include -Ic:/app/ruby/lib/ruby/1.8/i386-mswin32 -Ic:/app/ruby/lib/ruby/site_ruby/1.8 -I. -c gl-1.0-1.1.c
(in c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/ext/gl)
'cl' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
rake aborted!
Command failed with status (1): [cl -nologo  -MD -Zi -O2b2xg- -G6  -DWIN32 ...]
c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/ext/gl/rakefile:29
(See full trace by running task with --trace)
rake aborted!
Command failed with status (1): [call rake --nosearch...]
c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/rakefile:61
(See full trace by running task with --trace)


Gem files will remain installed in c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1 for inspection.
Results logged to c:/app/ruby/lib/ruby/gems/1.8/gems/ruby-opengl-0.60.1/gem_make.out

また、clが無いってさー。Windowsの伝統に則って、binary配布しないのか。誰もが、M$に 金を貢とは思えないよ。責任者に一言文句を垂れておきたいぞ。誰にメールすればいいん?

gem玉を展開すると、data.tar.gz と metadata.tar.gzが出てきて、そのうちのmetadataの 方に、案内が書いてあったよ。

email: ruby-opengl-devel@rubyforge.org
homepage: http://ruby-opengl.rubyforge.org

このままでは埒があかないので、rakeとかの仕組み等を点検してたら,,,,

デフォでruby-openglが入っていたよ

そう、rubyのサンプルフォルダーに、OpenGL-0.500なんてのが置いてあった。と言う事は デフォでこれが試せるようになっているはず。ならば、証拠探し。

c:\app\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
c:\app\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt>ls -l
-rw-    24693 2007-12-14 23:50 fcgi.so
-rw-   413771 2007-12-14 23:43 gl.so
-rw-    57421 2007-12-14 23:43 glu.so
-rw-    53327 2007-12-14 23:43 glut.so
-rw-   106605 2007-12-14 23:48 odbc.so
-rw-   110702 2007-12-14 23:43 swin.so
-rw-    45163 2007-12-14 23:46 xmlparser.so
-rw-    41068 2007-12-14 23:24 zlib.so

このruby、確かここから取って きて入れたやつだ。なんだか、灯台元暗しだったなあ。

サンプルをダブルクリックすると、ちゃんと綺麗な図が表示されましたよ。