| 295 | // does some out of date view frustrum optimisation that doesn't contribute much anymore |
| 296 | |
| 297 | void render_world(float vx, float vy, float vh, float changelod, int yaw, int pitch, float fov, float fovy, int w, int h) |
| 298 | { |
| 299 | loopi(LARGEST_FACTOR) stats[i] = 0; |
| 300 | min_lod = minimap || (player1->isspectating() && player1->spectatemode == SM_OVERVIEW) ? MAX_LOD : MIN_LOD+iabs(pitch)/12; |
| 301 | yaw = 360-yaw; |
| 302 | float widef = fov/75.0f; |
| 303 | int cdist = iabs(yaw%90-45); |
| 304 | if(cdist<7) // hack to avoid popup at high fovs at 45 yaw |
| 305 | { |
| 306 | min_lod = max(min_lod, (int)(MIN_LOD+(10-cdist)/1.0f*widef)); // less if lod worked better |
| 307 | widef = 1.0f; |
| 308 | } |
| 309 | lod = (int)(lod*changelod); |
| 310 | if(lod<minlod) lod = minlod; |
| 311 | if(lod>MAX_LOD) lod = MAX_LOD; |
| 312 | lodtop = lodbot = lodleft = lodright = min_lod; |
| 313 | if(yaw>45 && yaw<=135) |
| 314 | { |
| 315 | lodleft = lod; |
| 316 | distlod(lodtop, lodbot, yaw-45, widef); |
| 317 | } |
| 318 | else if(yaw>135 && yaw<=225) |
| 319 | { |
| 320 | lodbot = lod; |
| 321 | distlod(lodleft, lodright, yaw-135, widef); |
| 322 | } |
| 323 | else if(yaw>225 && yaw<=315) |
| 324 | { |
| 325 | lodright = lod; |
| 326 | distlod(lodbot, lodtop, yaw-225, widef); |
| 327 | } |
| 328 | else |
| 329 | { |
| 330 | lodtop = lod; |
| 331 | distlod(lodright, lodleft, yaw<=45 ? yaw+45 : yaw-315, widef); |
| 332 | } |
| 333 | render_floor = pitch<0.5f*fovy; |
| 334 | render_ceil = -pitch<0.5f*fovy; |
| 335 | |
| 336 | render_seg_new(vx, vy, vh, MAX_MIP, 0, 0, ssize>>MAX_MIP, ssize>>MAX_MIP); |
| 337 | mipstats(stats); |
| 338 | } |
| 339 |
no test coverage detected