ラベル OpenGL の投稿を表示しています。 すべての投稿を表示
ラベル OpenGL の投稿を表示しています。 すべての投稿を表示

3.29.2009

coLinux+MinGW+Debian+OpenGLなクロスコンパイル環境でfreeglutを使う

久しぶりの変態環境下での作業に関するメモ。

以前構築したglut環境ではキーボードの同時押しとかが利用できなくてちょっと不便だなぁと思っていたので、その代替え手段を探していたところ、freeglutなる代替え手段が存在することを発見。

通常リリースの最終更新が2005年と、既に枯れていて安定した運用が望めそうなので、さっそく入手。
(かといって開発が停止しているわけではないので、ソコントコよろしく。)
入手すると、中身はソースコードのみ。
ドキュメント曰く、「使うなら自分でビルドしたまえ明智君。」という事らしい。
既に変態環境で使うことをもくろんでいるので、こんなの予想していなかった。

けれども、せっかくやろうと決めたので方策を練る。
んで、実際に試したのが
・ VS2008でビルド
・ 変態環境に移して運用
というもの。結論から言えば、それでうまくいっている。
んで、この文書がその時のメモ。


まずはVS2008でビルド。
これについては特に書くことはないけど、自前でビルドしようと思っている人は、通常のビルドではなく、バッチビルドを実行しなければ正しいファイルを得られないという点に注意。

「自分でビルドするのがめんどい」って人向けに、私の私家製ビルド品をいつものところに置いておきますんで使ってください。
私がやったのはVS2008によるバッチビルドだけで、ソースに関していじったところはない(プロジェクトファイルの変換ぐらいはしたけど)ので、ソースが欲しい人はオリジナルのものを。
ライセンスはXライセンスらしいので、それに従った運用をすればOkだと思う。
(問題があればご連絡ください。)
※ ちなみに配布しているアーカイブ中では、*_d.libってやつがデバッグ版で、_dの無いものがリリース版のビルドなのでお間違いなく。

ヘッダーファイルとライブラリファイルをゲットしたら、まずはヘッダーを以前の記事同様、OpenGLのインクルードファイルを展開したGLディレクトリ以下に放り込む。
ライブラリは、
/usr/i586-mingw32msvc/lib

以下に。
(アーカイブに入っているのは*.aファイルではなく*.libファイルだけれども、特に変換の必要は無く、そのまま利用できる。)

そこまでできたら、適当なソースコードを用意。
今回は前回の記事で使ったのと同じものを利用。


#include <gl/freeglut.h>

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3d(1.0, 0.0, 0.0); /* red */
glVertex2d(-0.9, -0.9);
glColor3d(0.0, 1.0, 0.0); /* green */
glVertex2d(-0.9, 0.9);
glColor3d(0.0, 0.0, 1.0); /* blue */
glVertex2d( 0.9, 0.9);
glColor3d(1.0, 1.0, 0.0); /* yellow */
glVertex2d( 0.9, -0.9);
glEnd();
glFlush();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glClearColor(0.0, 0.0, 0.0, 0.0);
glutMainLoop();

return 0;
}


ポイントは、#includeにfreeglutを指定すること。
それから、コンパイルのためのコマンドは

mingw-cc gl.c -lfreeglut -lglu32 -lopengl32 -mwindows


などとする。
-lfreeglutの部分は、使うfreeglutなファイルに合わせて変えると良い感じ。
(デバッグ版なら_dをつけるし、スタティックリンク版ならそのようする)

こうしてできたファイルは、実行時にfreeglut.dllを要求するので、そこだけ注意。
glutがglut32.dllを要求したのと同じやね。

※ ここでも、配布しているアーカイブはデバッグ版とリリース版で別名にしているけれど、これは単に衝突しないように&見分けがつくようにとの配慮なので、使うときにはどちらもfreeglut.dllにリネームしないと正しくお動かないので注意

して、できあがったものの実行結果が以下。



使えるAPIについては公式サイトからAPIのリストを確認できるけれども、基本的にはglut互換なので心配なし。
あとは何に使うかが問題か(笑)

9.14.2008

むしゃくししてやった、今は公開後悔している。――いや、本当に。

つい昨日、寄り道を予想と決意したばかりなのに、なにをやっているんだろうか。

メタセコイアでモデリングの練習をしてたら、ふとOpenGLモードがあることに気づき、そこから

・OpenGLって、比較的マルチプラットフォームなライブラリだった気がする
・OpenGLって、DLL化されてた気がする
・じゃあ、Delphiでも使えるんじゃないか?
・(DelphiのLibディレクトリをのぞいて)OpenGL.dcuがある!こりゃいけそうだ!!
・ネットで情報を探す→あれ?WindowsでOpenGL使うのって、Linuxと流儀が違ったりするの?
・どうやら流儀がだいぶ違うらしいことに気づく(ここまで2時間ほど消費)
・そういえば、GLUT使うと、統一的なインタフェイスでプログラミングできるって、授業で習った気がする。
・よし、Delphi向けGLUTを探そう。
・結構速く見つかったな。試すぞ。(ここまでさらに20分ほど)

・うごかねーーーーーーーー!!!

・このヘッダーがまずいんじゃね?(気づいたのがさらに3時間ほどたってから)
・使えるライブラリ無いの?
・さらに探す→サンプル付きのライブラリがあるじゃまいか!
・使ってみる

・またうごかねーーーーーー!!!

・ソースを微調整
・動いた!ktkr!!!!(ここまでさらに10分ほど)

そんなわけで、寝てませんよwwwww

苦労の結果提出できる画像がこれだよ!!!




ほんと!後悔するよNE☆
OpenGL好きだから、こんなもんじゃやめねぇけど!

使ったのはこれ↓
http://delphi.codefetch.com/example/k4/lunits/elfglut.pas?qy=getmenu

施した改造は、uses節にWindowsを追加したこと。

注意点として、glutInitの呼び出し方法が特殊で

glutInit( MS_LIB )

のように呼び出さなくてはいけないということ。
if文の条件式として呼び出せば、エラートラップもできていいのかもと思った。
あとは、C向けのGLUT開設サイトのサンプルソースが、ほとんどそのまま通る。
Delphi with OpenGLしたい人はお試しあれ。

# 追記
実行時にはglut32.dllを要求するから、どっかから拾ってくる必要があるよ!

# 追記2
眠い時に難しい漢字使ってタイトル書くもんじゃないね!

7.14.2008

Linux/Windowsのクロスコンパイル環境の構築2

つづき。

http://www.libsdl.org/extras/win32/common/opengl-devel.tar.gz
から、OpenGLのヘッダーファイルをもってくる。

tarで展開して、/usr/i586-mingw32msvc/include/下に、展開したヘッダーをコピー。

次に、glutを放り込む。
ナマのOpenGLたたくより便利だろうから。
そんなわけで、
http://www.rimath.saitama-u.ac.jp/lab.jp/tsakurai/opengl/mingw-lib/
からglut.hをとってきて、OpenGLのヘッダーを叩き込んだところに同居させる。

こちらのサイトにあるサンプルソースを拝借して、適当にテスト用のCプログラムを書く。
書けたら、
$ mingw-cc filename -lglut32 -lglu32 -lopengl32 -mwindows
などとしてコンパイル。
できあがったファイルを、Windowsにもっていく。

Windowsサイドでは、
ftp://ftp.sgi.com/sgi/opengl/glut/glutdlls.zip
あたりからdllをもってきて保存。そして展開しておく。
展開したら、パスの通ったディレクトリか、さっきWindows側にもってきた、Linuxで作ったexeファイルのある場所と同じ場所に、glut32.dllとglut.dllをコピーする。

ここまでできたら、持ってきたexeを実行する。
で、下図のようになればOK。うれしいたのしい。ハッピーハッピー。

Linux/Windowsのクロスコンパイル環境の構築1

というわけで、coLinux+Debian(Lenny)+mingw-cc+OepnGLで、Windows上で動くOpenGLアプリをcoLinux上で作れる環境を整えてみようっていう話。

以前にetch上で整えたときに、時間があればまとめる的な話をしつつ、まったく手をつけていなかったのに、今回の再インストールという事態になったため、早めに残しておくことに。

まずは

# apt-get install mingw32 mingw32-binutils mingw32-runtime
で、必要なものを放り込む。

次に、
# locate mingw32
して、mingw32コンパイラなどの関連ファイルを見つける。
我が家のcoLinux+Debianでは、/usr/bin/i586-mingw32msvc-*としてコンパイラ群がインストールされていた。

そこで、これに対してシンボリックリンクを作成し、コンパイルの時打ち込むコマンドが少なくて済むようにする。
私はmingw-ccをCコンパイラに、mingw-c++をC++コンパイラに割り当てた。
全体で使うなら、コンパイラのあるディレクトリ内に一緒にシンボリックリンクを作成してもいいけど
個人で使うだけなら/home/user_name/binあたりに置いとくほうがいいかも。

リンクをはったら、
$ mingw-cc --version
とかして、うまくいってることを確認。

うまくいっていたら、Hello world.あたりを書いてコンパイルする。
コンパイルしてできたファイル(デフォルトならa.exe)をWindowsに移動させ、実行する。

うまくいったら、クロスコンパイル環境はできあがり。
(ここまでうまくいってれば、mathライブラリを使うときのコンパイルオプション-lmとかも普通に通るはず。)

まずはここまで。
OpenGL導入は次の記事で。

6.04.2008

上手にできました~!

MinGW+Linux+OpenGL+glut環境での、Windows向けプログラムのクロスコンパイル環境の構築。

http://members3.jcom.home.ne.jp/mediafish/img/gl.png

こちらサンプルプログラムを利用した実行結果が上記の物。

簡単に言えば、前回の記事で整えたクロスコンパイル環境に、OpenGLとglutを追加したもの。

…なんですが、この「Windows上では窓を出したいけど、Linux上ではCUIのみ」かつ「そこでOpenGLを使ったプログラムをクロスコンパイルしたい」ってな要望に応えてくれるサイトはなかなか見つからず、いくつかのサイトをかけずり回ってようやく整いました(;´Д`)
(実は以前にチャレンジするも失敗していて、それをブログに書いた気でいたのですが、記事を探してみたら書いてなかったみたいです。)

そのうち暇があればまとめる予定。
なにはともあれ、これでしばらくは遊べそうだ。