Skip to content

Commit 21b9683

Browse files
committed
Don't resize if already same size. Better binding handling.
1 parent 2be3b7a commit 21b9683

1 file changed

Lines changed: 30 additions & 32 deletions

File tree

src/renderer/webgl/RenderTarget.js

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -189,20 +189,26 @@ var RenderTarget = new Class({
189189
*/
190190
resize: function (width, height)
191191
{
192-
var renderer = this.renderer;
192+
var scaledWidth = width * this.scale;
193+
var scaledHeight = height * this.scale;
193194

194-
renderer.deleteFramebuffer(this.framebuffer);
195+
if (scaledWidth !== this.width || scaledHeight !== this.height)
196+
{
197+
var renderer = this.renderer;
195198

196-
renderer.deleteTexture(this.texture);
199+
renderer.deleteFramebuffer(this.framebuffer);
197200

198-
width *= this.scale;
199-
height *= this.scale;
201+
renderer.deleteTexture(this.texture);
200202

201-
this.texture = renderer.createTextureFromSource(null, width, height, this.minFilter);
202-
this.framebuffer = renderer.createFramebuffer(width, height, this.texture, false);
203+
width *= this.scale;
204+
height *= this.scale;
203205

204-
this.width = width;
205-
this.height = height;
206+
this.texture = renderer.createTextureFromSource(null, width, height, this.minFilter);
207+
this.framebuffer = renderer.createFramebuffer(width, height, this.texture, false);
208+
209+
this.width = width;
210+
this.height = height;
211+
}
206212

207213
return this;
208214
},
@@ -218,8 +224,10 @@ var RenderTarget = new Class({
218224
* @since 3.50.0
219225
*
220226
* @param {boolean} [adjustViewport=false] - Adjust the GL viewport by calling `RenderTarget.adjustViewport` ?
227+
* @param {number} [width] - Optional new width of this Render Target.
228+
* @param {number} [height] - Optional new height of this Render Target.
221229
*/
222-
bind: function (adjustViewport)
230+
bind: function (adjustViewport, width, height)
223231
{
224232
if (adjustViewport === undefined) { adjustViewport = false; }
225233

@@ -228,6 +236,11 @@ var RenderTarget = new Class({
228236
this.renderer.flush();
229237
}
230238

239+
if (width && height)
240+
{
241+
this.resize(width, height);
242+
}
243+
231244
this.renderer.pushFramebuffer(this.framebuffer, false, false, false);
232245

233246
if (this.autoClear)
@@ -236,7 +249,7 @@ var RenderTarget = new Class({
236249

237250
gl.clearColor(0, 0, 0, 0);
238251

239-
gl.clear(gl.COLOR_BUFFER_BIT);
252+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
240253
}
241254

242255
if (adjustViewport)
@@ -246,21 +259,20 @@ var RenderTarget = new Class({
246259
},
247260

248261
/**
249-
* Adjusts the GL viewport to match the WebGL Renderer width and height,
250-
* with a y offset of `RenderTarget.height` - `WebGLRenderer.height`.
262+
* Adjusts the GL viewport to match the width and height of this Render Target.
263+
*
264+
* Also disables `SCISSOR_TEST`.
251265
*
252266
* @method Phaser.Renderer.WebGL.RenderTarget#adjustViewport
253267
* @since 3.50.0
254268
*/
255269
adjustViewport: function ()
256270
{
257-
var renderer = this.renderer;
271+
var gl = this.renderer.gl;
258272

259-
var textureWidth = this.width;
260-
var textureHeight = this.height;
273+
gl.viewport(0, 0, this.width, this.height);
261274

262-
renderer.gl.viewport(0, 0, textureWidth, textureHeight);
263-
renderer.gl.disable(renderer.gl.SCISSOR_TEST);
275+
gl.disable(gl.SCISSOR_TEST);
264276
},
265277

266278
/**
@@ -301,20 +313,6 @@ var RenderTarget = new Class({
301313
if (flush)
302314
{
303315
renderer.flush();
304-
305-
renderer.gl.enable(renderer.gl.SCISSOR_TEST);
306-
307-
var scissor = renderer.currentScissor;
308-
309-
if (scissor)
310-
{
311-
var x = scissor[0];
312-
var y = scissor[1];
313-
var width = scissor[2];
314-
var height = scissor[3];
315-
316-
renderer.gl.scissor(x, (renderer.drawingBufferHeight - y - height), width, height);
317-
}
318316
}
319317

320318
return renderer.popFramebuffer();

0 commit comments

Comments
 (0)