WebGL пожёванная текстура

    const vertexShaderTextureSource = `
        attribute vec3 a_Position;
        attribute vec4 a_Color;
        attribute vec2 a_TextureCoords;

        uniform mat4 u_ProjectionMatrix;

        varying vec4 color;
        varying vec2 texCoords;

        void main()
        {
            color = a_Color;
            texCoords = a_TextureCoords;
            gl_Position = u_ProjectionMatrix * vec4(a_Position, 1.0);
        }
    `;
    const fragmentShaderTextureSource = `
            precision mediump float;
    
            varying vec4 color;
            varying vec2 texCoords;
    
            uniform sampler2D sampler;
    
            void main()
            {
                vec4 tex = texture2D(sampler, texCoords);
                if (tex.a < 0.01)
                    discard;
                gl_FragColor = tex * color;
            }
        `;
    #loadFontTexture(filePath) {
        const texId = gl.createTexture();
        const image = new Image();
        image.onload = () => {
            //console.log(image.width, image.height);
            gl.bindTexture(gl.TEXTURE_2D, texId);
            gl.activeTexture(gl.TEXTURE0);
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
        }
        image.src = filePath;
        return texId;
    }

Почему текстура выглядит такой пожёванной? :thinking:
А если так:

            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);

Тогда намного лучше.

Но у символов появляется контур. Как будто он в этих местах альфу вырезать не может :thinking:

Интересно :thinking:
Вместо

                if (tex.a < 0.01)
                    discard;

сделал так:

                if (tex.a < 0.99)
                    discard;

И заработало :man_shrugging:
По-идее, первый вариант неправильный. Странно, что в обычном OpenGL 3.x это работает :thinking: