MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / render

Method render

Source/Node/TileNode.cpp:365–457  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

363}
364
365void TileNode::render() {
366 if (_tileQuads.empty()) {
367 Node::render();
368 return;
369 }
370
371 if (_flags.isOn(TileNode::VertexPosDirty)) {
372 _flags.setOff(TileNode::VertexPosDirty);
373 for (auto& tileQuad : _tileQuads) {
374 tileQuad.vertexPosDirty = true;
375 }
376 }
377
378 std::vector<TileQuad*> tileQuads;
379 tileQuads.reserve(_tileQuads.size());
380 if (SharedDirector.isFrustumCulling()) {
381 for (auto& tileQuad : _tileQuads) {
382 float minX = tileQuad.positions[0].lb.x;
383 float minY = tileQuad.positions[0].lb.y;
384 float maxX = tileQuad.positions[0].rt.x;
385 float maxY = tileQuad.positions[0].rt.y;
386 for (size_t i = 1; i < tileQuad.positions.size(); i++) {
387 const SpriteQuad::Position& quadPos = tileQuad.positions[i];
388 minX = std::min(minX, quadPos.lb.x);
389 minY = std::min(minY, quadPos.lb.y);
390 maxX = std::max(maxX, quadPos.rt.x);
391 maxY = std::max(maxY, quadPos.rt.y);
392 }
393 AABB aabb;
394 Matrix::mulAABB(aabb, getWorld(), {
395 {minX, minY, 0},
396 {maxX, maxY, 0},
397 });
398 if (SharedDirector.isInFrustum(aabb)) {
399 tileQuads.push_back(&tileQuad);
400 }
401 }
402 } else {
403 for (auto& tileQuad : _tileQuads) {
404 tileQuads.push_back(&tileQuad);
405 }
406 }
407
408 if (tileQuads.empty()) {
409 Node::render();
410 return;
411 }
412
413 Matrix transform;
414 bool transformInit = false;
415 for (auto tileQuad : tileQuads) {
416 if (tileQuad->vertexPosDirty) {
417 tileQuad->vertexPosDirty = false;
418 if (!transformInit) {
419 transformInit = true;
420 Matrix::mulMtx(transform, SharedDirector.getViewProjection(), getWorld());
421 }
422 for (auto i = 0u; i < tileQuad->quads.size(); ++i) {

Callers

nothing calls this directly

Calls 15

isOnMethod · 0.80
setOffMethod · 0.80
isFrustumCullingMethod · 0.80
isInFrustumMethod · 0.80
setCurrentMethod · 0.80
getTargetMethod · 0.80
pushMethod · 0.65
minFunction · 0.50
maxFunction · 0.50
emptyMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected