Project MMO: 2006年1月アーカイブ

Direct3D 10 !?

| | コメント(0) | トラックバック(0)

 そろそろDirectXで制作する準備もしておかなくてはいけないのですが、最新のSDKに付属しているサンプルを見ようとして驚愕。

まずは、Direct3D 10のサンプルがあるのだがWindows Vistaでないと実行できないようだ。というかVistaはまだ発売してないからMSDN会員じゃないと手に入らない。現在所有しているのはMSDN加入権無し版VS.NET2003です。 orz...

そのときのメッセージはこちら

Could not initialize Direct3D 10. This application requires a Direct3D 10 class device (hardware or reference rasterizer) running on Windows Vista.

Direct3D 9のサンプルなら再生できると思ったが、以前のDX9SDKと違ってハードウェアでの再生が出来ない。このときノートPCで元々DX9に対応してないはずなのでデスクトップで再生してみた。ノートで再生できたとしてもパフォーマンス良くないのでDirectXプログラムはデスクトップで行うことになります。

あれ?デスクトップでもハードウェアで再生しない。FX5200はDX9対応している筈なのに。
その時のメッセージはこれ。

Switching to the Direct3D reference rasterizer, a software device that implements the entire Direct3D feature set, but runs very slowly. Do you wish to continue?

DX9.0b→DX9.0cで大きな追加があったのだろうか?ビデオドライバ更新して再度チャレンジしてみるかな…。よく考えると今のデスクトップは最後の改造から3年半経っている。(元々は1999年製)

Vistaが出て半年ぐらいしたらデスクトップ新調したほうがいいかも。

と、書いてデスクトップのビデオドライバを最新にして確認してみた。結果ハードウェアでの再生に成功しましたが重い。これはそろそろ買い替え時ですよって意味かな。とりあえずVistaが落ち着くまでは放置ですが…。因みにノートPCはドライバアップデートしてもダメでした。GPUがMobility128でDirectX6対応という代物でした。(2001年製なので仕方ない)

 年始早々にメルマガでCUIチャットクライアント作成すると公言して今制作したのだが、良く考えると1対1とは言え他のクライアントが送信したデータをサーバー経由でリアルタイムで受信できないと駄目な訳で結局、入力インターフェースと表示領域は分けないとダメだった。(つまり入力中にデータ受信するとゴチャゴチャになる) orz...

 つまり、GUIで制作すべき内容だったのを無理にCUIで作ろうとしていたわけです。CUIで作れないこともないと思うけど、結局OS依存になってしまうので没決定。因みにGUIで制作の予定があるのでGUIに移行しますがX端末プログラミングは未経験&テスト用のX端末が無い為Windowsのみでの開発になります。

 その代わり、MFC-Dialog版・MFC-SDI版・DirectX版の3種類で作ります。対象としているのは

MFC-Dialog版→簡単なツール制作やMFC初心者対象
MFC-SDI版→メッセンジャーソフトを自作したい方を対象
DirectX版→ゲームにチャットルームを組み込みたい方を対象

と、こんな感じです。あとMFC版の画面設計をどうテキストで表現しようかな?リソース晒そう。
そんな訳でUNIXクライアントではtelnetでサーバーの動作チェックということで…。

 WinとBSDで両方ともPostgreSQLを入れていますがWindows側が8.0でBSDが8.1でした。つい最近Win版8.1が出ていたので入れ替え。メルマガではまだ公開しないのですがDBプログラミングを行います。
 一応BSD/Win共にpostgres.hの存在は確認済みですがコード上の相違点はま調べていません。Win側がdllでBSD側がsoであればmake時のオプションが変わりそうですね。

1月の予定
Project MMO:
 PostgresDBプログラミング

メールマガジン:
 チャットクライアント作成

 UNIX版から開発しているから、次にWindowsで動かす時のデバッグに時間が掛かった。原因はFD_SETSIZE絡み。UNIXだとFD_SETSIZEのサイズは1024で以下のようにディスクリプタが振られた。

0…標準入力
1…標準出力
2…標準エラー出力
3…ソケットサーバー
4…クライアント1(telnet)
5…クライアント2(telnet)

この時点では数の少ないほうからディスクリプタが振られ1024には遠く及ばないので特に問題ではない。

これがWindowsだとコマンドプロンプトから起動した場合

1956…ソケットサーバー
1928…クライアント1(telnet)
1912…クライアント2(telnet)

直接実行ファイルをダブルクリックして起動した場合でも、

96…ソケットサーバー
124…クライアント1(telnet)
140…クライアント2(telnet)

といった感じで肝心のFD_SETSIZEは64で定義されている為、そのままでは役に立たないどころかオーバーフローを起こしてサーバーが落ちてしまっていた。結局Windowsの場合はFD_SETSIZEを2048に再定義するという方法で逃げた。正直ココまでばらついているとループ回数が増える分不利な気がする。

この時点でチョットの変更でFLASHクライアント用になれるチャットサーバーができました。サーバー自身はデータの中身について全く検査はしてないのとバッファは固定値なので大量にデータを送ると最大値以降の文字は削除されてしまうくらいです。

ソースのダウンロードはこちら
Download file

このアーカイブについて

このページには、2006年1月以降に書かれたブログ記事のうちProject MMOカテゴリに属しているものが含まれています。

前のアーカイブはProject MMO: 2005年12月です。

次のアーカイブはProject MMO: 2006年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1