annotate paper/test.tex @ 19:c20d7b72cd4a default tip

finish?
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Fri, 18 Feb 2011 05:39:37 +0900
parents 19be75493fbb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d557035f6f61 paper base commit.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{テスト環境の構築} \label{chapter:test}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
2 本研究では、逐次型プログラムとして Super Dandy の OpenGL バージョン、Cerium
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
3 の Rendering Engine のみを使用したバージョンを用意した。これらと Task Dandy
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
4 を用いてその挙動をテストし、全てのバージョンにおいて同じ挙動をしている事を
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
5 確認できるテスト環境を構築する。ここではテスト環境のために追加した機能に
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
6 ついて説明する。
0
d557035f6f61 paper base commit.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
9
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
8 \section{Capture モードと Trace モードの実装}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
9 ゲームにおいてプレイヤーからの入力は制御不能なランダム要素であり、
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 バグを再現することを困難にする(\ref{sec:player}節)。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
11 そこでプレイヤーからの入力を1フレーム毎に記録し、バイナリデータとして
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
12 書き出す Capture モードと書き出されたバイナリデータを読み込み、プレイヤーの
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
13 入力を再現する Trace モードを実装した。どちらのモードも実行ファイルに
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
14 オプションとファイル名を付けることによって起動することが出来る。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
15
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
16 \begin{verbatim}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 % ./demo -capture capture.dat
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 Start Capture mode.
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
20 % ./demo -trace capture.dat
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 Start Trace mode.
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 \end{verbatim}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
23
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
24 2 つのモードでは TraceBuff という単方向リスト型のバッファを使用している。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
25 Capture モードではバッファサイズが足りなくなると新たな TraceBuff を allocate
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
26 して next ポインタにアドレスを格納する。バイナリデータに書き出す時はリストの
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
27 先頭から順番に書き出していく。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
28
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
29 Trace モードではバイナリデータのサイズを計算し、予め必要なサイズの TraceBuff
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
30 を allocate しておく。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
31 (図\ref{fig:pad_buff})
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
32
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
33 \begin{figure}[h]
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
34 \begin{center}
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
35 \includegraphics[scale=0.6]{images/pad_buff.pdf}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
36 \end{center}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
37 \caption{TraceBuff}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
38 \label{fig:pad_buff}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
39 \end{figure}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
40
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
41 この 2 つのモードは用意された 3 つの Super Dandy 全てに組み込まれている。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
42 よって旧バージョンで入力データを記録し、記録したデータを新バージョンで
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
43 読み込むことも可能である。これにより、両バージョンで異なる動きが見られた
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
44 場合、そこにバグが潜んでいると仮定することができる。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
45
9
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
46 \section{SPE における乱数生成の欠点}\label{sec:create_random}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
47 乱数のランダム性はバグの再現性を落とすが、乱数生成器を無効にするか、定数で
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
48 シードすることによって再現性を下げることなく、テストすることが出来る
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
49 (\ref{sec:random}節)。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
50
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
51 通常のシーケンシャルなプログラムでは 1 つの乱数列から順番に各 Move 関数が
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
52 乱数を取得し、使用する。しかし並列プログラムでは Move 関数が Task として
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
53 SPE に送られる。各 SPE 内では以下のような処理が行われる。
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
54
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
55 \begin{enumerate}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
56 \item 定数でシードし、乱数列を生成する。
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
57 \item Task1 で乱数列の先頭から 1 番目の乱数を取得する
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
58 \item Task2 で乱数列の先頭から 2 番目の乱数を取得する
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
59 \item Task3 で乱数列の先頭から 3 番目の乱数を取得する
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
60 \end{enumerate}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
61
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
62 乱数列は SPE 毎に独自に生成されるため、各 Task(=Move) が受け取る乱数は
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
63 逐次実行した時とは異なる値となってしまう。また、SPE 内でも Task 同士に
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
64 依存関係を持たせない限り、Task の実行順序が保証されないのでこれも受け取る
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
65 乱数が不定となる原因となる。(図\ref{fig:spe_random})
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
66
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
67 \begin{figure}[h]
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68 \begin{center}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
69 \includegraphics[scale=0.4]{images/spe_random.pdf}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
70 \end{center}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
71 \caption{SPE 内での乱数の生成}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72 \label{fig:spe_random}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
73 \end{figure}
14
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
74 OB
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
75 \newpage
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
76
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
77 そこで予め PPE 内で乱数列を生成し、inData として Task に渡しておく。
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
78 Task Dandy では Task の生成、定義がされるタイミングは Super Dandy における
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
79 Move 関数や Collision 関数が実行されるタイミングと同じである為、渡される乱数
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
80 は Super Dandy と同じ乱数となる。(図\ref{fig:ppe_random})
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
81
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
82 \begin{figure}[h]
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
83 \begin{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
84 \includegraphics[scale=0.5]{images/ppe_random.pdf}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
85 \end{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
86 \caption{PPE 内での乱数の生成と乱数の受け渡し}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
87 \label{fig:ppe_random}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
88 \end{figure}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
89
9
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
90 \section{テストログに記述する情報とそのタイミング}
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
91 シーケンシャルなプログラムを Task に分割して並列実行する際に、新たに発生する
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
92 バグとして、本研究では以下の項目に焦点を当てた。
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
93
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
94 \begin{itemize}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
95 \item Task 間のデータの同期
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
96 \item Task の実行順序
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
97 \item Task の定義
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
98 \end{itemize}
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
99
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
100 このうち、Task の定義については、定義される内容が非常に小さい為、Task の
9
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
101 inData や outData を調べるといった従来のテスト手法でも十分にテストが可能で
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
102 ある。その他の 2 つについては、いずれも衝突判定の際に生じるバグである。
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
103 (図\ref{fig:test_log})
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
104
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
105 \newpage
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
106
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
107 \begin{figure}[h]
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
108 \begin{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
109 \includegraphics[scale=0.8]{images/test_log.pdf}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
110 \end{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
111 \caption{Task Dandy で起こりうるバグ}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
112 \label{fig:test_log}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
113 \end{figure}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
114
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
115 そこで、オブジェクトが被弾した時、そしてオブジェクトが生成された時にテスト
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
116 ログを取ることで効率的にバグを発見することができると考えた。以下に実際に
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
117 収集したテストログの例を示す。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
118
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
119 \begin{verbatim}
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
120 F64: CREATE [NAME]enemy_greenclab_0 [COORD]x= 120.000000 y= -128.000000
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
121 vx= 0.000000 vy= 4.000000
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
122 F85: DELETE [NAME]enemy_greenclab_0 [COORD]x= 120.000000 y= -44.000000
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
123 vx= 0.000000 vy= 4.000000
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
124 [BULLET]tlv1 = 2, tlv2 = 0 llv1 = 0
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
125 \end{verbatim}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
126
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
127 それぞれのパラメータの詳細は次のとおりである。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
128
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
129 \newpage
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
130
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
131 \begin{itemize}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
132 \item F64,F85\\
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
133 生成、もしくは被弾した時の経過フレーム。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
134 \item CREATE,DELETE\\
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
135 CREATE ならオブジェクトが生成された、DELETE ならオブジェクトが被弾した事を
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
136 表す。
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
137 \item NAME\\
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
138 オブジェクトの種類と ID。ID はオブジェクトの種類毎に 0 から順番に付けられ
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
139 るのでどのオブジェクトの情報なのかを特定できる。
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
140 \item COORD\\
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
141 オブジェクトのxy座標とxy方向の速度。
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
142 \item BULLET
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
143 その瞬間に画面内に存在した弾の数。差異があれば同期が取れていないことを
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
144 示す。
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
145 \end{itemize}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
146
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
147 これにより、フレーム単位でどのオブジェクトが生成、または被弾したのか知ること
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
148 ができる。trace モードでプレイヤーの入力を固定し、各バージョンでテストログを
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
149 取り、その差異を調べることでバグが発生している時間や場所を特定することが
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
150 できる。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
151
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
152 \section{描画処理を行わないビデオモード}\label{sec:video_none}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
153 Cerium では Rendering Engine において 3 つの Task を用いて画面の描画処理を
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
154 行っている(\ref{sec:rendering}節)。Cerium では複数の環境で動作するように
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
155 オブジェクトを画面のフレームバッファに直接書き出すモードや、SDL のバッファに
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
156 書き出すモードなど、複数のビデオモードが存在する。
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
157 (図\ref{fig:video_mode})
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
158
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
159 しかし、プレイヤーの入力をバイナリデータから読み出す場合、処理の詳細が
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
160 知りたい場合を除いて画面の描画処理は不要となる。
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
161 そこでテスト用に画面の描画処理を行わないモードを Cerium に実装した。
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
162 これは、Cerium 内で画面のバッファを確保する処理をしている箇所と、描画用の
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
163 Task を生成する処理をしている箇所をスルーすることで描画処理と無駄なメモリ
9
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
164 確保を行わずにテストを行うことができるビデオモードである。
028ed9741872 finish chapter 8.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
165 (図\ref{fig:video_none})
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
166
5
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
167 \begin{figure}[h]
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
168 \begin{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
169 \includegraphics[scale=0.6]{images/video.pdf}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
170 \end{center}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
171 \caption{通常のビデオモード}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
172 \label{fig:video_mode}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
173 \end{figure}
f515d7e7e4df finish chapter 6.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
174
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
175 \begin{figure}[h]
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
176 \begin{center}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
177 \includegraphics[scale=0.8]{images/video_none.pdf}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
178 \end{center}
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
179 \caption{描画処理を行わないビデオモード}
7
2dcc784d62e0 add new image;
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
180 \label{fig:video_none}
4
2dbd515e0284 finish chapter 5.
koba <koba@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
181 \end{figure}