shadeAndTrade(shaderFunc, newTexture=undefined) {
        let src = this.currentTexture;
        let deallocSrc = !this._dontDeallocFlag;
        let dst = newTexture || WglTexturePool.takeSame(src);

        let configuredShader = shaderFunc instanceof WglConfiguredShader ? shaderFunc : shaderFunc(src);
        configuredShader.renderTo(dst);

        this.currentTexture = dst;
        this._dontDeallocFlag = false;
        if (deallocSrc) {
            src.deallocByDepositingInPool('WglTexturePool shadeAndTrade');
        }
    }
Applies the given shader function to the trader's old texture, renders it onto a new texture, deallocs the old
texture, and finally holds on to the new texture.

@param {!WglConfiguredShader|!function(!WglTexture) : !WglConfiguredShader} shaderFunc
@param {undefined|!WglTexture} newTexture The texture to take and shade. If undefined, a texture matching the old
texture is taken from the texture pool.
@returns {void}