Riko。なぜかFramebufferObject辺りの整理を始めてしまった。おかしいな、他にやることがあったような…。
とりあえず今は古い作りになってて、拡張ライブラリ側ではモジュール関数だけ提供してRuby側ではそれをクラスにラッピングしてた。ただこれは作りもめんどいし汚いし遅いので拡張ライブラリ側でクラスの実装をするようにする。
あとはフレームバッファにクリアカラーとかシザーテストとかビューポートなんかの設定が入ってて、設定系はRenderStateクラスにまとめよーと思っていたのでそれを。
と思ったんだが、クリアカラーとかビューポートの設定はフレームバッファについてないとやっぱりおかしいか…。OpenGL的にはFBOにくっついてる属性ではないんだが、それを切り離して扱う状況ってのもなんか変だな。ということで明かに別だろうというシザーテストだけ削除してあとはそのまま。
他はべつに困るところもなくそのままC++に移行したよ。ただめんどくて時間かかるだけだ…。
しかしFBOはこれでいいんだが、今までDefaultFramebuffrerクラスにしていた0番のFBOはなんとかしないとな。そのまま0番のFBOにしといてもいいんだがそれだとFBO拡張が無いと操作できなくなっちゃうわ。
C++でクラスを作るのに引数の省略が簡単にできなくて嫌だったんだが、自作のC++用RubyAPIラッパクラスを見てたら対応してあった。あーなんか以前書いた覚えがあったわ。
ただちょっと使いづらかったので使いやすいようにちょこっといじって導入。テンプレート使ってるんですけど、C++でテンプレート引数のオーバーロードって正当なんですかね。たぶん正当だけど。あと関数テンプレートの引数はデフォルト値指定できないらしい。なんてややこしい。
とりあえずFBOクラスは出来たっぽいがテストが書きたいな。でもテスト書くのってむずかしいよね。
あとはDefaultFramebuffrerをなんとかして、RenderStateクラスもC++化したいんだが、RenderStateの前にOpenGLのコンテキストをラップするContextクラスを作ってしまおう。マルチコンテキスト対応への布石ってことで。
Contextクラス導入でたぶんDirect3Dっぽくなるんじゃないだろうか。
monotone 0.46が出てますよー。MacPortsが既に0.46なのに吹いた。
2010年1月17日(日) 21:40:35 UTC 0.46をリリース。 変更点 - "automate stdio"(と下記の"automate remote_stdio")がメッセージ 表示や警告やティッカーなどの帯域外情報をエンコードするのに別な ストリームを使うようになりました。将来のstdioバージョン変更に 対応するために標準出力に特別な"header"セクションが追加されました。 stdioとremote_stdioで使われるエラーコードも変更になります。 間違ったコマンド呼び出し(不明なコマンド、無効なオプション、パー スエラーなどなど)はコード1を返し、実際にコマンド実行中に起きた エラーではコード2を返します。エラーコードは全てのパケットで返 ることはなくなり、最後の'l'("last")パケットにのみ付加されます。 マニュアルの"mtn automate stdio"に新フォーマットについて詳しく 記述してあるので、よく読むようにしてください。 - 'heads'コマンドがすげー速くなりました(といっても今まで特に遅か ったというわけでもないです)。"h:*"セレクタ(全てのブランチのヘ ッド)を好んで使うという人でもなければ、たぶん気付くようなもの でもないのですが、これには主に将来的に'heads'が速いことを見越 した変更が可能になるという意味があります。 これによりデータベースのスキーマが変更されたので、 'mtn db migrate'を実行する必要があります(dbのバックアップはと ってからやってね)。 - 'status'コマンドが現在の(コミットされる)リビジョン番号を表示す るようになりました。さらに_MTN/option内のブランチオプションが親 リビジョンのブランチと違っていたらそれも表示します。 - 'log'コマンドのcert名出力も翻訳されるようになりました。 新機能 - 新コマンド"automate remote_stdio"が追加されました。これはリモー トサーバでのautomateコマンドの実行を可能にします(たとえば、一つ のデータベースでnetsync接続を受け付けたりviewmtnを走らせるため の接続を受け付けたりすることができます)。この機能はサーバ側も monotoneの0.46以降である必要があります。アクセス制御のためにサ ーバでは新しいluaフック "get_remote_automate_permitted(identity, command_line, options)" を使います。 - これとよく似た機能の"automate remote"コマンドも追加されました。 こっちは1コマンドだけ実行し、出力もstdioエンコードされません。 - "bisect"コマンドが追加され、ある範、囲のリビジョンから特定のリビ ジョンを検索できるようになりました。これはなんかぶっこわしたりと か機能が削られたリビジョンを特定するのに便利だったりします。 - automate機能に'push'、'pull'、'sync'が追加されました。これらは automateでないバージョンと同じような働きをします。 - 共通オプション'--timestamps'が追加されました。警告やプログレス メッセージやエラーやティッカーといったメッセージの前に現在のロ ーカルタイムスタンプをくっつけます。たとえばmonotoneサーバにク ライアントがつないできた日時をログに残したい時なんかに使えるで しょう。 バグ修正 - 0.45でのキーのマイグレーションにより'git_export'の`committer` フィールドが正しく出力されなくなってしまったのを修正しました。 - 'db info --full'が1リビジョンしか入ってないデータベースでもク ラッシュしないようになりました。 - カスタムコマンドを作るのに使ったりするLua関数のmtn_automate がバイナリデータを正しく扱うようになりました。 - `db info`がcertに対して再び正しいバイト数を返すようになりまし た。 - 公開鍵を`read`や`automate read_packets`で読み込んだ時にデータ ベースに既にそのキーが存在すると不整合が引き起こされるように なっていました。これは修正されえました。 - `annotate`で対象ファイルが空でもクラッシュしないようになりま した。 その他 - LuaベースのMonotone拡張コマンド"mtn remote_export"が contrib/commandに追加されました。以前の履歴を全部取得する必要 なくリモートのリビジョンをローカルに書き出すことができます。
automate周りがパワーアップしてますね。特にremote_stdioでservしながらautomateできるのは待望の機能。是非使いたいところ。
あとguitoneが0.46でたら本気出す的なこと言ってた気がするのでそれも期待。
あとあと俺のmonotoneチュートリアルも0.46出たら本気出して更新しようと思ってたのでそろそろやりたい。
しかし問題があって、0.45からWindowsバイナリでCHARSETをutf-8以外にするとdbを読み込んでくれなくなっちゃったんだよね。Windowsバイナリが悪いのかどうかは調べてないけど、0.46では直ってるといいなぁ。俺はutf-8でもそんなに困らないんだけど、他人に説明するならcp932にしたいんだよね。