diff --git a/stepmania/src/ActorScroller.cpp b/stepmania/src/ActorScroller.cpp index 1101217479..5a77e7a466 100644 --- a/stepmania/src/ActorScroller.cpp +++ b/stepmania/src/ActorScroller.cpp @@ -213,24 +213,24 @@ void ActorScroller::PositionItemsAndDrawPrimitives( bool bDrawPrimitives ) if( !m_quadMask.GetHidden() ) { // write to z buffer so that top and bottom are clipped - float fPositionFullyOnScreenTop = -(m_fNumItemsToDraw-1)/2.f; - float fPositionFullyOnScreenBottom = (m_fNumItemsToDraw-1)/2.f; - float fPositionFullyOffScreenTop = fPositionFullyOnScreenTop - 1; - float fPositionFullyOffScreenBottom = fPositionFullyOnScreenBottom + 1; + // Draw an extra item; this is the one that will be masked. + float fNumItemsToDraw = m_fNumItemsToDraw+1; + float fPositionFullyOnScreenTop = -(fNumItemsToDraw)/2.f; + float fPositionFullyOnScreenBottom = (fNumItemsToDraw)/2.f; - m_exprTransformFunction.PositionItem( &m_quadMask, fPositionFullyOffScreenTop, -1, m_SubActors.size() ); + m_exprTransformFunction.PositionItem( &m_quadMask, fPositionFullyOnScreenTop, -1, m_SubActors.size() ); if( bDrawPrimitives ) m_quadMask.Draw(); - m_exprTransformFunction.PositionItem( &m_quadMask, fPositionFullyOffScreenBottom, m_SubActors.size(), m_SubActors.size() ); + m_exprTransformFunction.PositionItem( &m_quadMask, fPositionFullyOnScreenBottom, m_SubActors.size(), m_SubActors.size() ); if( bDrawPrimitives ) m_quadMask.Draw(); - fFirstItemToDraw = fPositionFullyOffScreenTop + m_fCurrentItem; - fLastItemToDraw = fPositionFullyOffScreenBottom + m_fCurrentItem; + fFirstItemToDraw = m_fCurrentItem - fNumItemsToDraw/2.f; + fLastItemToDraw = m_fCurrentItem + fNumItemsToDraw/2.f; } else { - fFirstItemToDraw = m_fCurrentItem - (m_fNumItemsToDraw)/2.f; - fLastItemToDraw = m_fCurrentItem + (m_fNumItemsToDraw)/2.f; + fFirstItemToDraw = m_fCurrentItem - m_fNumItemsToDraw/2.f; + fLastItemToDraw = m_fCurrentItem + m_fNumItemsToDraw/2.f; } bool bDelayedDraw = m_bDrawByZPosition && !m_bLoop;