@@ -21,14 +21,122 @@ var ForwardRenderer = function (renderer, lightLayer, interpolationPercentage, c
2121 for ( var index = 0 ; index < length ; ++ index )
2222 {
2323 var spriteNormalPair = spriteList [ index ] ;
24- renderer . setTexture (
25- spriteNormalPair .
26- normalTextureRef .
27- source [ spriteNormalPair . spriteRef . frame . sourceIndex ] .
28- glTexture ,
29- 1
30- ) ;
31- batch . addSprite ( spriteNormalPair . spriteRef , camera ) ;
24+ var gameObject = spriteNormalPair . spriteRef ;
25+
26+ /* Inlined function of add sprite modified. */
27+ {
28+ var tempMatrix = batch . tempMatrix ;
29+ var frame = gameObject . frame ;
30+ var forceFlipY = ( frame . texture . source [ frame . sourceIndex ] . glTexture . isRenderTexture ? true : false ) ;
31+ var flipX = gameObject . flipX ;
32+ var flipY = gameObject . flipY ^ forceFlipY ;
33+ var vertexDataBuffer = batch . vertexDataBuffer ;
34+ var vertexBufferObjectF32 = vertexDataBuffer . floatView ;
35+ var vertexBufferObjectU32 = vertexDataBuffer . uintView ;
36+ var vertexOffset = 0 ;
37+ var uvs = frame . uvs ;
38+ var width = frame . width * ( flipX ? - 1 : 1 ) ;
39+ var height = frame . height * ( flipY ? - 1 : 1 ) ;
40+ var translateX = gameObject . x - camera . scrollX * gameObject . scrollFactorX ;
41+ var translateY = gameObject . y - camera . scrollY * gameObject . scrollFactorY ;
42+ var scaleX = gameObject . scaleX ;
43+ var scaleY = gameObject . scaleY ;
44+ var rotation = - gameObject . rotation ;
45+ var tempMatrixMatrix = tempMatrix . matrix ;
46+ var x = - gameObject . displayOriginX + frame . x + ( ( frame . width ) * ( flipX ? 1 : 0.0 ) ) ;
47+ var y = - gameObject . displayOriginY + frame . y + ( ( frame . height ) * ( flipY ? 1 : 0.0 ) ) ;
48+ var xw = x + width ;
49+ var yh = y + height ;
50+ var cameraMatrix = camera . matrix . matrix ;
51+ var mva , mvb , mvc , mvd , mve , mvf , tx0 , ty0 , tx1 , ty1 , tx2 , ty2 , tx3 , ty3 ;
52+ var sra , srb , src , srd , sre , srf , cma , cmb , cmc , cmd , cme , cmf ;
53+ var alphaTL = gameObject . _alphaTL ;
54+ var alphaTR = gameObject . _alphaTR ;
55+ var alphaBL = gameObject . _alphaBL ;
56+ var alphaBR = gameObject . _alphaBR ;
57+ var tintTL = gameObject . _tintTL ;
58+ var tintTR = gameObject . _tintTR ;
59+ var tintBL = gameObject . _tintBL ;
60+ var tintBR = gameObject . _tintBR ;
61+
62+ tempMatrix . applyITRS ( translateX , translateY , rotation , scaleX , scaleY ) ;
63+
64+ sra = tempMatrixMatrix [ 0 ] ;
65+ srb = tempMatrixMatrix [ 1 ] ;
66+ src = tempMatrixMatrix [ 2 ] ;
67+ srd = tempMatrixMatrix [ 3 ] ;
68+ sre = tempMatrixMatrix [ 4 ] ;
69+ srf = tempMatrixMatrix [ 5 ] ;
70+
71+ cma = cameraMatrix [ 0 ] ;
72+ cmb = cameraMatrix [ 1 ] ;
73+ cmc = cameraMatrix [ 2 ] ;
74+ cmd = cameraMatrix [ 3 ] ;
75+ cme = cameraMatrix [ 4 ] ;
76+ cmf = cameraMatrix [ 5 ] ;
77+
78+ mva = sra * cma + srb * cmc ;
79+ mvb = sra * cmb + srb * cmd ;
80+ mvc = src * cma + srd * cmc ;
81+ mvd = src * cmb + srd * cmd ;
82+ mve = sre * cma + srf * cmc + cme ;
83+ mvf = sre * cmb + srf * cmd + cmf ;
84+
85+ tx0 = x * mva + y * mvc + mve ;
86+ ty0 = x * mvb + y * mvd + mvf ;
87+ tx1 = x * mva + yh * mvc + mve ;
88+ ty1 = x * mvb + yh * mvd + mvf ;
89+ tx2 = xw * mva + yh * mvc + mve ;
90+ ty2 = xw * mvb + yh * mvd + mvf ;
91+ tx3 = xw * mva + y * mvc + mve ;
92+ ty3 = xw * mvb + y * mvd + mvf ;
93+
94+
95+ if ( renderer . currentTexture [ 0 ] !== frame . texture . source [ frame . sourceIndex ] . glTexture ||
96+ renderer . currentTexture [ 1 ] !== spriteNormalPair . normalTextureRef . source [ spriteNormalPair . spriteRef . frame . sourceIndex ] . glTexture )
97+ {
98+ batch . flush ( lightLayer . passShader , lightLayer . renderTarget ) ;
99+ renderer . setTexture ( frame . texture . source [ frame . sourceIndex ] . glTexture , 0 ) ;
100+ renderer . setTexture ( spriteNormalPair . normalTextureRef . source [ spriteNormalPair . spriteRef . frame . sourceIndex ] . glTexture , 1 ) ;
101+ }
102+
103+ batch . drawIndexed = true ;
104+ batch . drawingMesh = false ;
105+ vertexOffset = vertexDataBuffer . allocate ( 24 ) ;
106+ batch . elementCount += 6 ;
107+
108+ // Top Left
109+ vertexBufferObjectF32 [ vertexOffset ++ ] = tx0 ;
110+ vertexBufferObjectF32 [ vertexOffset ++ ] = ty0 ;
111+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . x0 ;
112+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . y0 ;
113+ vertexBufferObjectU32 [ vertexOffset ++ ] = tintTL ;
114+ vertexBufferObjectF32 [ vertexOffset ++ ] = alphaTL ;
115+
116+ // Bottom Left
117+ vertexBufferObjectF32 [ vertexOffset ++ ] = tx1 ;
118+ vertexBufferObjectF32 [ vertexOffset ++ ] = ty1 ;
119+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . x1 ;
120+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . y1 ;
121+ vertexBufferObjectU32 [ vertexOffset ++ ] = tintBL ;
122+ vertexBufferObjectF32 [ vertexOffset ++ ] = alphaBL ;
123+
124+ // Bottom Right
125+ vertexBufferObjectF32 [ vertexOffset ++ ] = tx2 ;
126+ vertexBufferObjectF32 [ vertexOffset ++ ] = ty2 ;
127+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . x2 ;
128+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . y2 ;
129+ vertexBufferObjectU32 [ vertexOffset ++ ] = tintBR ;
130+ vertexBufferObjectF32 [ vertexOffset ++ ] = alphaBR ;
131+
132+ // Top Right
133+ vertexBufferObjectF32 [ vertexOffset ++ ] = tx3 ;
134+ vertexBufferObjectF32 [ vertexOffset ++ ] = ty3 ;
135+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . x3 ;
136+ vertexBufferObjectF32 [ vertexOffset ++ ] = uvs . y3 ;
137+ vertexBufferObjectU32 [ vertexOffset ++ ] = tintTR ;
138+ vertexBufferObjectF32 [ vertexOffset ++ ] = alphaTR ;
139+ }
32140 }
33141
34142 batch . flush ( lightLayer . passShader , lightLayer . renderTarget ) ;
0 commit comments