迷いつつ漸進(ふて9)

今週の開発時間は5時間でした。

分かってないよsvn!!(私が)

とにかく使い方がよく分かっていなかったのでsvnのレポジトリを作り直しました。履歴は完全に消えましたがまだダメージは少ないです。

  1. レポジトリの作成
  2. 既に作成していたディレクトリを作成したレポジトリに「インポート」
  3. 既に作成していたディレクトリのリネーム
  4. 既に作成していたディレクトリと同名のディレクトリを作り直す
  5. そのディレクトリの中で「svnチェックアウト」を実行
  6. 以上。後はがしがし編集して時々「svnコミット」を実行

という使い方でOKなんかな?

画像読み込み

実行時にファイルフォーマットをパーズするのも変な話なので、画像については自前フォーマットを定義して(といってもtga並にシンプルなフォーマットですが(´・ω・`))、既存ファイルからのコンバータを作成しました。コンテンツパイプラインの構築さえしっかりしておけば、コンバータ側が入力ファイルの適正を判定してくれる分安全ですしね。そんなわけで独自フォーマットのテクスチャファイルからテクスチャバッファインスタンスを作成する処理を作成しました。fread,fwrite,fseek,ftell使いまくりです。

怖い怖いリークが怖い

(面倒なので)アロケータを自作してメモリの行方を管理していない以上メモリリークが怖いのでとりあえずはデバッグcrtの力を借りることにしました。情報ソースは以下。

メモリ リークの検出と特定
http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/MemLeaks/

基本は超有名な

#if defined(_DEBUG)
 #include <stdlib.h>
 #define CRTDBG_MAP_ALLOC
 #include <crtdbg.h>
 #undef  CRTDBG_MAP_ALLOC
#endif

さえ全ソースのてっぺんに埋めておいて(もちろんヘッダに書いてincludeしておけば問題ない) 、アプリケーションの最初に

#if defined(_DEBUG)
	_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

を呼んでおけば、ヒープ解放忘れ時に「Detected Memory Leaks!!」というメッセージが出てお知らせしてくれる。のだが、このままではヒープ確保した場所までは教えてくれないのです。
で、次のようにファイル名、行数の情報を付加したnewを新しく定義して、以後NEWを使うことで、リーク発生時には問題のメモリ確保を行なったファイル名、行数付きで警告を出してくれるようになりました。デバッグ用newのこのテクニックについて熟知していない以上既に存在するnewを完全に置き換えるのはなんだか怖かったのでnewの完全置き換えはしていません。

#ifdef _DEBUG
 inline void * operator new (size_t size, const char * file, int line)
 { return ::operator new (size, _NORMAL_BLOCK, file, line) ; }
 
 #define NEW new (__FILE__, __LINE__)
#else
 #define NEW new
#endif

doxygen, graphvizのインストール

doxygenはここから
http://www.stack.nl/~dimitri/doxygen/
doxygenがクラス階層等を視覚化する為に使う外部実行ファイルであるgraphvizはここから
http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.12.exe
ダウンロードしただけでインストールはまだです。