As I understand it: ctx.readPixels takes the following arguments: x is the starting index horizontally, y is the starting index vertically, ax is the number of columns starting at index x, ay is the number of rows starting at index y, format is the way to fill the array (gl.RGBA mainly), type - variable type (gl.UNSIGNED_BYTE basically), callbackArr - returned array (Uint8Array type array, the number of cells that is equal to ax * ay).
If everything is correct, then I cannot understand why with this canvas:

with a width of 1920 and a height of 1024, specifying the readPixels function (0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, arr), the array arr == [255,255,255,255] is returned (everything is correct), and with this canvas:

and with the same width and height, and the same function arguments, the same array is obtained, although it can be seen from the figure that the 1st pixel has changed color to 255, 0, 0, 255? Thanks in advance for the answer