# HG changeset patch # User Matti Hamalainen # Date 1525916648 -10800 # Node ID 60337b31e42787bb74db71c964d77e1dad588d47 # Parent 5be4e2eec84fe25451177e9cd3b766354070d663 Cosmetics. diff -r 5be4e2eec84f -r 60337b31e427 tests/efu.c --- a/tests/efu.c Thu May 10 04:39:34 2018 +0300 +++ b/tests/efu.c Thu May 10 04:44:08 2018 +0300 @@ -47,7 +47,7 @@ case 2: dmVerbosity++; break; - + case 3: optVFlags |= SDL_FULLSCREEN; break; @@ -70,7 +70,7 @@ optScrWidth = w; optScrHeight = h; } - else + else { dmErrorMsg("Invalid size argument '%s'.\n", optArg); return FALSE; @@ -86,7 +86,7 @@ dmErrorMsg("Unknown option '%s'.\n", currArg); return FALSE; } - + return TRUE; } @@ -141,7 +141,7 @@ { Uint8 *pix = screen->pixels; int xc, yc; - + for (yc = 0; yc < screen->h; yc++) { Uint8 *dp = pix; @@ -179,101 +179,102 @@ light->z = 150; for (j = 0; j < QHEIGHT; j++) - for (i = 0; i < QWIDTH; i++) - { - DMVector vr, vl, va; - DMFloat vrayLen, vfactor; - int vlen; - BOOL wasHit; + for (i = 0; i < QWIDTH; i++) + { + DMVector vr, vl, va; + DMFloat vrayLen, vfactor; + int vlen; + BOOL wasHit; + + // Perform shadow occlusion via simplistic raytracing + vr.x = i; + vr.y = j; + vr.z = 200; //light->z; // - 10.0; + + // Calculate light vector vector + dm_vector_sub_r(&vl, &vr, light); + vrayLen = dm_vector_length(&vl); - // Perform shadow occlusion via simplistic raytracing - vr.x = i; - vr.y = j; - vr.z = 200; //light->z; // - 10.0; - - // Calculate light vector vector - dm_vector_sub_r(&vl, &vr, light); - vrayLen = dm_vector_length(&vl); - #if 1 - dm_vector_copy(&va, &vl); - dm_vector_normalize(&va); - dm_vector_copy(&vr, light); + dm_vector_copy(&va, &vl); + dm_vector_normalize(&va); + dm_vector_copy(&vr, light); + + vlen = 0; + wasHit = FALSE; + do + { + float h; - vlen = 0; - wasHit = FALSE; - do + // If ray is inside the heightmap, get value + if (vr.x >= 0 && vr.y >= 0 && vr.x < QWIDTH && vr.y < QHEIGHT) + h = pheightMap[(int) vr.y][(int) vr.x]; + else + break; + + // Check for hits + if (h > vr.z) + wasHit = TRUE; + else { - float h; - - // If ray is inside the heightmap, get value - if (vr.x >= 0 && vr.y >= 0 && vr.x < QWIDTH && vr.y < QHEIGHT) - h = pheightMap[(int) vr.y][(int) vr.x]; - else - break; - - // Check for hits - if (h > vr.z) - wasHit = TRUE; - else - { - // Move forwards - dm_vector_add(&vr, &va); - vlen++; - } + // Move forwards + dm_vector_add(&vr, &va); + vlen++; } - while (!wasHit && vlen <= vrayLen); + } + while (!wasHit && vlen <= vrayLen); - // Check if the ray hit something, e.g. is this point occluded? - if (wasHit && vlen < vrayLen) - { - vfactor = vlen * 0.05; - } - else - vfactor = vlen * 0.001; + // Check if the ray hit something, e.g. is this point occluded? + if (wasHit && vlen < vrayLen) + { + vfactor = vlen * 0.05; + } + else + vfactor = vlen * 0.001; #endif #if 0 - { - /* Calculate light's intensity based on the angle it "hits" - * - * 1) Calculate the vectors that form the imaginary "plane" - * 2) Cross-product -> normal vector of the plane - * 2) Normalize the normal vector - * 3) Calculate light vector's hit angle by dot product - */ - DMVector v1, v2; - DMFloat c; + { + /* Calculate light's intensity based on the angle it "hits" + * + * 1) Calculate the vectors that form the imaginary "plane" + * 2) Cross-product -> normal vector of the plane + * 2) Normalize the normal vector + * 3) Calculate light vector's hit angle by dot product + */ + DMVector v1, v2; + DMFloat c; - v1.x = 2.0f; - v1.y = 0.0f; - v1.z = (DMFloat) (pheightMap[j][i] - pheightMap[j][i + 1]); + v1.x = 2.0f; + v1.y = 0.0f; + v1.z = (DMFloat) (pheightMap[j][i] - pheightMap[j][i + 1]); - v2.x = 0.0f; - v2.y = 2.0f; - v2.z = (DMFloat) (pheightMap[j][i] - pheightMap[j + 1][i]); + v2.x = 0.0f; + v2.y = 2.0f; + v2.z = (DMFloat) (pheightMap[j][i] - pheightMap[j + 1][i]); - dm_vector_cross(&vr, &v1, &v2); - dm_vector_normalize(&vr); - dm_vector_normalize(&vl); - c = dm_vector_dot(&vl, &vr); + dm_vector_cross(&vr, &v1, &v2); + dm_vector_normalize(&vr); + dm_vector_normalize(&vl); + c = dm_vector_dot(&vl, &vr); - vrayLen = 255 - (vrayLen * 0.1) * vrayLen + (c * 128.0f) + (vfactor * vfactor * 1255); - } + vrayLen = 255 - (vrayLen * 0.1) * vrayLen + (c * 128.0f) + (vfactor * vfactor * 1255); + } #else - vrayLen = 255 - vrayLen * vrayLen * (vfactor * vfactor); - if (vrayLen < 0) vrayLen = 0; - vrayLen -= pheightMap[j][i]; + vrayLen = 255 - vrayLen * vrayLen * (vfactor * vfactor); + if (vrayLen < 0) vrayLen = 0; + vrayLen -= pheightMap[j][i]; + #endif - // Clip result - if (vrayLen < 0) - vrayLen = 0; - else if (vrayLen > 255.0f) - vrayLen = 255.0f; + // Clip result + if (vrayLen < 0) + vrayLen = 0; + else if (vrayLen > 255.0f) + vrayLen = 255.0f; - lightMap[j][i] = vrayLen; - } + lightMap[j][i] = vrayLen; + } } #define Q_KERNEL(x, y, dist, coeff) ( \ @@ -316,7 +317,7 @@ int mouseX, mouseY, res; BOOL initSDL = FALSE, initTTF = FALSE, exitFlag, showMap = FALSE; DMResource *file; - + if (!dmArgsProcess(argc, argv, optList, optListN, argHandleOpt, NULL, OPTH_BAILOUT)) exit(1); @@ -368,7 +369,7 @@ dmErrorMsg("Could not create screen surface.\n"); goto error_exit; } - + dmMsg(0, "Benchmark mode, not opening window.\n"); } else @@ -384,7 +385,7 @@ bmap = SDL_CreateRGBSurface(SDL_SWSURFACE, QWIDTH, QHEIGHT, 8, 0, 0, 0, 0); DM_MakePalette(bmap); DM_Random(bmap, 15); - + DMVector light; DMBlockMap heightMap; light.x = light.y = 128; @@ -410,7 +411,7 @@ switch (event.key.keysym.sym) { case SDLK_ESCAPE: exitFlag = TRUE; break; - + case SDLK_F1: DM_Random(bmap, (SDL_GetTicks() / 10) % 1000); break; @@ -418,13 +419,13 @@ case SDLK_F5: showMap = !showMap; break; - + default: break; } break; - + case SDL_VIDEORESIZE: optScrWidth = event.resize.w; optScrHeight = event.resize.h; @@ -433,7 +434,7 @@ goto error_exit; break; - + case SDL_VIDEOEXPOSE: break; @@ -457,14 +458,13 @@ memcpy(bmap->pixels, heightMap, QWIDTH * QHEIGHT); else dmShadowTraceHeightMap(bmap->pixels, logo->pixels, &light); - dmScaledBlitSurfaceAny(bmap, 0, 0, screen->w, screen->h, screen, DMD_NONE); if (!optBenchmark) { - dmDrawTTFText(screen, font, fontcol, 0, 0, "%3.1f FPS", + dmDrawTTFText(screen, font, fontcol, 0, 0, "%3.1f FPS", (float) (numFrames * 1000.0f) / (float) (endTime - startTime)); if (SDL_MUSTLOCK(screen) != 0)