строка>. i), синтаксис которого приведен ниже:

#define START(L.TXT.TD static LogTime T##T1(&##L.TXT);(T##T1).StartC):

Этот макрос объявляет переменную Ti класса LogTime и заполняет текущим временем ее поле S.

Объявление #define FINISH(Tl) (Т##Т1) .Finish() позволяет при помощи макроса FI NISH(i) занести текущее время в поле F той же переменной Ti.

Конструктором класса LogTime переменные Ti связываются в список. Удобство такого решения заключается в том, что переменные, в которых будут фиксироваться моменты времени, связываются в список конструктором еще до выполнения первого оператора программы. В точках записи макросов производится только фиксация времени, длящаяся доли микросекунды. При помощи метода LogFi leCchar *Fi 1 eName) класса LogHead содержимое списка выводится в файл FileName.

В листинге 22.8 показано, как в функцию рисования добавляется контроль отдельных операций.

Листинг 22.8

static LogHead L(3); //Заголовок списка контрольных точек. Время будет //записываться в переменные Ti при первых трех вызовах функции RenderOO void RenderKHWND hWnd) {

RECT R;
GetClientRect(hWnd.&R);

STARTCL."Накладные затраты".0) //Оценка затрат времени на запись

FINISH(O) //данных в контрольные точки.

STARTCL." Очистка".1) //Время начала очистки буфера продолжение xP"

Инициализация библиотек и вывод примитивов

Листинг 22.8 {продолжение)

glShadeModel (GLJLAT); glClearColorCl.Of.l.Of.l.Of.O.Of): glClear( GL_COLOR_BUFFER_BIT. // glFinishO:

FINISH(l) //Время завершения очистки буфера glViewport(O.O.R.right.R.bottom): // glFinishO;

START(L."Первый вывод примитивов".2) glBegin(GL_TRIANGLES); float i-0:

glColor3d ( 0.0. 1.0. 0.0): g1Vertex4d(-1.0. -1.0. -0.8. 1.0); glVertex4d( -1.0. 1.0. 1.0. 1.0); glVertex4d(1.0. 1.0. -0.8. 1.0):

//for( :i<l.Of: i-i+0.01f) //Вывод на экран 100 треугольников {

glColor3d (0.0. 1.0. 0.0); glVertex3d(0.25.i. 0.0): glColor3d (1.0. 0.0. 0.0); glVertex3d(0.8. 0.2. 0.0); glColor3d (0.0. 0.0. 1.0); glVertex3d(0.5. -i .0.0) : }

⇐ Предыдущая| |Следующая ⇒