void Camera::UpdateVisibility(const Collider& Collider) { using std::sort; using std::unique; for (auto&& buf : m_Buffers) { buf.clear(); } const Vec2i LeftUpper = -m_CurTranslation - Vec2f(1.f, 1.f); const Vec2i RightLower = -m_CurTranslation + m_ViewHalfSize * 2.f + Vec2f(1.f, 1.f); m_CollisionsEnd = Collider.CopyColliding( LeftUpper, RightLower, m_CollisionsBuffer.begin()); sort(m_CollisionsBuffer.begin(), m_CollisionsEnd); m_CollisionsEnd = unique(m_CollisionsBuffer.begin(), m_CollisionsEnd); for (auto CollisionsIter = m_CollisionsBuffer.begin(); CollisionsIter != m_CollisionsEnd; ++CollisionsIter) { const int TextureDescr = (*CollisionsIter)->GetTextureDescriptor(); if (TextureDescr != -1) { m_Buffers[TextureDescr].push_back(*CollisionsIter); } } }