駄文

デバイスロスト問題

DirectXにはデバイスロストというとても厄介な問題がある。 現状のDXRubyではD3DXSpriteをロストさせてリセット、復元の処理を入れてある。 これをしないとデバイスロスト時に描画されなくなってしまうのだ。 テクスチャはD3DPOOL_MANAGEDを指定しているから…

DXRubyが動かないPCがあった

MSIのネットブック。 社長のやつなのだが、いない隙に勝手にサンプルシューティングを実行してみたらDirectX Graphicsの初期化でエラーになってコケた。 予想外の結果にびっくりだ。 ATOMプロセッサ使ってる新しいやつだから、まさか動かないとは思わなかっ…

古いDXRubyだと動いた

ソフト頂点シェーダを使う指定をしているDXRubyは動いた。 どうやら原因は想像している通りらしい。

なにかむずかしいことをかんがえよう。これからのぼくは

とりあえずDXRuby1.0.2リリース。 ネットブックを借りて来ちゃったから動作確認してバッチリ。 最新とはいえAtomプロセッサは遅かった。これは丁度いいテスト環境になりそうだ。 一つ買ってもいいかも。 それはさておき。 DXRubyで何か作ろうと思ったとき、…

Rubyゲームプログラミング

基本的なところからもう一度考え直してみよう。 Rubyゲームプログラミングの時代はやってくるのか。 Rubyが好きな人はとても多いと思う。 ゲームを作るのが好きな人も結構いると思う。 しかし、その2つを同時に満たす人は、あんまりいないかもしれない。 ま…

さすがにちょっと疲れたかなー

パトラッシュ、疲れたろう。 僕も疲れたんだ… ,.-─-、 / /_wゝ-∠l ヾ___ノ,. - > /|/(ヽY__ノミ .{ rイ ノ 何だかとても眠いんぶべら パーン l>‐∠l ,.-─-、∩/,. - > //。wv、ゝヾヽY__ノミ ヾ__Д(☆ ミ⊃ ヽ /∨ (ヽ

いま知った

何年か前、イオンだったかどっかで偶然誰かのミニライブに出くわして、聞いたことある歌なんだが誰かは知らんなーと思っていた(そういうのにすごいウトい)のだ。 これだ、この人、この歌。 YouTubeより「奥華子 ガーネット/2007春コンサート ~TIME NOTE~」…

実行速度

ゲームなどの実行速度を決めるのは、大きく分けて2つの要因がある。 「環境」と「アルゴリズム」だ。 環境はCPUやGPU、メモリ、バス、OS、ドライバ、ライブラリなどで、アルゴリズムはゲーム側でどのように描画や計算をするか、という話だ。 2つのうち、どっ…

しごと

ヒマだし事務所に俺1人だから、また休みを取っている。 景気の悪さは結構なものだ。 GWもあったし、ここ一ヶ月ぐらいで半分ぐらいしか出勤していないような気がする。 おかげでDXRubyのリリース準備は進むのだが。 DXRubyと言えば、「こんなもん作ってます」…

そうだ、パブリックドメインにしよう

色々調べてみたのだが、とりあえず参考はコレ。 「パブリック・ドメイン」とは何か http://sourceforge.jp/magazine/03/06/15/1044258 著作権の基礎 http://www.furutani.co.jp/kiso/tyosaku1.html サンプルとして提示するソースコードは全てパブリックドメ…

サンプルとライブラリとライセンス

たとえばDXRubyのサンプルシューティング。 俺が作ったのはプログラムだけだから、そこに限定するとして。 基本的なスタンスは、どのように扱ってもらってもよい。 力作というわけでもないし、特殊な技術を使っているわけでもない。 ぶっちゃけ、絵と音のデ…

プロバイダ料金滞納の件

朝、ネットが繋がらなかった。 電話してみたら料金払ってないからだって。 請求書がいっぱいあってどれが払ってなくてどれが払ったものなのかわからなくなって、まあいいやってほったらかしにしてしまうから、こうなる。 NTTWestだと電話かかってきて、まと…

DirectXで2Dの話

DXRubyは2D専用だからして、DirectX9を使っていながら2D描画しかしない。 2Dとはいえ一応ポリゴンで描画するから、テクスチャを設定したり頂点を計算したりする。 そのあたりはどうもよくわかっていなくて、とりあえずD3DXSpriteを使わないようにはしたが、…

かなり古いけど。

12年ほど前に書かれた文章。 Smalltalk Odysseia http://www.sra.co.jp/people/aoki/SmalltalkOdysseia/SmalltalkOdysseia.html 検索してみてもほとんど件数は出ず、大きく注目されているものではない。 しかしおもしろいことに、はてなブックマークではいま…

初心者向けと速さ

DXRubyは速さを第一に主張しないが、とりあえず速い。 最適化マニアが基本設計レベルから真剣に取り組んだものなのだから、そのぐらいでなくては困る。 ところで、ライブラリの実行性能はどういうときに役立つのだろうか。 ぱっと思いつくのは、とにかく派手…

ちょっとだけね

DXRubyのコンパイルオプションに/Faをつけてアセンブラのコードを吐き出してみた。 んで、愕然。 ぜんぜん最適化されてねぇwwww Makefileのオプションを見るとそれっぽいものが付いてるのだが、それを外してみても変わらず。 最適化関連をバサっと消して…

コンパイラによる最適化の落とし穴

いやー悩んだ。 DXRubyExtensionの動作確認をしてたところ、どーにも点オブジェクトが矩形オブジェクトに化ける。 dfree(解放時にGCから呼ばれる解放関数のポインタ)を使ってクラスをチェックしているのだが、定数のはずなのに値がおかしい。 release_Coll…

DXRubyExtension機能拡張できた

なんか効果的なサンプルをつけてSourceForge.jpでリリースしたろか、と思った。 でも、DXRubyプロジェクトの中のパッケージにすると、これが何かを説明する場所がないし、そもそも別のものだ。 とはいえ別プロジェクトにするとそれはそれで管理が面倒だ。 や…

透視座標変換の可能性

DXRubyはノーマルな機能拡張は、基本的には終わりと考えている。 しばらく様子見て、0.1.0にでもしよう。 んで、0.2.0に向けて新機能を考えていく、とかになるかなー。 新機能としては、さっきも書いた背景描画なども考えていて、これは何らかの形でイメージ…

最適化の余地

DXRubyは0.0.6リリース後、しつこいと怒られそうなぐらい最適化をしてきた。 実際、ゲームのパフォーマンスに影響する基本的な部分はほぼ手をつけ終えた状態だ。 ここから先はほんとに細かい修正を積み上げるか、なんらかのトレードオフを受け入れて、制限を…

古ーい最適化の資料

検索してたら懐かしいものが出てきてちょっと昔を思い出した。 PentiumIIまでのCPUのアーキテクチャと最適化の文書だ。HOW TO OPTIMIZE FOR THE PENTIUM PROCESSOR http://hp.vector.co.jp/authors/VA003988/pentopt.htm当時、これを見ながらアセンブラ書い…

CPUアーキテクチャとソートなど

スカラ型CPUはL1キャッシュのヒット率に処理速度が大きく依存する。 それを意識した仕様・アルゴリズムを書けるかどうかが、プログラムの性能を決める。 もちろん大きな設計レベルで無駄がないことは前提だ。 L1キャッシュは、キャッシュの追い出しアルゴリ…

FPS制御についてもう一度考える

DXRuby0.0.7で修正する前のFPS制御はどうなっていたのかを考えていた。 たぶん、上限の制御はできていたが、コマ落ち制御は全く働いておらず、しかもウソのFPSを返す状態だったと思う。 ここで一つ疑問が発生する。 処理が間に合わなかった場合に、全体の処…

FPS制御とGC

きめ細かなFPS制御をしようと思うと、Rubyの処理負荷変動幅の大きさの前に呆然とするしかない。 ガベージコレクタは手ごわい相手だ。 とりあえず、GCの負荷対策への基本姿勢として、以下の3パターンが考えられる。 (a)負荷変動が大きくてもうまいこといく方…

あんまり関係ないことやコマ落ち制御のはなし

2000オブジェクトを動かすと、コマ落ち制御をしない場合は55fps、した場合は30fpsとなる。 この差は、Ruby+drawの処理がぎりぎり1フレームに入らない場合に大きなwaitが発生するためだと思われる。 基本的に、ゲーム速度を一定に保つ制御をしようとすると、w…

当たり判定の高速処理を考える

DXRubyの他との決定的な違いは、Windows専用でDirectXを使っていることであって、その点で差が出るのは実行環境の限定と実行速度のみである。 言い換えれば、ライブラリの扱いやすさや機能などは純粋に仕様・考え方の相違であって、DirectXを使うかSDLを使う…

高速な当たり判定を実装してみる

Cによる当たり判定の実装にどれだけの効果があるのか検証してみよう。 まず、32*32サイズの画像50個ほどを画面内で動かすプログラムを作る。 こいつらを全て判定するとしよう。 単純に考えて50*50で2500回の判定が発生する。 同じものを2回判定する必要は無…

Cの最適化のはなし

ふと思い出した。 そーいえば、Cはポインタが絡むと最適化できないのだった。 ポインタを使うと、参照先のメモリの中身が変わっている可能性があるから、同じメモリを参照しているといってまとめることはできない。 ポインタを2つつかうと、それらが同じメ…

スプライト機能を考える

DXRubyにはスプライトクラスは無い。 世の中のゲームライブラリにはあるものもある。 そのあたりについて考えてみる。 スプライト機能は初代ファミコンやMSXなどのゲーム機や安価なパソコンにも搭載されている、それはそれは古い機能である。 なにができるか…

先にサンプルシューティングだけ

DXRuby0.0.7にさきがけて、なぜかサンプルシューティングだけリリース。 Exerbでexe化したからDXRuby自体は無くても大丈夫。 どうせでかいから、こっそりスタティックリンク版を入れてやった。 これならDirectX9さえ入っていれば動くはずだ。