00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "test_frag.h"
00010
00011
00012
00013 TestFrag::TestFrag(int _duration, int _type, TScene *s) : Test(_duration, _type, s)
00014 {
00015
00016 if(type == FRAG_LIGHTS)
00017 {
00018 testname = "frag_lights";
00019 weight = 0.30f;
00020 splits = 3;
00021 s->SetLoadList(17);
00022
00023 try
00024 {
00025
00026 lpos1.Set(0.0,10.0,0.0); lpos2.Set(0.0,10.0,0.0); lpos3.Set(0.0,10.0,0.0); lpos4.Set(0.0,10.0,0.0);
00027 lpos5.Set(0.0,10.0,0.0); lpos6.Set(0.0,10.0,0.0); lpos7.Set(0.0,10.0,0.0); lpos8.Set(0.0,10.0,0.0);
00028
00029
00030 s->MoveCamera(0.0,-11.5,-49.0);
00031 s->RotateCamera(30.0,A_Y);
00032
00033
00034 s->AddObject("room_bottom",PLANE,50.0,100.0); s->AddObject("room_top",PLANE,50.0,100.0);
00035 s->AddObject("room_left",PLANE,100.0,30.0); s->AddObject("room_right",PLANE,100.0,30.0);
00036 s->AddObject("room_front",PLANE,50.0,30.0); s->AddObject("room_back",PLANE,50.0,30.0);
00037 s->AddObject("cube1",CUBE,3.0);
00038 s->AddObject("cube2",CUBE,6.0);
00039 s->AddObject("sphere","data/obj/teapot.3ds");
00040 s->ResizeObj("sphere",0.7f,0.7f,0.7f);
00041 s->MoveObj("sphere",0.0,-1.5,0.0);
00042
00043
00044 s->MoveObj("room_top",0.0,30.0,0.0); s->MoveObj("room_left",-25.0,15.0,0.0);
00045 s->MoveObj("room_right",25.0,15.0,0.0); s->MoveObj("room_front",0.0,15.0,50.0);
00046 s->MoveObj("room_back",0.0,15.0,-50.0);
00047
00048 s->MoveObj("sphere",0.0,9.0,0.0); s->MoveObj("cube1",0.0,2.5,0.0); s->MoveObj("cube2",0.0,-3.5,0.0);
00049
00050 s->RotateObj("room_top", 180.0,A_Z);
00051 s->RotateObj("room_left", 90.0,A_X);
00052 s->RotateObj("room_left", -90.0,A_Z);
00053 s->RotateObj("room_right", 90.0,A_X);
00054 s->RotateObj("room_right", 90.0,A_Z);
00055 s->RotateObj("room_front",-90.0,A_X);
00056 s->RotateObj("room_back", 90.0,A_X);
00057
00058
00059 s->AddLight(0,black,white,white,lpos1,40.0);
00060
00061
00062 s->AddMaterial("mat_floor",black,white,white);
00063 s->AddMaterial("mat_wall",black,white,white);
00064 s->AddMaterial("mat_sphere",black,white,white,64.0);
00065
00066 s->AddTexture("mat_floor","data/tex/wall.tga",BASE,MODULATE,1.0,2.0,2.0,true,true);
00067 s->AddTexture("mat_floor","data/tex/normal/wall.tga",BUMP,MODULATE,1.0,2.0,2.0);
00068 s->AddTexture("mat_wall","data/tex/brick.tga",BASE,MODULATE,1.0,3.0,3.0,true,true);
00069 s->AddTexture("mat_wall","data/tex/normal/brick.tga",BUMP,MODULATE,1.0,3.0,3.0);
00070 s->AddTexture("mat_sphere", "data/tex/normal/bump.tga",BUMP,MODULATE,0.2f, 1.0f,1.0f);
00071
00072
00073 s->SetMaterial("room_left","mat_wall"); s->SetMaterial("room_right","mat_wall");
00074 s->SetMaterial("room_front","mat_wall"); s->SetMaterial("room_back","mat_wall");
00075 s->SetMaterial("room_top","mat_floor"); s->SetMaterial("room_bottom","mat_floor");
00076 s->SetMaterial("sphere","mat_sphere");
00077 s->SetMaterial("cube1","mat_floor");
00078 s->SetMaterial("cube2","mat_floor");
00079 }
00080 catch(int err)
00081 {
00082 stopbit = true;
00083 throw ERR;
00084 return;
00085 }
00086 }
00088 else if(type == FRAG_NOISE)
00089 {
00090 testname = "frag_noise";
00091 weight = 0.20f;
00092 octaves = 1.0;
00093 splits = 4;
00094 s->SetLoadList(5);
00095
00096
00097 s->MoveCamera(0.0,0.0,-10.0);
00098 s->RotateCamera(90.0,A_X);
00099 try
00100 {
00101
00102 s->AddObject("sky",PLANE,16.0,10.0);
00103 s->AddObject("sun",PLANE,16.0,10.0);
00104 s->MoveObj("sun",0.0f,0.1f,0.0f);
00105
00106
00107 s->AddMaterial("noise",white,white,white,64.0,0.0,1.0,NONE);
00108 s->AddMaterial("mat_sun",white,white,white,64.0,0.0,1.0,NONE);
00109 s->AddTexture("mat_sun","data/tex/sky_glow.tga");
00110
00111 s->CustomShader("noise","data/shaders/noise.vert",NULL,"data/shaders/noise.frag");
00112
00113 s->SetMaterial("sky","noise"); s->SetMaterial("sun","mat_sun");
00114
00115
00116 s->SetUniform("noise","clamp_top",0.7);
00117 s->SetUniform("noise","clamp_bottom",0.3);
00118 }
00119 catch(int err)
00120 {
00121 stopbit = true;
00122 throw ERR;
00123 return;
00124 }
00125 }
00127 else if(type == FRAG_PROCEDURAL)
00128 {
00129 testname = "frag_procedural";
00130 weight = 0.10f;
00131 splits = 1;
00132 s->SetLoadList(13);
00133
00134 s->MoveCamera(0.0,2.0,-10.0);
00135 s->RotateCamera(15.0,A_X);
00136 s->RotateCamera(-15.0,A_Y);
00137
00138 try
00139 {
00140 s->AddLight(0,black,silver,white,TVector(3.0,3.0,3.0));
00141
00142 s->AddObject("teapot","data/obj/teapot.3ds");
00143 s->ResizeObj("teapot",0.15f,0.15f,0.15f);
00144 s->MoveObj("teapot",0.0,-1.0,0.0);
00145 s->AddObject("cube",CUBE,1.0);
00146 s->AddObject("sphere",SPHERE,1.0,1.0,32,32);
00147 s->AddObject("sky",SPHERE,20.0,20.0,32,32);
00148 s->AddObject("cylinder","data/obj/cylinder.3ds");
00149 s->AddObject("torus",TORUS,0.5,1.25,8,32);
00150 s->AddObject("cone","data/obj/cone.3ds");
00151
00152 s->MoveObj("cube",-4.0,0.0,0.0);
00153 s->MoveObj("sphere",4.0,0.0,0.0);
00154 s->MoveObj("cylinder",0.0,-4.0,0.0);
00155 s->MoveObj("torus",-4.0,-4.0,0.0);
00156 s->MoveObj("cone", 4.0,-4.0,0.0);
00157
00158 s->AddMaterial("mat_wood",silver,white,white,16);
00159 s->CustomShader("mat_wood","data/shaders/procedural/wood.vert",NULL,"data/shaders/procedural/wood.frag");
00160 s->SetMaterial("cube","mat_wood");
00161
00162 s->AddMaterial("mat_marble",black,white,white,128);
00163 s->CustomShader("mat_marble","data/shaders/procedural/marble.vert",NULL,"data/shaders/procedural/marble.frag");
00164 s->SetMaterial("cone","mat_marble");
00165
00166 s->AddMaterial("mat_bump",black,yellow,red,64);
00167 s->CustomShader("mat_bump","data/shaders/procedural/bump.vert",NULL,"data/shaders/procedural/bump.frag");
00168 s->SetMaterial("torus","mat_bump");
00169
00170 s->AddMaterial("mat_lattice",black,white,white,128);
00171 s->CustomShader("mat_lattice","data/shaders/procedural/lattice.vert",NULL,"data/shaders/procedural/lattice.frag");
00172 s->SetMaterial("sphere","mat_lattice");
00173
00174 s->AddMaterial("mat_brick",black,white,white,128);
00175 s->CustomShader("mat_brick","data/shaders/procedural/brick.vert",NULL,"data/shaders/procedural/brick.frag");
00176 s->SetMaterial("cylinder","mat_brick");
00177
00178 s->AddMaterial("mat_phong",black,white,white,64);
00179 s->CustomShader("mat_phong","data/shaders/procedural/phong.vert",NULL,"data/shaders/procedural/phong.frag");
00180 s->SetMaterial("teapot","mat_phong");
00181
00182 s->AddMaterial("mat_sky");
00183 s->CustomShader("mat_sky","data/shaders/procedural/noise.vert",NULL,"data/shaders/procedural/noise.frag");
00184 s->SetMaterial("sky","mat_sky");
00185
00186 s->SetUniform("mat_sky","clamp_top",0.8);
00187 s->SetUniform("mat_sky","clamp_bottom",0.2);
00188 s->SetUniform("mat_sky","octaves",4.0);
00189 }
00190 catch(int err)
00191 {
00192 stopbit = true;
00193 throw ERR;
00194 return;
00195 }
00196 }
00198 else if(type == FRAG_PARALLAX)
00199 {
00200 testname = "frag_parallax";
00201 weight = 0.20f;
00202 splits = 3;
00203 s->SetLoadList(13);
00204
00205 s->MoveCamera(0.0,0.0,-10.0);
00206
00207 try
00208 {
00209 s->AddObject("obj",PLANE,17.0,9.0);
00210 s->RotateObj("obj",90.0,A_X);
00211
00212 lpos1.Set(0.0,0.0,12.0);
00213 s->AddLight(0,black,white,white,lpos1);
00214
00215 s->AddMaterial("mat_basic");
00216 s->AddMaterial("mat_bump");
00217 s->AddMaterial("mat_parallax");
00218
00219 s->AddTexture("mat_basic","data/tex/wall.tga",BASE,MODULATE,1.0,1.0,1.0);
00220 s->AddTexture("mat_bump","data/tex/wall.tga",BASE,MODULATE,1.0,1.0,1.0);
00221 s->AddTexture("mat_bump","data/tex/normal/wall.tga",BUMP,MODULATE,1.0,1.0,1.0);
00222 s->AddTexture("mat_bump","data/tex/normal/tree.tga",BUMP,MODULATE,1.0,1.0,1.0);
00223 s->AddTexture("mat_parallax","data/tex/wall.tga",BASE,MODULATE,1.0,1.0,1.0);
00224 s->AddTexture("mat_parallax","data/tex/normal/wall.tga",BUMP,MODULATE,1.0,1.0,1.0);
00225 s->AddTexture("mat_parallax","data/tex/normal/tree.tga",BUMP,MODULATE,1.0,1.0,1.0);
00226 s->AddTexture("mat_parallax","data/tex/depth/wall.tga",PARALLAX,MODULATE,0.0015f,1.0f,1.0f);
00227 s->AddTexture("mat_parallax","data/tex/depth/tree.tga",PARALLAX,MODULATE,0.0015f,1.0f,1.0f);
00228
00229 s->SetMaterial("obj","mat_basic");
00230 }
00231 catch(int err)
00232 {
00233 stopbit = true;
00234 throw ERR;
00235 return;
00236 }
00237 }
00239 else if(type == FRAG_REFRACT)
00240 {
00241 testname = "frag_refract";
00242 weight = 0.20f;
00243 splits = 4;
00244 s->SetLoadList(13);
00245
00246
00247 s->MoveCamera(0.0,0.0,-12.0);
00248 s->RotateCamera(30.0,A_Y);
00249 try
00250 {
00251 s->AddObject("obj1",SPHERE,3.0,4.0,48,48);
00252 s->AddObject("obj2",TORUS,1.0,4.0,32,48);
00253 s->AddObject("obj3",TORUS,1.0,4.0,32,48);
00254 s->RotateObj("obj3",90.0f,A_Y);
00255 s->AddObject("sky",SPHERE,200.0,0.0,32,32);
00256
00257
00258 s->AddMaterial("mat_ref");
00259 s->AddMaterial("mat_ref_built");
00260 s->AddMaterial("mat_ref_chroma");
00261 s->AddMaterial("mat_ref_chroma_built");
00262 s->AddMaterial("mat_sky",black,white,white,32.0,0.0,0.0,NONE);
00263
00264
00265 const char *cubefiles[] = {"data/tex/cubemaps/posx.tga","data/tex/cubemaps/negx.tga",
00266 "data/tex/cubemaps/posy.tga","data/tex/cubemaps/negy.tga",
00267 "data/tex/cubemaps/posz.tga","data/tex/cubemaps/negz.tga" };
00268
00269 s->AddTexture("mat_sky",cubefiles,CUBEMAP,MODULATE,1.0,2.0,2.0);
00270 s->AddTexture("mat_ref",cubefiles,CUBEMAP,MODULATE,1.0,2.0,2.0);
00271 s->AddTexture("mat_ref_built",cubefiles,CUBEMAP,MODULATE,1.0,2.0,2.0);
00272 s->AddTexture("mat_ref_chroma",cubefiles,CUBEMAP,MODULATE,1.0,2.0,2.0);
00273 s->AddTexture("mat_ref_chroma_built",cubefiles,CUBEMAP,MODULATE,1.0,2.0,2.0);
00274
00275 s->SetMaterial("sky","mat_sky");
00276 s->SetMaterial("obj1","mat_ref");
00277 s->SetMaterial("obj2","mat_ref");
00278 s->SetMaterial("obj3","mat_ref");
00279
00280
00281 s->CustomShader("mat_ref","data/shaders/refract.vert",NULL,"data/shaders/refract.frag",NULL,NULL);
00282 s->CustomShader("mat_ref_built","data/shaders/refract.vert",NULL,"data/shaders/refract.frag",NULL,"#define USE_BUILTIN\n");
00283 s->CustomShader("mat_ref_chroma","data/shaders/refract.vert",NULL,"data/shaders/refract.frag",NULL,"#define CHROMA\n");
00284 s->CustomShader("mat_ref_chroma_built","data/shaders/refract.vert",NULL,"data/shaders/refract.frag",NULL,"#define USE_BUILTIN\n#define CHROMA\n");
00285 }
00286 catch(int err)
00287 {
00288 stopbit = true;
00289 throw ERR;
00290 return;
00291 }
00292 }
00293
00294
00295 if(!s->PostInit())
00296 {
00297 stopbit = true;
00298 throw ERR;
00299 }
00300 InitTime();
00301 }
00302
00303
00304
00305 TestFrag::~TestFrag()
00306 {
00307 s->Destroy();
00308 }
00309
00310
00311
00312 void TestFrag::Run()
00313 {
00314 Test::Run();
00315 if(!draw_scene) return;
00316
00318
00319 if(type == FRAG_LIGHTS)
00320 {
00321 if(splitbit)
00322 {
00323 splitbit = false;
00324
00325
00326 switch(curr_setup)
00327 {
00328
00329 case 1:
00330 msg = "1 light";
00331 break;
00332
00333 case 2:
00334 msg = "4 lights";
00335 s->AddLight(1,black,red,red,lpos2);
00336 s->AddLight(2,black,green,green,lpos3);
00337 s->AddLight(3,black,blue,blue,lpos4);
00338 break;
00339
00340 case 3:
00341 msg = "8 lights";
00342 s->AddLight(4,black,yellow,yellow,lpos5);
00343 s->AddLight(5,black,magenta,magenta,lpos6);
00344 s->AddLight(6,black,cyan,cyan,lpos7);
00345 s->AddLight(7,black,silver,silver,lpos8);
00346 break;
00347 default: break;
00348 }
00349 s->UpdateLightCount();
00350 }
00351
00352
00353 s->MoveLight(0,lpos1);
00354
00355 if(curr_setup > 1)
00356 {
00357 s->MoveLight(1,lpos2);
00358 s->MoveLight(2,lpos3);
00359 s->MoveLight(3,lpos4);
00360 }
00361 if(curr_setup > 2)
00362 {
00363 s->MoveLight(4,lpos5);
00364 s->MoveLight(5,lpos6);
00365 s->MoveLight(6,lpos7);
00366 s->MoveLight(7,lpos8);
00367 }
00368
00369 s->RotateCameraAbs(30.0f - anim/3.0f, A_Y);
00370 s->Redraw();
00371
00372
00373 s->DrawScreenText(msg.c_str(),50,95,1.2f);
00374 }
00376 else if(type == FRAG_NOISE)
00377 {
00378 if(splitbit)
00379 {
00380 splitbit = false;
00381
00382 octaves *= 2.0;
00383 s->SetUniform("noise","octaves",octaves);
00384
00385 switch(curr_setup)
00386 {
00387 case 1: msg = "2 octaves"; break;
00388 case 2: msg = "4 octaves"; break;
00389 case 3: msg = "8 octaves"; break;
00390 case 4: msg = "16 octaves"; break;
00391 default: break;
00392 }
00393 }
00394
00395 s->SetUniform("noise","anim",anim/5.0);
00396
00397 s->Redraw();
00398 s->DrawScreenText(msg.c_str(),50,95,1.2f);
00399 }
00401 else if(type == FRAG_PROCEDURAL)
00402 {
00403 s->Redraw();
00404
00405
00406 s->SetUniform("mat_bump","anim",anim/5.0);
00407 s->SetUniform("mat_sky","anim",anim/10.0);
00408 s->RotateCameraAbs(-anim/2.0f,A_Y);
00409 }
00411 else if(type == FRAG_PARALLAX)
00412 {
00413 if(splitbit)
00414 {
00415 splitbit = false;
00416
00417 switch(curr_setup)
00418 {
00419 case 1:
00420 msg = "Regular per-pixel lighting";
00421 s->SetMaterial("obj","mat_basic");
00422 break;
00423 case 2:
00424 msg = "Bump mapping";
00425 s->SetMaterial("obj","mat_bump");
00426 break;
00427 case 3:
00428 msg = "Parallax mapping";
00429 s->SetMaterial("obj","mat_parallax");
00430 break;
00431 default: break;
00432 }
00433 }
00434
00435
00436 s->MoveLight(0,lpos1);
00437
00438 s->Redraw();
00439 s->DrawScreenText(msg.c_str(),50,95,1.2f);
00440 }
00442 else if(type == FRAG_REFRACT)
00443 {
00444 if(splitbit)
00445 {
00446 splitbit = false;
00447
00448 switch(curr_setup)
00449 {
00450 case 1:
00451 msg = "Custom refract function";
00452 s->SetMaterial("obj1","mat_ref"); s->SetMaterial("obj2","mat_ref"); s->SetMaterial("obj3","mat_ref");
00453 break;
00454 case 2:
00455 msg = "Built-in refract function";
00456 s->SetMaterial("obj1","mat_ref_built"); s->SetMaterial("obj2","mat_ref_built"); s->SetMaterial("obj3","mat_ref_built");
00457 break;
00458 case 3:
00459 msg = "Custom refract function with chromatic diffusion";
00460 s->SetMaterial("obj1","mat_ref_chroma"); s->SetMaterial("obj2","mat_ref_chroma"); s->SetMaterial("obj3","mat_ref_chroma");
00461 break;
00462 case 4:
00463 msg = "Built-in refract function with chromatic diffusion";
00464 s->SetMaterial("obj1","mat_ref_chroma_built"); s->SetMaterial("obj2","mat_ref_chroma_built"); s->SetMaterial("obj3","mat_ref_chroma_built");
00465 break;
00466 default: break;
00467 }
00468 }
00469
00470 s->RotateCameraAbs(anim*10.0f, A_Y);
00471 s->Redraw();
00472 s->DrawScreenText(msg.c_str(),50,95,1.2f);
00473 }
00474 }
00475
00476
00477
00478 void TestFrag::Animate()
00479 {
00480 Test::Animate();
00481 switch(type)
00482 {
00483 case FRAG_LIGHTS:
00484
00485
00486 lpos1.x = 10.0f*cos(anim);
00487 lpos1.z = 45.0f*sin(anim);
00488
00489
00490 if(curr_setup > 1)
00491 {
00492 lpos2.y = 10.0f*cos(1.5f*anim) + 10.0f;
00493 lpos2.z = 45.0f*sin(1.5f*anim);
00494
00495
00496 lpos3.x = 10.0f*sin(anim) - 10.0f;
00497 lpos3.y = 10.0f*cos(0.5f*anim) + 10.0f;
00498 lpos3.z = 45.0f*cos(0.5f*anim);
00499
00500
00501 lpos4.x = 10.0f*sin(0.4f*anim) + 10.0f;
00502 lpos4.y = 10.0f*sin(0.7f*anim) + 10.0f;
00503 lpos4.z = 45.0f*sin(0.7f*anim);
00504
00505 }
00506 if(curr_setup > 2)
00507 {
00508 lpos5.x = 20.0f*cos(1.3f*anim);
00509 lpos5.z = 20.0f*sin(1.3f*anim);
00510
00511
00512 lpos6.y = 10.0f*cos(1.8f*anim) + 10.0f;
00513 lpos6.z = 10.0f*sin(1.8f*anim);
00514
00515
00516 lpos7.x = 10.0f*sin(1.6f*anim) - 10.0f;
00517 lpos7.y = 10.0f*cos(1.6f*anim) + 10.0f;
00518 lpos7.z = 10.0f*cos(1.6f*anim);
00519
00520
00521 lpos8.x = 10.0f*sin(0.9f*anim) + 10.0f;
00522 lpos8.y = 10.0f*sin(0.8f*anim) + 10.0f;
00523 lpos8.z = 10.0f*sin(0.8f*anim);
00524
00525 }
00526 case FRAG_PROCEDURAL:
00527
00528 break;
00529 case FRAG_PARALLAX:
00530
00531 lpos1.x = 10.0f*cos(anim);
00532 lpos1.y = 10.0f*sin(anim);
00533
00534 break;
00535 case FRAG_REFRACT:
00536
00537 break;
00538 default:
00539 break;
00540 }
00541 }
00542
00543
00544
00545 void TestFrag::SaveResults()
00546 {
00547 Test::SaveResults();
00548
00549
00550 if(type == FRAG_LIGHTS)
00551 {
00552
00553 switch(curr_setup)
00554 {
00555 case 1:
00556 results<<"<fragment>\n"
00557 "<"<<testname<<">\n"
00558 "<light1>\n<fps>"<<avg_fps<<"</fps>\n</light1>\n";
00559 test_score += avg_fps/7.5f;
00560 break;
00561 case 2:
00562 results<<"<light4>\n<fps>"<<avg_fps<<"</fps>\n</light4>\n";
00563 test_score += avg_fps/4;
00564 break;
00565 case 3:
00566 test_score += avg_fps/2;
00567 results<<"<light8>\n<fps>"<<avg_fps<<"</fps>\n</light8>\n"
00568 "<score>"<<test_score<<"</score>"
00569 "</"<<testname<<">\n";
00570 break;
00571 default: break;
00572 }
00573 }
00574 else if(type == FRAG_NOISE)
00575 {
00576
00577 switch(curr_setup)
00578 {
00579 case 1:
00580 results<<"<"<<testname<<">\n"<<
00581 "<oct2>\n<fps>"<<avg_fps<<"</fps>\n</oct2>\n";
00582 test_score += avg_fps/8;
00583 break;
00584 case 2:
00585 results<<"<oct4>\n<fps>"<<avg_fps<<"</fps>\n</oct4>\n";
00586 test_score += avg_fps/9;
00587 break;
00588 case 3:
00589 results<<"<oct8>\n<fps>"<<avg_fps<<"</fps>\n</oct8>\n";
00590 test_score += avg_fps/3;
00591 break;
00592 case 4:
00593 test_score += avg_fps/2;
00594 results<<"<oct16>\n<fps>"<<avg_fps<<"</fps>\n</oct16>\n"
00595 "<score>"<<test_score<<"</score>"
00596 "</"<<testname<<">\n";
00597 break;
00598 default: break;
00599 }
00600 }
00601 else if(type == FRAG_PARALLAX)
00602 {
00603
00604 switch(curr_setup)
00605 {
00606 case 1:
00607 results<<"<"<<testname<<">\n"<<
00608 "<perpixel>\n<fps>"<<avg_fps<<"</fps>\n</perpixel>\n";
00609 test_score += avg_fps/50;
00610 break;
00611 case 2:
00612 results<<"<bump>\n<fps>"<<avg_fps<<"</fps>\n</bump>\n";
00613 test_score += avg_fps/20;
00614 break;
00615 case 3:
00616 test_score += avg_fps/6;
00617 results<<"<parallax>\n<fps>"<<avg_fps<<"</fps>\n</parallax>\n"
00618 "<score>"<<test_score<<"</score>"
00619 "</"<<testname<<">\n";
00620 break;
00621 default: break;
00622 }
00623 }
00624 else if(type == FRAG_REFRACT)
00625 {
00626
00627 switch(curr_setup)
00628 {
00629 case 1:
00630 results<<"<"<<testname<<">\n"<<
00631 "<ref_custom>\n<fps>"<<avg_fps<<"</fps>\n</ref_custom>\n";
00632 test_score += avg_fps/16;
00633 break;
00634 case 2:
00635 results<<"<ref_builtin>\n<fps>"<<avg_fps<<"</fps>\n</ref_builtin>\n";
00636 test_score += avg_fps/16;
00637 break;
00638 case 3:
00639 results<<"<ref_custom_chroma>\n<fps>"<<avg_fps<<"</fps>\n</ref_custom_chroma>\n";
00640 test_score += avg_fps/12;
00641 break;
00642 case 4:
00643 test_score += avg_fps/12;
00644 results<<"<ref_builtin_chroma>\n<fps>"<<avg_fps<<"</fps>\n</ref_builtin_chroma>\n"
00645 "<score>"<<test_score<<"</score>"
00646 "</"<<testname<<">\n"
00647 "</fragment>\n";
00648 break;
00649 default: break;
00650 }
00651 }
00652
00653 else
00654 {
00655 test_score = avg_fps/2;
00656 results<<"<"<<testname<<">\n"
00657 "<fps>"<<avg_fps<<"</fps>\n"
00658 "<score>"<<test_score<<"</score>"
00659 "</"<<testname<<">\n";
00660 }
00661 }