http://www.malib.net/archives/libmalib-0.5.2.tar.gz
% ./configure --enable-shared i386-pc-mingw32
AM_PATH_GLIB(1.2.7, CFLAGS="$CFLAGS $GLIB_CFLAGS" LIBS="$LIBS $GLIB_LIBS", AC_MSG_ERROR(Glib 1.2.7 not found.))
AM_PATH_GTK(1.2.0, CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS", AC_MSG_ERROR(GTK+1.2.0 not found.))
AM_PATH_GDK_IMLIB(1.9.8, CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" LIBS="$LIBS $GDK_IMLIB_LIBS", AC_MSG_ERROR(GdkImlib 1.9.8 not found.))
というライブラリ群をあらかじめいれておかないと。
■GLIB ftp://ftp.gtk.org/pub/gtk/v1.2/glib-1.2.10.tar.gz
% ./configure --enable-shared i386-pc-mingw32
●あちこちに#define NATIVE_WIN32をいれまくった。
--- ./acconfig.h.org 1999-03-20 09:33:27.000000000 +0900
+++ ./acconfig.h 2002-10-15 22:49:00.000000000 +0900
@@ -95,2 +95,2 @@
-#undef WIN32
-#undef NATIVE_WIN32
+#define WIN32
+#define NATIVE_WIN32
--- ./gerror.c.org 2002-10-15 22:45:49.000000000 +0900
+++ ./gerror.c 2002-10-15 22:48:14.000000000 +0900
@@ -191,0 +192 @@
+#define NATIVE_WIN32
--- ./gmain.c.org 2002-10-15 22:47:12.000000000 +0900
+++ ./gmain.c 2002-10-15 22:47:46.000000000 +0900
@@ -39 +39 @@
+#define NATIVE_WIN32
--- ./gtimer.c.org 2002-10-15 22:50:00.000000000 +0900
+++ ./gtimer.c 2002-10-15 22:50:35.000000000 +0900
@@ -30,0 +31,2 @@
+#define NATIVE_WIN32
■GTK ftp://ftp.gtk.org/pub/gtk/v1.2/gtk+-1.2.10.tar.gz
% ./configure --enable-shared i386-pc-mingw32
% ./configure --disable-x --enable-shared i386-pc-mingw32
--- ./extconf.rb.org 2002-10-15 16:00:41.000000000 +0900
+++ ./extconf.rb 2002-10-15 19:36:47.000000000 +0900
@@ -5,2 +5,3 @@
-$CFLAGS += ' ' + `#{sdl_config} --cflags`.chomp
-$LDFLAGS += ' ' + `#{sdl_config} --libs`.chomp
+$CFLAGS += ' ' + `c:/cygwin/bin/sh.exe /usr/local/bin/sdl-config --cflags`.chomp
+$LDFLAGS += ' ' + `c:/cygwin/bin/sh.exe /usr/local/bin/sdl-config --libs`.chomp
+$LDFLAGS += ' -lmingwex'
@@ -47,2 +48,4 @@
- have_library("opengl32","glVertex3d")
- have_library("glu32","gluGetString")
+ have_library("opengl32",nil)
+ have_library("glu32",nil)
■SDL_ttf http://www.libsdl.org/projects/SDL_ttf/
http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.5.tar.gz
% ./configure --enable-shared i386-pc-mingw32
→軽くコンパイルできて、installできた。
■FreeType http://www.freetype.org/
http://umn.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.2.tar.gz
% ./configure --enable-shared i386-pc-mingw32
→普通にinstallできた。
■SDL_mixer SDL_sound
http://risky-safety.org/~zinnia/sdl/sourcetour/SDL_voice.html
http://cefiro.homelinux.org/SDL/sdl-devel-msys.html
→ということで、SDL_soundがなにを意味しているのかはよくわかった。
SDL_mixerはmod,midiなどとwav,mp3が一緒に扱われているのがやだと。
mp3などをdecodeする部分を切り離したい。それがSDL_soundであると。
ということで、別になくていいかも。
■SDL_sound http://www.icculus.org/SDL_sound/downloads/SDL_sound-1.0.0.tar.gz
■Ruby/SDL http://www.kmc.gr.jp/~ohai/
% wget http://www.kmc.gr.jp/~ohai/rubysdl/rubysdl-0.8.2.tar.gz
% tar zxvf rubysdl-0.8.2.tar.gz
% cd rubysdl-0.8.2
●まずは、SDLだけしかいれていない現状で、Ruby/SDLいれてみるとどうなるか
% ruby extconf.rb →いきなり失敗する。以下のようにしてみた。
●Makefileで、libの順番を変える必要がある。
●ということで、makeは成功します。やったね!
c:/ruby/lib/ruby/1.6/i386-mingw32/sdl.so
c:/ruby/lib/ruby/1.6/sdl.rb
c:/ruby/lib/ruby/1.6/rubysdl_aliases.rb
●●ということで超基本形Ruby/SDLは成功したが、GLサポートは無いわ、
fontはサポートしてないわで、なんにもサポートしてないも同然のような状態なりよ。
--- ./extconf.rb.org 2002-10-15 16:00:41.000000000 +0900
+++ ./extconf.rb 2002-10-15 19:00:58.000000000 +0900
@@ -5,2 +5,3 @@
-$CFLAGS += ' ' + `#{sdl_config} --cflags`.chomp
-$LDFLAGS += ' ' + `#{sdl_config} --libs`.chomp
+$CFLAGS += ' ' + `c:/cygwin/bin/sh.exe /usr/local/bin/sdl-config --cflags`.chomp
+$LDFLAGS += ' ' + `c:/cygwin/bin/sh.exe /usr/local/bin/sdl-config --libs`.chomp
+$LDFLAGS += ' -lmingwex'
--- ./Makefile.org 2002-10-15 18:50:19.000000000 +0900
+++ ./Makefile 2002-10-15 19:04:15.000000000 +0900
@@ -91 +91,2 @@
- $(LDSHARED) $(DLDFLAGS) -o $(DLLIB) $(OBJS) $(LIBS) $(LOCAL_LIBS)
+ $(LDSHARED) -o $(DLLIB) $(OBJS) $(LIBS) $(LOCAL_LIBS) $(DLDFLAGS)
■SDL http://www.libsdl.org/
% wget http://www.libsdl.org/release/SDL-1.2.5.tar.gz
% ./configure --disable-pthreads --enable-shared i386-pc-mingw32
●無事installできる。
■Math3d http://www2.giganet.net/~yoshi/
wget http://www2.giganet.net/~yoshi/math3d-0.02.tgz
--- ./math3d_native.c 2002-10-15 14:15:32.000000000 +0900
+++ ./math3d_native.c.org 2001-02-25 00:34:43.000000000 +0900
@@ -1175 +1175 @@
- case NNEAR:
+ case NEAR:
@@ -1181 +1181 @@
- case FFAR:
+ case FAR:
@@ -1329,2 +1329,2 @@
- m3d_plane_new_points(&result->plane[FFAR], &result->corner[FAR_HR], &result->corner[FAR_LR], &result->corner[FAR_LL]);
- m3d_plane_new_points(&result->plane[NNEAR], &result->corner[NEAR_LL], &result->corner[NEAR_LR], &result->corner[NEAR_HR]);
+ m3d_plane_new_points(&result->plane[FAR], &result->corner[FAR_HR], &result->corner[FAR_LR], &result->corner[FAR_LL]);
+ m3d_plane_new_points(&result->plane[NEAR], &result->corner[NEAR_LL], &result->corner[NEAR_LR], &result->corner[NEAR_HR]);
@@ -1334 +1334 @@
-m3d_frust_new_frust(result, left, right, bottom, top, nnear, ffar)
+m3d_frust_new_frust(result, left, right, bottom, top, near, far)
@@ -1336 +1336 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -1340,2 +1340,2 @@
- result->nnear = nnear;
- result->ffar = ffar;
+ result->near = near;
+ result->far = far;
@@ -1343,2 +1343,2 @@
- result->corner[i][2] = -nnear;
- result->corner[i+4][2] = -ffar;
+ result->corner[i][2] = -near;
+ result->corner[i+4][2] = -far;
@@ -1354 +1354 @@
- scaled = ffar / nnear;
+ scaled = far / near;
@@ -1363 +1363 @@
-m3d_frust_new_persp(result, fovx, fovy, nnear, ffar)
+m3d_frust_new_persp(result, fovx, fovy, near, far)
@@ -1365 +1365 @@
- double fovx, fovy, nnear, ffar;
+ double fovx, fovy, near, far;
@@ -1370,2 +1370,2 @@
- tanx_val = fabs(tan(fovx/2)*nnear);
- tany_val = fabs(tan(fovy/2)*nnear);
+ tanx_val = fabs(tan(fovx/2)*near);
+ tany_val = fabs(tan(fovy/2)*near);
@@ -1376 +1376 @@
- m3d_frust_new_frust(result, left, right, bottom, top, nnear, ffar);
+ m3d_frust_new_frust(result, left, right, bottom, top, near, far);
@@ -1380 +1380 @@
-m3d_frust_new_ortho(result, left, right, bottom, top, nnear, ffar)
+m3d_frust_new_ortho(result, left, right, bottom, top, near, far)
@@ -1382 +1382 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -1387,2 +1387,2 @@
- result->corner[i][2] = -nnear;
- result->corner[i+4][2] = -ffar;
+ result->corner[i][2] = -near;
+ result->corner[i+4][2] = -far;
@@ -1390,2 +1390,2 @@
- result->nnear = nnear;
- result->ffar = ffar;
+ result->near = near;
+ result->far = far;
@@ -1458 +1458 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -1463,3 +1463,3 @@
- nnear = frust->nnear;
- ffar = frust->ffar;
- ELM(*result, 0, 0) = 2 * nnear / (right - left);
+ near = frust->near;
+ far = frust->far;
+ ELM(*result, 0, 0) = 2 * near / (right - left);
@@ -1470 +1470 @@
- ELM(*result, 1, 1) = 2 * nnear / (top - bottom);
+ ELM(*result, 1, 1) = 2 * near / (top - bottom);
@@ -1475 +1475 @@
- ELM(*result, 2, 2) = -(ffar+nnear) / (ffar-nnear);
+ ELM(*result, 2, 2) = -(far+near) / (far-near);
@@ -1479 +1479 @@
- ELM(*result, 3, 2) = -2 * ffar * nnear / (ffar - nnear);
+ ELM(*result, 3, 2) = -2 * far * near / (far - near);
@@ -1484 +1484 @@
-m3d_frust_set_far_frust(result, frust, ffar)
+m3d_frust_set_far_frust(result, frust, far)
@@ -1487 +1487 @@
- double ffar;
+ double far;
@@ -1490,2 +1490,2 @@
- result->ffar = ffar;
- scaled = ffar / frust->nnear;
+ result->far = far;
+ scaled = far / frust->near;
@@ -1499 +1499 @@
-m3d_frust_set_near_frust(result, frust, nnear)
+m3d_frust_set_near_frust(result, frust, near)
@@ -1502 +1502 @@
- double nnear;
+ double near;
@@ -1505,2 +1505,2 @@
- result->nnear = nnear;
- scaled = nnear / frust->ffar;
+ result->near = near;
+ scaled = near / frust->far;
@@ -1518 +1518 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -1523,2 +1523,2 @@
- nnear = frust->nnear;
- ffar = frust->ffar;
+ near = frust->near;
+ far = frust->far;
@@ -1535 +1535 @@
- ELM(*result, 2, 2) = -2.0 / (ffar-nnear);
+ ELM(*result, 2, 2) = -2.0 / (far-near);
@@ -1539 +1539 @@
- ELM(*result, 3, 2) = (ffar+nnear)/(ffar-nnear);
+ ELM(*result, 3, 2) = (far+near)/(far-near);
@@ -1544 +1544 @@
-m3d_frust_set_far_ortho(result, frust, ffar)
+m3d_frust_set_far_ortho(result, frust, far)
@@ -1547 +1547 @@
- double ffar;
+ double far;
@@ -1550 +1550 @@
- result->ffar = ffar;
+ result->far = far;
@@ -1552 +1552 @@
- result->corner[i+4][2] = ffar;
+ result->corner[i+4][2] = far;
@@ -1556 +1556 @@
-m3d_frust_set_near_ortho(result, frust, nnear)
+m3d_frust_set_near_ortho(result, frust, near)
@@ -1559 +1559 @@
- double nnear;
+ double near;
@@ -1562 +1562 @@
- result->nnear = nnear;
+ result->near = near;
@@ -1564 +1564 @@
- result->corner[i][2] = nnear;
+ result->corner[i][2] = near;
--- ./math3d_native.h 2002-10-15 14:12:54.000000000 +0900
+++ ./math3d_native.h.org 2002-10-15 14:10:23.000000000 +0900
@@ -72,2 +72,2 @@
- FFAR,
- NNEAR,
+ FAR,
+ NEAR,
@@ -100 +100 @@
- float nnear, ffar;
+ float near, far;
@@ -194,3 +194,3 @@
-void m3d_frust_new_frust(y_frust* result, double left, double right, double bottom, double top, double nnear, double ffar);
-void m3d_frust_new_persp(y_frust* result, double fovx, double fovy, double nnear, double ffar);
-void m3d_frust_new_ortho(y_frust* result, double left, double right, double bottom, double top, double nnear, double ffar);
+void m3d_frust_new_frust(y_frust* result, double left, double right, double bottom, double top, double near, double far);
+void m3d_frust_new_persp(y_frust* result, double fovx, double fovy, double near, double far);
+void m3d_frust_new_ortho(y_frust* result, double left, double right, double bottom, double top, double near, double far);
@@ -200,2 +200,2 @@
-void m3d_frust_set_far_frust(y_frust* result, y_frust* frust, double ffar);
-void m3d_frust_set_near_frust(y_frust* result, y_frust* frust, double nnear);
+void m3d_frust_set_far_frust(y_frust* result, y_frust* frust, double far);
+void m3d_frust_set_near_frust(y_frust* result, y_frust* frust, double near);
@@ -203,2 +203,2 @@
-void m3d_frust_set_far_ortho(y_frust* result, y_frust* frust, double ffar);
-void m3d_frust_set_near_ortho(y_frust* result, y_frust* frust, double nnear);
+void m3d_frust_set_far_ortho(y_frust* result, y_frust* frust, double far);
+void m3d_frust_set_near_ortho(y_frust* result, y_frust* frust, double near);
--- ./rb_math3d.c 2002-10-15 14:11:00.000000000 +0900
+++ ./rb_math3d.c.org 2002-10-15 14:10:26.000000000 +0900
@@ -10,2 +9,0 @@
-#define M_PI 3.14159265358979323846
@@ -2636 +2634 @@
- return rb_float_new(c_frust->nnear);
+ return rb_float_new(c_frust->near);
@@ -2645 +2643 @@
- return rb_float_new(c_frust->ffar);
+ return rb_float_new(c_frust->far);
@@ -2739 +2737 @@
- double nnear, ffar;
+ double near, far;
@@ -2748,3 +2746,3 @@
- nnear = NUM2DBL(argv[2]);
- ffar = NUM2DBL(argv[3]);
- m3d_frust_new_persp(c_frust, c_fovx, c_fovy, nnear, ffar);
+ near = NUM2DBL(argv[2]);
+ far = NUM2DBL(argv[3]);
+ m3d_frust_new_persp(c_frust, c_fovx, c_fovy, near, far);
@@ -2765 +2763 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -2772,3 +2770,3 @@
- nnear = NUM2DBL(argv[4]);
- ffar = NUM2DBL(argv[5]);
- m3d_frust_new_frust(c_frust, left, right, bottom, top, nnear, ffar);
+ near = NUM2DBL(argv[4]);
+ far = NUM2DBL(argv[5]);
+ m3d_frust_new_frust(c_frust, left, right, bottom, top, near, far);
@@ -2795 +2793 @@
-rb_frust_set_near(obj, nnear)
+rb_frust_set_near(obj, near)
@@ -2797 +2795 @@
- VALUE nnear;
+ VALUE near;
@@ -2802 +2800 @@
- c_near = NUM2DBL(nnear);
+ c_near = NUM2DBL(near);
@@ -2804 +2802 @@
- return nnear;
+ return near;
@@ -2808 +2806 @@
-rb_frust_set_far(obj, ffar)
+rb_frust_set_far(obj, far)
@@ -2810 +2808 @@
- VALUE ffar;
+ VALUE far;
@@ -2815 +2813 @@
- c_far = NUM2DBL(ffar);
+ c_far = NUM2DBL(far);
@@ -2817 +2815 @@
- return ffar;
+ return far;
@@ -2832 +2830 @@
- m3d_frust_new_frust(c_frust, c_left, c_right, c_bottom, c_top, c_frust->nnear, c_frust->ffar);
+ m3d_frust_new_frust(c_frust, c_left, c_right, c_bottom, c_top, c_frust->near, c_frust->far);
@@ -2847 +2845 @@
- double left, right, bottom, top, nnear, ffar;
+ double left, right, bottom, top, near, far;
@@ -2857,3 +2855,3 @@
- nnear = -1.0;
- ffar = 1.0;
- m3d_frust_new_ortho(c_frust, left, right, bottom, top, nnear, ffar);
+ near = -1.0;
+ far = 1.0;
+ m3d_frust_new_ortho(c_frust, left, right, bottom, top, near, far);
@@ -2866,3 +2864,3 @@
- nnear = NUM2DBL(argv[4]);
- ffar = NUM2DBL(argv[5]);
- m3d_frust_new_ortho(c_frust, left, right, bottom, top, nnear, ffar);
+ near = NUM2DBL(argv[4]);
+ far = NUM2DBL(argv[5]);
+ m3d_frust_new_ortho(c_frust, left, right, bottom, top, near, far);
@@ -2889 +2887 @@
-rb_ortho_set_near(obj, nnear)
+rb_ortho_set_near(obj, near)
@@ -2891 +2889 @@
- VALUE nnear;
+ VALUE near;
@@ -2896 +2894 @@
- c_near = NUM2DBL(nnear);
+ c_near = NUM2DBL(near);
@@ -2898 +2896 @@
- return nnear;
+ return near;
@@ -2902 +2900 @@
-rb_ortho_set_far(obj, ffar)
+rb_ortho_set_far(obj, far)
@@ -2904 +2902 @@
- VALUE ffar;
+ VALUE far;
@@ -2909 +2907 @@
- c_far = NUM2DBL(ffar);
+ c_far = NUM2DBL(far);
@@ -2911 +2909 @@
- return ffar;
+ return far;
@@ -2926 +2924 @@
- m3d_frust_new_ortho(c_frust, c_left, c_right, c_bottom, c_top, c_frust->nnear, c_frust->ffar);
+ m3d_frust_new_ortho(c_frust, c_left, c_right, c_bottom, c_top, c_frust->near, c_frust->far);
■Ruby/OpenGL http://www2.giganet.net/~yoshi/
wget http://www2.giganet.net/~yoshi/rbogl-0.32b.tgz
●extconf.rbを修正
--- ./extconf.rb 2002-10-15 13:43:27.000000000 +0900
+++ ./extconf.rb.org 2002-10-15 13:42:58.000000000 +0900
@@ -27 +27 @@
-elsif (/mswin32/ =~ PLATFORM || /mingw32/ =~ PLATFORM)
+elsif (/mswin32/ =~ PLATFORM)
→こうしないと、X版のOpenGL対応だと思われてしまいます。
(ていうかPLATFORMはすでにdeprecatedなんだけどさ。)
●/usr/include/GL/glu.hを修正
332行目にあった#ifdef GLU_VERSION_1_3を、396行目に移動させる。
→こうすると、適当なdefineだけはちゃんと定義されてくれます。
●これでコンパイルはOK。
opengl.so -> c:/ruby/lib/ruby/1.6/i386-mingw32/opengl.so
glut.so -> c:/ruby/lib/ruby/1.6/i386-mingw32/glut.so
→site_rubyに移動させておきましたよ。
●sampleを動かして、動くことを確認しておく。
●よっしゃ、ちゃんと動いております。
■GLUT http://www.opengl.org/developers/documentation/glut.html
wget http://www.opengl.org/developers/documentation/glut/glut-3.7.tar.gz
wget http://www.opengl.org/developers/documentation/glut/glut_data-3.7.tar.gz
→ということで、GLUTもきちんとコンパイルしなおそうと思ったのだが、VisualC++必須のようで、
mingwではコンパイルできそうもなかったのであきらめることにしました。
●バイナリをダウンロードしておきまっしょい。
http://www.opengl.org/developers/documentation/glut/glutdlls37beta.zip
http://www.xmission.com/~nate/glut/glut-3.7.6-bin.zip
この二つはどう違うんだろうか。
windiff c:\temp\glut-3.7.6-bin c:\temp\glutdlls37beta
●glut-3.7.6-bin.zip のほうを使ってみるのがいいでしょうか。
→今まで使っていたやつは、どうやら古いversionであるみたい。
→なので、安心して、3.7.6を使う。
●ところが、Windowを×でcloseするとrubyがちゃんととまってくれないという
バグがある。古いbinaryを使うことにしましょう? 全然実害は無いし。
■Ruby関係のinstallの続きを、dynaに場所を移して開始しよう。
●●●環境変数の設定を忘れずに。
setenv CC 'gcc -mno-cygwin'
setenv CXX 'g++ -mno-cygwin'
setenv CFLAGS '-O2 -mno-cygwin'
setenv CPPFLAGS '-O2 -mno-cygwin'
setenv CXXFLAGS '-O2 -mno-cygwin'
setenv LDFLAGS '-mno-cygwin'
■Ruby install
% wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.6.7.tar.gz
% ./configure --enable-shared --prefix=c:/ruby i386-pc-mingw32
■Ruby diff
--- ./ext/socket/socket.c 2002-10-15 13:10:19.000000000 +0900
+++ ./ext/socket/socket.c.org 2002-10-15 13:09:59.000000000 +0900
@@ -98 +97,0 @@
-#if 0
@@ -111 +109,0 @@
-#endif
--- ./Makefile 2002-10-15 13:08:49.000000000 +0900
+++ ./Makefile.org 2002-10-15 13:08:12.000000000 +0900
@@ -21 +21 @@
-LIBS = -lmingwex -lwsock32 -lmsvcrt $(EXTLIBS)
+LIBS = -lwsock32 -lmsvcrt $(EXTLIBS)
--- ./win32/win32.c 2002-10-15 13:07:57.000000000 +0900
+++ ./win32/win32.c.org 2002-10-15 13:06:09.000000000 +0900
@@ -29,2 +28,0 @@
-#define SO_SYNCHRONOUS_NONALERT 0x20
-#define SO_OPENTYPE 0x7008
--- ./win32/win32.h 2002-10-15 13:04:56.000000000 +0900
+++ ./win32/win32.h.org 2002-10-15 13:04:37.000000000 +0900
@@ -226,2 +226,2 @@
-/*extern int isinf(double);
- extern int isnan(double);*/
+extern int isinf(double);
+extern int isnan(double);
■Makefileへむけての環境変数にはどんなものがあるか。
CC CXX CFLAGS CXXFLAGS
http://www.ruby-lang.org/~eban/diary/200111c.html