SDIでのglutInitの引数

[戻る]
しぐれ 2003/11/10(月) 10:30:21
現在,Visual C++6.0,SDI環境でOpenGLで3Dを表示させるプログラムを作成しています.
glutWireTorus関数でトーラスを表示させるために,
glutInitで初期化しようとしましたが,
引数を何処から取得したらいいのか分かりません.

SDIでint main(int *argc char **argv)に相当する変数は何処で設定されているのでしょ
うか?
よろしくお願いします.

PATIO 2003/11/10(月) 11:10:03
問題が二重化してませんか?
glutInitの引数に渡す内容が知りたいのでしょうか?
それとも起動オプションから取り込む方法が知りたいのでしょうか?

glutInitの引数に渡す情報を取り込みたいだけなら起動オプションから
取り込まなくてもiniファイルを読み込むとか、
固定でよいなら内部的に定数定義するとかすれば済むと思います。

起動オプションから取り込みたいのであれば、
CWinApp::ParseCommandLineとかCCommandLineInfoを調べてみてはどうでしょう。

PATIO 2003/11/10(月) 11:13:11
MFCか、SDKか書かれていないのでMFCで書いてしまっています。
SDKでと言うことであれば、無視してもらって良いです。

MFCなら、直接、CWinApp::m_lpCmdLineを参照する方法もあるかと思います。

しぐれ 2003/11/10(月) 11:24:48
>PATIOさん
SDI上でglutInitに渡す引数の内容を知りたいのです.

>固定でよいなら内部的に定数定義するとかすれば済むと思います。
試しにint *dummy_argc, char **dummy_argv
という変数を自分で設定してみました.
動作はしましたが,なぜこれで大丈夫だったのか分かりません.

PATIO 2003/11/10(月) 15:24:48
glutInitに関する情報はどのくらい集めてみたんでしょう?
私自身はOpenGLを使った事はありませんが、
(グラフィックス用のライブラリである事は承知しています)
Web上を検索してみたところ、通常は起動時にコマンドラインで引き渡された物を
そのまま引き渡してOpenGLの動作に関する初期化情報に使うみたいですね。
もっとも、コマンドラインで何も引き渡されない事もあるでしょうから、
argcが0でもそれなりに初期化されるようになっているのでしょう。
本来のmain関数の引数としては、0と言うのはおかしな話ですけれど。
但し、この場合、コマンドラインでいくら文字を指定しても
glutInitには引き渡されませんから、操作する側の意図どおりには動かないことに
なりますね。
この辺はソフトウエアとしての仕様だと思いますが、
アプリに対してコマンドラインによるOpenGLオプションの指定を許すのであれば、
当然、コマンドラインの引渡しが必要になるでしょう。
この場合、glutInitが期待している形にコマンドラインの文字列を再編集して
引き渡す必要があると思います。
とあるHPには、

glutInit はさらにコマンドライン・オプションの処理を行うが, 記述されたオプショ
ンの解釈ははウィンドウ・システムに依存する

と言う記述がありました。
したがってWindows向けのコマンドライン解釈がどうなっているかになると思います。
通常は、C言語のmainで引き渡される形式に再編集すればいいのだと思いますけれど。
Webを検索すれば、この辺の記述を直接的に行っているところがあるかもしれません。
兎にも角にも書籍なり、HPなりを探して関数の仕様とかライブラリの仕様をきちんと
理解してから使わないと思わぬところで躓く事になるかもしれないです。
OpenGLに詳しいグラフィックスプログラミング関連の掲示板に行った方が適切な回答が
すぐ帰ってくるかもしれないですね。

しぐれ 2003/11/10(月) 16:30:49
[[解決]]
OpenGLのMLをいくつか回ってみたところ,「glutInitで初期化しなくても動作する」
そうです.
確かに,初期化しなくても描画ができていました.
もう少し複雑な描画をしたときにエラー等不具合が出てくるのかもしれませんね.

>PATIOさん
色々教えていただいてありがとうございました.

古いスレッドには追加発言できません。