void OctreeRenderer::render(RenderArgs::RenderMode renderMode, RenderArgs::RenderSide renderSide, RenderArgs::DebugFlags renderDebugFlags) { RenderArgs args(this, _viewFrustum, getSizeScale(), getBoundaryLevelAdjust(), renderMode, renderSide, renderDebugFlags); if (_tree) { _tree->lockForRead(); _tree->recurseTreeWithOperation(renderOperation, &args); _tree->unlock(); } _meshesConsidered = args._meshesConsidered; _meshesRendered = args._meshesRendered; _meshesOutOfView = args._meshesOutOfView; _meshesTooSmall = args._meshesTooSmall; _elementsTouched = args._elementsTouched; _itemsRendered = args._itemsRendered; _itemsOutOfView = args._itemsOutOfView; _itemsTooSmall = args._itemsTooSmall; _materialSwitches = args._materialSwitches; _trianglesRendered = args._trianglesRendered; _quadsRendered = args._quadsRendered; _translucentMeshPartsRendered = args._translucentMeshPartsRendered; _opaqueMeshPartsRendered = args._opaqueMeshPartsRendered; }
DeferredVisualUpdate SpriteVisual::update(ScreenTransform const& trans, Vector2 const& pos) { const float sizeScale = getSizeScale(); float upperX = pos.x() - m_size.x() * 0.5f * sizeScale; float upperY = pos.y() - m_size.y() * 0.5f * sizeScale; float lowerX = pos.x() + m_size.x() * 0.5f * sizeScale; float lowerY = pos.y() + m_size.y() * 0.5f * sizeScale; trans.quadToScreen(upperX, upperY, lowerX, lowerY, isIngame()); // first vertex of first trig // todo: can also be computed once and stored with the visual, or percompute the 1 / max // * 1.2f because we want a 20 percent buffer, because 1.0 is "reserved" for gui objects and text const float zVal = LayerTools::computeZ(getPriority()); //VertexBufferArray * vtxBuffer = &m_vertexBuffer; // can be executed on the render thread, if needed auto lmdUpdate = [ upperX, upperY, lowerX, lowerY, zVal ] ( VisualBase * vb ) { SpriteVisual * sv = static_cast<SpriteVisual *> ( vb ); sv->m_vertexBuffer[0] = upperX; sv->m_vertexBuffer[1] = -lowerY; sv->m_vertexBuffer[2] = zVal; // second vertex of first trig sv->m_vertexBuffer[3] = lowerX; sv->m_vertexBuffer[4] = -lowerY; sv->m_vertexBuffer[5] = zVal; // third vertex of first trig sv->m_vertexBuffer[6] = lowerX; sv->m_vertexBuffer[7] = -upperY; sv->m_vertexBuffer[8] = zVal; // first ( and only ) vertex of second trig sv->m_vertexBuffer[9] = upperX; sv->m_vertexBuffer[10] = -upperY; sv->m_vertexBuffer[11] = zVal; }; lmdUpdate(this); return lmdUpdate; }