draw(time){
        if(!this.run){return;}
        if(this.animation === true){
            requestAnimationFrame(() => {
                this.draw();
            });
        }
        if(time != null){
            this.nowTime = time;
        }else{
            this.nowTime = (Date.now() - this.startTime) * 0.001 + this.offsetTime;
        }
        ++this.frameCount;
        this.gl.useProgram(this.program);
        this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.fFront.f);
        if(Array.isArray(this.fBack.t) === true){
            this.gl.drawBuffers(this.buffers);
            for(let i = 0; i < Fragmen.MRT_TARGET_COUNT; ++i){
                this.gl.activeTexture(this.gl.TEXTURE0 + i);
                this.gl.bindTexture(this.gl.TEXTURE_2D, this.fBack.t[i]);
                this.gl.uniform1i(this.uniLocation[`sampler${i}`], i);
            }
        }else{
            this.gl.activeTexture(this.gl.TEXTURE0);
            this.gl.bindTexture(this.gl.TEXTURE_2D, this.fBack.t);
            this.gl.uniform1i(this.uniLocation.sampler, 0);
        }
        this.gl.enableVertexAttribArray(this.attLocation);
        this.gl.vertexAttribPointer(this.attLocation, 3, this.gl.FLOAT, false, 0, 0);
        this.gl.clear(this.gl.COLOR_BUFFER_BIT);
        this.gl.uniform2fv(this.uniLocation.mouse, this.mousePosition);
        this.gl.uniform1f(this.uniLocation.time, this.nowTime);
        this.gl.uniform1f(this.uniLocation.frame, this.frameCount);
        this.gl.uniform2fv(this.uniLocation.resolution, [this.width, this.height]);
        this.gl.uniform1f(this.uniLocation.sound, this.frequency);
        this.gl.drawArrays(this.gl.TRIANGLE_STRIP, 0, 4);

        if(Array.isArray(this.fBack.t) === true){
            this.gl.useProgram(this.post300Program);
            this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
            this.gl.activeTexture(this.gl.TEXTURE0);
            this.gl.bindTexture(this.gl.TEXTURE_2D, this.fFront.t[0]);
            this.gl.enableVertexAttribArray(this.post300AttLocation);
            this.gl.vertexAttribPointer(this.post300AttLocation, 3, this.gl.FLOAT, false, 0, 0);
            this.gl.clear(this.gl.COLOR_BUFFER_BIT);
            this.gl.uniform1i(this.post300UniLocation.texture, 0);
        }else{
            this.gl.useProgram(this.postProgram);
            this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
            this.gl.activeTexture(this.gl.TEXTURE0);
            this.gl.bindTexture(this.gl.TEXTURE_2D, this.fFront.t);
            this.gl.enableVertexAttribArray(this.postAttLocation);
            this.gl.vertexAttribPointer(this.postAttLocation, 3, this.gl.FLOAT, false, 0, 0);
            this.gl.clear(this.gl.COLOR_BUFFER_BIT);
            this.gl.uniform1i(this.postUniLocation.texture, 0);
        }
        this.gl.drawArrays(this.gl.TRIANGLE_STRIP, 0, 4);

        this.gl.flush();
        this.fTemp = this.fFront;
        this.fFront = this.fBack;
        this.fBack = this.fTemp;

        if(this.onDrawCallback != null){
            this.onDrawCallback();
        }
    }
rendering
@param {number} [time] - time of uniform