2010-02-11
エンタープライズアーキテクト
面白いんで買っちゃった。
以下完全に自分向けのメモ
コード生成テンプレートの微調整
・Operation Body 先頭部に改行追加
・ParameterおよびParameterImplに以下の増強(これはユーザサポートより)
%if paramKind=="out" or paramKind=="inout"%
*
%endIf%
他に追加したらまた書く
2009-08-30
最近のこまごましたやつ
・同名ファイルのビルドその後
VC++の仕様だと判明 2010に期待しつつ.cppは固有に名前付け。
ファイル名同じだと自分が混乱するってのもある。
・Effective C++
定本。やっと買った。すごい面白い。
入門書で省かれてるけどこれ大事な基本だ。
・boost
外出用PCの容量が足りないのでつかってない(えーー!
・Dxライブラリでマルチスレッド
試してみた。どっかのはてなダイアリーにあった手法でうまくいった。
ローディング中に画面描画、ってのをやりたい。まだ不安。
2009-08-13
同名ファイルのコンパイル つづき
んー VisualStudio2005をインストールしてみた。
空のWin32プロジェクト作成
winmainでtest1()とtest2()を呼び出す
プロジェクトに追加→新規項目→test.cpp
test.cppにtest1()を実装
プロジェクトに追加→新規項目→dir/test.cpp
dir/test.cppにtest2()を実装
コンパイル通りますね、ふつうに。
追加したdir/test.cppのプロパティを見たら
出力ファイルが自動で[test1.obj]に切り替わってた。
えー、めんどくさいですが、VC++2008EEを削除して入れ直してみます。
症状変わらなかったら・・だるいにゃー。
2009-08-12
完全同名.cppファイルのコンパイル
検索ワード:ゾンビ状態
えーとー セガ本
(ゲームプログラマになるために覚えておきたい技術)
を読み返して、ちょこちょこ試していたんですが。
サンプルは通るのに自分でやると通らない話。
- Sequence
|-Parent.cpp
|-Parent.h
|+Game
||-Parent.cpp
||-Parent.h
↑のファイル構成そのままだと絶対コンパイルが通らない。
何故かっつーと、コンパイラは同名の.cppファイルがあると
生成する.objファイルの名前がかぶるため、
1ファイルしかコンパイルできないから。
おかしいなぁなんでサンプルは通るんだろうおかしいなぁ。
と思ってサンプルプロジェクトをよく見てみたら、仕掛けがあった。
コンパイルを通したいファイルを選択
→プロパティ
→→"ファイル.cpp"のプロパティページ
→→→C/C++
→→→→出力ファイル
→→→→→オブジェクトファイル名
→→→→→→「$(IntDir)\$(InputName)1.obj」と入力
といった作業をファイル1個1個に仕込んでいたというわけで。
これ忘れるとコンパイル通らない+プロジェクトの度に設定
ってのが気が滅入る。
あとしばらく使っていて、ファイル名が完全に一致していると
自分がどっちを編集しているか混乱するという様なこともあったので、
今後はおとなしくファイル名のほうをいじって柔軟に対応しようと思う。
・・・あれ?
昔作ったプロジェクトで、自動でオブジェクト名解決してあるんだけど・・・。
インクルードパス
プロジェクトのプロパティ
->構成プロパティ
->C/C++
->全般
->追加のインクルード ディレクトリ
ここに
$(ProjectDir);
を追加すると、プロジェクトのトップディレクトリからの相対パスが
通るようになる。常にやっといて○。
boost導入
http://www.kmonos.net/alang/boost/
インストール→フォルダをパス通す
でboost使えるようになった 導入は時間かかったけど。
てことで自分が書いたプログラムが
boost導入者にしか読めないものになった。あちゃーー
2009-08-11
Dxライブラリで作成したアプリが終了してもプロセスに残る場合
ProcessMessage() == -1
のときにループを抜けて終了処理へ飛ぶように書けば残らない。
それ以外の書き方をすると、終了処理はひとそろいするが
プログラムのループからは抜けないで処理を続ける。
2009-07-19
バイト数と構造体のうまい配置
マイクロソフトC++コンパイラ (VC++2008SP1)での結果
int=4
float=4
double=8
bool=1
char=1
なんかboolは4バイトと覚えてた
確認は大事だな・・・
構造体の変数は、宣言した順に並ぶ
ただし、メモリ座標は変数のサイズで割りきれる場所に移動。
例
char a,b
int d
メモリ上の配置
a, b, # #, d d d d,
char a;
int d;
char b;
メモリ上の配置
a # # #, d d d d, b # # #,
理由はアセンブラに変換したとき、命令数が少なくなるから。
2009-03-10
レンダリング性能
ライブラリのコードとかちまちま見つつベンチマーク
一切の余計な処理(ソートとか)無しの場合、
1.6GHzのCPUとそれなりのVRAMがある場合
(AGPのビデオカードでもオンボードでもOK)
描画にCPUリソースを全部持ってかれる前に描画限界が来る。
結果
32x32の画像で4000枚程度。回転はOK、
拡大は描画面積に反比例して上限が低下。
3Dをオフにしない限り、ポリゴン(四角形のテクスチャ)として
流せるうちはレンダリングせずに溜め込み
円の描画などでポリゴンを流し込めない描画になった時に
まとめてレンダリングしている。
点、線、矩形はポリゴン描画が実装されているため
画像と同様に扱える。(とくに矩形はパフォーマンスも大差ない)
領域外にはみ出てる場合はクリッピング処理される
クリッピング計算後完全に画面外の場合はレンダリングされずに
計算のみで終わる
レイヤーソート機能の再実装
んーーーー 一切のゲーム処理無しとしても
32x32の画像で2000描画くらいが上限だ 微妙ー
追記 再々実装
制約ちゃんとかけたら32x32x3800は余裕だった。
8x8はいくつまでいけるかな!