@@ -102,7 +102,7 @@ switch (__BrowserGetter.adaptationType) {
102
102
break ;
103
103
}
104
104
105
- var _scissorRect = cc . rect ( ) ;
105
+ var _scissorRect = null ;
106
106
107
107
/**
108
108
* cc.view is the singleton object which represents the game window.<br/>
@@ -801,15 +801,24 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
801
801
* @param {Number } h
802
802
*/
803
803
setScissorInPoints : function ( x , y , w , h ) {
804
- var zoomFactor = this . _frameZoomFactor , scaleX = this . _scaleX , scaleY = this . _scaleY ;
805
- _scissorRect . x = x ;
806
- _scissorRect . y = y ;
807
- _scissorRect . width = w ;
808
- _scissorRect . height = h ;
809
- cc . _renderContext . scissor ( x * scaleX * zoomFactor + this . _viewPortRect . x * zoomFactor ,
810
- y * scaleY * zoomFactor + this . _viewPortRect . y * zoomFactor ,
811
- w * scaleX * zoomFactor ,
812
- h * scaleY * zoomFactor ) ;
804
+ var locFrameZoomFactor = this . _frameZoomFactor , locScaleX = this . _scaleX , locScaleY = this . _scaleY ;
805
+ var sx = Math . ceil ( x * locScaleX * locFrameZoomFactor + this . _viewPortRect . x * locFrameZoomFactor ) ;
806
+ var sy = Math . ceil ( y * locScaleY * locFrameZoomFactor + this . _viewPortRect . y * locFrameZoomFactor ) ;
807
+ var sw = Math . ceil ( w * locScaleX * locFrameZoomFactor ) ;
808
+ var sh = Math . ceil ( h * locScaleY * locFrameZoomFactor ) ;
809
+
810
+ if ( ! _scissorRect ) {
811
+ var boxArr = gl . getParameter ( gl . SCISSOR_BOX ) ;
812
+ _scissorRect = cc . rect ( boxArr [ 0 ] , boxArr [ 1 ] , boxArr [ 2 ] , boxArr [ 3 ] ) ;
813
+ }
814
+
815
+ if ( _scissorRect . x != sx || _scissorRect . y != sy || _scissorRect . width != sw || _scissorRect . height != sh ) {
816
+ _scissorRect . x = sx ;
817
+ _scissorRect . y = sy ;
818
+ _scissorRect . width = sw ;
819
+ _scissorRect . height = sh ;
820
+ cc . _renderContext . scissor ( sx , sy , sw , sh ) ;
821
+ }
813
822
} ,
814
823
815
824
/**
@@ -825,7 +834,18 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{
825
834
* @return {cc.Rect }
826
835
*/
827
836
getScissorRect : function ( ) {
828
- return cc . rect ( _scissorRect ) ;
837
+ if ( ! _scissorRect ) {
838
+ var boxArr = gl . getParameter ( gl . SCISSOR_BOX ) ;
839
+ _scissorRect = cc . rect ( boxArr [ 0 ] , boxArr [ 1 ] , boxArr [ 2 ] , boxArr [ 3 ] ) ;
840
+ }
841
+ var scaleX = this . _scaleX ;
842
+ var scaleY = this . _scaleY ;
843
+ return cc . rect (
844
+ ( _scissorRect . x - this . _viewPortRect . x ) / scaleX ,
845
+ ( _scissorRect . y - this . _viewPortRect . y ) / scaleY ,
846
+ _scissorRect . width / scaleX ,
847
+ _scissorRect . height / scaleY
848
+ ) ;
829
849
} ,
830
850
831
851
/**
0 commit comments