MCPcopy Create free account
hub / github.com/assaultcube/AC / render_flat

Function render_flat

source/src/rendercubes.cpp:177–252  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175VARP(lighterror, 1, 4, 100);
176
177void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l4, sqr *l3, sqr *l2, bool isceil) // floor/ceil quads
178{
179 if(showmipstats) { l3 = l1 = &sbright; l4 = l2 = &sdark; }
180
181 Texture *t = lookupworldtexture(wtex);
182 float xf = TEXTURESCALE/t->xs;
183 float yf = TEXTURESCALE/t->ys;
184 float xs = size*xf;
185 float ys = size*yf;
186 float xo = xf*x;
187 float yo = yf*y;
188
189 bool first = striptype!=STRIP_FLOOR || x!=ox+size || striptex!=wtex || h!=oh || y!=oy;
190
191 if(first) // start strip here
192 {
193 stripend(verts);
194 firstindex = verts.length();
195 striptex = wtex;
196 oh = h;
197 oy = y;
198 striptype = STRIP_FLOOR;
199 if(isceil)
200 {
201 vert(x, y, h, l1, xo, yo);
202 vert(x, y+size, h, l2, xo, yo+ys);
203 }
204 else
205 {
206 vert(x, y+size, h, l2, xo, yo+ys);
207 vert(x, y, h, l1, xo, yo);
208 }
209 ol1r = l1->r;
210 ol1g = l1->g;
211 ol1b = l1->b;
212 ol2r = l2->r;
213 ol2g = l2->g;
214 ol2b = l2->b;
215 }
216 else // continue strip
217 {
218 int lighterr = lighterror*2;
219 if((iabs(ol1r-l3->r)<lighterr && iabs(ol2r-l4->r)<lighterr // skip vertices if light values are close enough
220 && iabs(ol1g-l3->g)<lighterr && iabs(ol2g-l4->g)<lighterr
221 && iabs(ol1b-l3->b)<lighterr && iabs(ol2b-l4->b)<lighterr) || !wtex)
222 {
223 verts.setsize(verts.length()-2);
224 nquads--;
225 }
226 else
227 {
228 uchar *p1 = (uchar *)(&verts[verts.length()-1].r);
229 ol1r = p1[0];
230 ol1g = p1[1];
231 ol1b = p1[2];
232 uchar *p2 = (uchar *)(&verts[verts.length()-2].r);
233 ol2r = p2[0];
234 ol2g = p2[1];

Callers 2

render_seg_newFunction · 0.85
worldrender.cppFile · 0.85

Calls 4

lookupworldtextureFunction · 0.85
iabsFunction · 0.85
setsizeMethod · 0.80
lengthMethod · 0.45

Tested by

no test coverage detected