2012-07-01から1ヶ月間の記事一覧

x86とGCCと分岐と私

mrubyのVMはoptableに命令と実際のアドレスの変換テーブルをおいて、gotoのときにそれを使って変換→ジャンプをしているのでダイレクトスレッデッドじゃなくてトークンスレッデッドじゃないのかと思う今日この頃。識者の意見求む。 今回はCPUのアーキテクチャ…

コードジェネレータとwhileアルゴリズム

最近mrubyをいじって遊んでいるわけだが、mrubyを気合入れて速くするぜ貢献するぜ、という感じではなくて、どのように変更を加えたらどのぐらい速度が変わるのか、を色々試している感じ。だからとても取り込まれそうにない修正もするし、すぐにでも取り込め…

mrubyのOP_SENDとブロック引数

いまのところ興味はVMのパフォーマンスのみ。昨日ためしたことを忘れないうちに残しておく。まずちょっと気になったFloatオブジェクトのサイズから。 mrubyはmrbconf.hを変更することで設定を変えてコンパイルすることができる。正規表現や標準入出力などを…

GCCの勉強とmruby

最近ちょとmrubyのコードを見たりしていた。ついでにGCCの使い方を勉強しつつ、吐き出すアセンブラを眺めてみたり、そんな感じ。 勉強がてらVMまわりを少しいじってみたので自分用メモを残しておく。

衝突判定のサンプル

1.2まではDXRubyEx用のサンプルとして含めてあったものを、Spriteを使うようにして、ついでに回転できるようにした。 わかりやすくて良いサンプルかというとちょっとよくわからないが、衝突判定のテスト用には使える。 #!ruby -Ks require "dxruby" # しかく…

DXRuby1.2.3リリース

微妙にハンパなリリースではあるが、1.2系最新版。中身は1.3dev開発中に追加した色々のうち、Shader/Sprite/アナログ入力以外をバックポートしたものである。これにより、そのうちリリースすることになるはずの1.4.0は1.2.3と比較して左記の機能追加のみが差…

Rubyからマシン語を直接呼ぶ

Ruby1.9のDLで。 require 'DL' str = "\xb8\xff\x7f\x00\x00\xc3" # mov eax, 0x7fff : ret i = [str].pack("P").unpack("l!")[0] cfunc = DL::CFunc.new(i, DL::TYPE_INT) p cfunc.call([]) #=> 32767 文字列としてバイナリを直接生成して、そのポインタをD…

RayCastによる擬似3D描画

わざわざDXRubyでやるような代物ではないのだが。速度的にも、表現力的にも。 RayCastというのは古い技法で、Quakeなどのゲームで初期の頃に使われていた。 壁は2Dマップで表現し、画面を例えば640*480なら横640列と考え、視点の位置から横ピクセル単位に視…

アナログスティック入力

Twitterで@iMAKOPiさんからアナログスティック入力対応パッチを頂いた。スティック2本とPOVをデジタル入力する機能だったので、それをベースにアナログ入力メソッドを追加してみた。 require 'dxruby' font = Font.new(32) Window.loop do x, y, z, rx, ry, …

頂点シェーダでぐるぐる

なんとか画像の3D描画を実現。 ポイントはz座標で、DXRubyで指定する描画優先順位のzは実はそのまま3D空間のz座標として渡されている。ので、x軸y軸回転さえしなければ3D座標としてzを使って遠くにするということは可能だ。座標系として奥がマイナスになると…