_setTextureUniforms() {
        // check if our texture is used in our program shaders
        // if so, get its uniform locations and bind it to our program
        const activeUniforms = this._parent._program.activeUniforms;

        for(let i = 0; i < activeUniforms.textures.length; i++) {
            if(activeUniforms.textures[i] === this._sampler.name) {
                // this texture is active
                this._sampler.isActive = true;

                // use the program and get our sampler and texture matrices uniforms
                this.renderer.useProgram(this._parent._program);

                // set our texture sampler uniform
                this._sampler.location = this.gl.getUniformLocation(this._parent._program.program, this._sampler.name);

                // set texture matrix uniform location only if active
                const isTextureMatrixActive = activeUniforms.textureMatrices.find(textureMatrix =>
                    textureMatrix === this._textureMatrix.name
                );

                if(isTextureMatrixActive) {
                    this._textureMatrix.isActive = true;
                    this._textureMatrix.location = this.gl.getUniformLocation(this._parent._program.program, this._textureMatrix.name);
                }

                // tell the shader we bound the texture to our indexed texture unit
                this.gl.uniform1i(this._sampler.location, this.index);
            }
        }
    }
Check if our textures is effectively used in our shaders
     If so, set it to active, get its uniform locations and bind it to our texture unit
*