@@ -1072,8 +1072,10 @@ Object.assign(GraphicsDevice.prototype, {
1072
1072
return false ;
1073
1073
}
1074
1074
1075
+ // render target currently being rendered to (these are null if default framebuffer is active)
1075
1076
var renderTarget = this . renderTarget ;
1076
1077
var resolveRenderTarget = renderTarget && renderTarget . _glResolveFrameBuffer ;
1078
+
1077
1079
var grabPassTexture = this . grabPassTexture ;
1078
1080
var width = this . width ;
1079
1081
var height = this . height ;
@@ -1087,16 +1089,22 @@ Object.assign(GraphicsDevice.prototype, {
1087
1089
renderTarget . resolve ( true ) ;
1088
1090
}
1089
1091
1092
+ // these are null if rendering to default framebuffer
1090
1093
var currentFrameBuffer = renderTarget ? renderTarget . _glFrameBuffer : null ;
1091
1094
var resolvedFrameBuffer = renderTarget ? renderTarget . _glResolveFrameBuffer || renderTarget . _glFrameBuffer : null ;
1092
1095
1096
+ // init grab pass framebuffer (only does it once)
1093
1097
this . initRenderTarget ( this . grabPassRenderTarget ) ;
1094
1098
var grabPassFrameBuffer = this . grabPassRenderTarget . _glFrameBuffer ;
1095
1099
1100
+ // blit from currently used render target (or default framebuffer if null)
1096
1101
gl . bindFramebuffer ( gl . READ_FRAMEBUFFER , resolvedFrameBuffer ) ;
1102
+
1103
+ // blit to grab pass framebuffer
1097
1104
gl . bindFramebuffer ( gl . DRAW_FRAMEBUFFER , grabPassFrameBuffer ) ;
1098
1105
1099
1106
// Note: This fails on Chromium Mac when Antialasing is On and Alpha is off
1107
+ // blit color from current framebuffer's color attachment to grab pass color attachment
1100
1108
gl . blitFramebuffer ( 0 , 0 , width , height , 0 , 0 , width , height , gl . COLOR_BUFFER_BIT , gl . NEAREST ) ;
1101
1109
1102
1110
gl . bindFramebuffer ( gl . DRAW_FRAMEBUFFER , currentFrameBuffer ) ;
@@ -1107,6 +1115,7 @@ Object.assign(GraphicsDevice.prototype, {
1107
1115
gl . bindFramebuffer ( gl . FRAMEBUFFER , renderTarget . _glResolveFrameBuffer ) ;
1108
1116
}
1109
1117
1118
+ // this allocates texture (grabPassTexture was already bound to gl)
1110
1119
var format = grabPassTexture . _glFormat ;
1111
1120
gl . copyTexImage2D ( gl . TEXTURE_2D , 0 , format , 0 , 0 , width , height , 0 ) ;
1112
1121
grabPassTexture . _width = width ;
0 commit comments