//----------------------------------------------------------------// void MOAIGfxDeviceStateCache::SetScissorRect ( ZLRect rect ) { rect.Bless (); this->mViewRect.Clip ( rect ); ZLRect& current = this->mScissorRect; if ( ( current.mXMin != rect.mXMin ) || ( current.mYMin != rect.mYMin ) || ( current.mXMax != rect.mXMax ) || ( current.mYMax != rect.mYMax )) { this->OnGfxStateWillChange (); ZLRect deviceRect = this->mCurrentFrameBuffer->WndRectToDevice ( rect ); s32 x = ( s32 )deviceRect.mXMin; s32 y = ( s32 )deviceRect.mYMin; u32 w = ( u32 )( deviceRect.Width () + 0.5f ); u32 h = ( u32 )( deviceRect.Height () + 0.5f ); w = h == 0 ? 0 : w; h = w == 0 ? 0 : h; zglScissor ( x, y, w, h ); this->mScissorRect = rect; zglEnable ( ZGL_PIPELINE_SCISSOR ); } }
//----------------------------------------------------------------// void MOAIDraw::DrawGrid ( const ZLRect& rect, u32 xCells, u32 yCells ) { if ( xCells > 1 ) { float xStep = rect.Width () / ( float )xCells; for ( u32 i = 1; i < xCells; ++i ) { float x = rect.mXMin + (( float )i * xStep ); USVec2D v0 ( x, rect.mYMin ); USVec2D v1 ( x, rect.mYMax ); MOAIDraw::DrawLine ( v0, v1 ); } } if ( yCells > 1 ) { float yStep = rect.Height () / ( float )yCells; for ( u32 i = 1; i < yCells; ++i ) { float y = rect.mYMin + (( float )i * yStep ); USVec2D v0 ( rect.mXMin, y ); USVec2D v1 ( rect.mXMax, y ); MOAIDraw::DrawLine ( v0, v1 ); } } MOAIDraw::DrawRectOutline ( rect ); }