webgl指纹随机

 

 

 

// WebGLRenderingContext.prototype.bufferData

_bufferData = WebGL2RenderingContext.prototype.bufferData;

WebGL2RenderingContext.prototype.bufferData = function() {
    debugger;;
    let e = this;
    let t = arguments;

    let r = -1;
    if (t.length > 0 && (t[0].length ? r = 0 : t.length > 1 && t[1].length && (r = 1)),
    r >= 0) {
        let i = 0;
        for (let f = 0; f < 4; f++) {
            for (; i < t[r].length && t[r][i] === 0; i++)
                ;
            if (i > t[r].length)
                break;
            const d = t[r].constructor;
            let c = 0;
            if (d == Float32Array)
                c = (Math.random() * .05 + .1) * (Math.random() > .5 ? 1 : -1);
            else if (d == Int16Array || d == Int32Array || d == Uint16Array || d == Uint32Array) {
                const u = Math.min(...t[r])
                  , w = Math.max(...t[r]);
                c = Math.floor(Math.random() * (w - u + 1)) + u
            }
            t[r][i] += c,
            i++
        }
    }

    _bufferData.apply(this, arguments)
}

let i = document.createElement("canvas");
i.width = 256;
i.height = 128,
i.style.backgroundColor = "#555",
i.style.borderRadius = "4px";
var p = i.getContext('webgl2');



p.viewport(0, 0, p.drawingBufferWidth, p.drawingBufferHeight);
var m = p.createProgram()
  , x = p.createShader(p.VERTEX_SHADER)
  , v = (p.shaderSource(x, "attribute vec2 attrVertex;attribute vec4 attrColor;varying vec4 varyinColor;uniform mat4 transform;void main(){varyinColor=attrColor;gl_Position=transform*vec4(attrVertex,0,1);}"),
p.compileShader(x),
p.attachShader(m, x),
p.createShader(p.FRAGMENT_SHADER))
  , b = (p.shaderSource(v, "precision mediump float;varying vec4 varyinColor;void main(){gl_FragColor=varyinColor;}"),
p.compileShader(v),
p.attachShader(m, v),
p.linkProgram(m),
p.useProgram(m),
m.vertexPosAttrib = p.getAttribLocation(m, "attrVertex"),
m.colorAttrib = p.getAttribLocation(m, "attrColor"),
m.transform = p.getUniformLocation(m, "transform"),
p.enableVertexAttribArray(m.vertexPosAttrib),
p.enableVertexAttribArray(m.colorAttrib),
p.uniformMatrix4fv(m.transform, !1, [1.5, 0, 0, 0, 0, 1.5, 0, 0, 0, 0, 1, 0, .5, 0, 0, 1]),
[])
  , A = [-.25, 0]
  , S = 128;

for (var C = 0; C < S; C++) {
    var L = (45 + C / S * 270) / 360 * 2 * Math.PI
      , R = (45 + (C + 1) / S * 270) / 360 * 2 * Math.PI;
    b.push(A[0], A[1], 1, .7, 0, 1),
    b.push(A[0] + .5 * Math.cos(L), A[1] + .5 * Math.sin(L), 2, 1 - C / S, 0, 1),
    b.push(A[0] + .5 * Math.cos(R), A[1] + .5 * Math.sin(R), 1, 1 - (C + 1) / S, 0, 1)
}
var T = new Float32Array(b)
  , w = p.createBuffer();
p.bindBuffer(p.ARRAY_BUFFER, w),
p.bufferData(p.ARRAY_BUFFER, T, p.STATIC_DRAW),
p.vertexAttribPointer(m.vertexPosAttrib, 2, p.FLOAT, !1, 24, 0),
p.vertexAttribPointer(m.colorAttrib, 4, p.FLOAT, !1, 24, 8),
p.drawArrays(p.LINE_STRIP, 0, T.length / 6);

var M = new Uint8Array(p.canvas.width * p.canvas.height * 4)
  , y = (p.readPixels(0, 0, p.canvas.width, p.canvas.height, p.RGBA, p.UNSIGNED_BYTE, M),
JSON.stringify(M).replace(/,?"[0-9]+":/g, ""));

console.log(y);
;

 

posted @ 2025-08-14 16:00  AngDH  阅读(11)  评论(0)    收藏  举报