Differences From Artifact [9b0441a720]:
- File
src/rendermd2.mm
— part of check-in
[489124a92f]
at
2025-03-16 10:11:39
on branch trunk
— Use one autorelease pool per frame
This way, nowhere else autorelease pools need to be managed. (user: js, size: 3155) [annotate] [blame] [check-ins using]
To Artifact [72886c2cec]:
- File src/rendermd2.mm — part of check-in [89fbd7a152] at 2025-03-20 13:21:56 on branch trunk — Make more use of convenience methods (user: js, size: 3100) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
37 38 39 40 41 42 43 | { static int modelnum = 0; MD2 *m = mdllookup[name]; if (m != nil) return m; | | | | | | | | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | { static int modelnum = 0; MD2 *m = mdllookup[name]; if (m != nil) return m; m = [MD2 md2]; m.mdlnum = modelnum++; m.mmi = [MapModelInfo infoWithRad:2 h:2 zoff:0 snap:0 name:@""]; m.loadname = name; if (mdllookup == nil) mdllookup = [[OFMutableDictionary alloc] init]; mdllookup[name] = m; return m; } void mapmodel( OFString *rad, OFString *h, OFString *zoff, OFString *snap, OFString *name) { MD2 *m = loadmodel([name stringByReplacingOccurrencesOfString:@"\\" withString:@"/"]); m.mmi = [MapModelInfo infoWithRad:rad.cube_intValue h:h.cube_intValue zoff:zoff.cube_intValue snap:snap.cube_intValue name:m.loadname]; if (mapmodels == nil) mapmodels = [[OFMutableArray alloc] init]; [mapmodels addObject:m]; } COMMAND(mapmodel, ARG_5STR) |
︙ | ︙ | |||
83 84 85 86 87 88 89 | MapModelInfo * getmminfo(int i) { return i < mapmodels.count ? mapmodels[i].mmi : nil; } void | | | | > | | | < < | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | MapModelInfo * getmminfo(int i) { return i < mapmodels.count ? mapmodels[i].mmi : nil; } void rendermodel(OFString *mdl, int frame, int range, int tex, float rad, OFVector3D position, float yaw, float pitch, bool teammate, float scale, float speed, int snap, int basetime) { MD2 *m = loadmodel(mdl); if (isoccluded(player1.o.x, player1.o.y, position.x - rad, position.z - rad, rad * 2)) return; delayedload(m); int xs, ys; glBindTexture(GL_TEXTURE_2D, tex ? lookuptexture(tex, &xs, &ys) : FIRSTMDL + m.mdlnum); int ix = (int)position.x; int iy = (int)position.z; OFVector3D light = OFMakeVector3D(1, 1, 1); if (!OUTBORD(ix, iy)) { sqr *s = S(ix, iy); float ll = 256.0f; // 0.96f; float of = 0.0f; // 0.1f; light.x = s->r / ll + of; light.y = s->g / ll + of; light.z = s->b / ll + of; } if (teammate) { light.x *= 0.6f; light.y *= 0.7f; light.z *= 1.2f; } [m renderWithLight:light frame:frame range:range position:position yaw:yaw pitch:pitch scale:scale speed:speed snap:snap basetime:basetime]; } |