Q: Different point size on different monitors I have two monitors, first 2560x1660, second 1920x1200, both have the same canvas with the same sizes(window.innerWidth = 1297, window.innerHeight = 788). I have some custom shader for Points material, and for some reason, on screen with better resolution the size of points is smaller, but canvas size is the same, what can be a problem?
Shader:
const vertexShader = `
  precision mediump float;

  uniform mat4 projectionMatrix;
  uniform mat4 modelViewMatrix;

  attribute vec3 position;

  attribute vec2 dim;
  attribute float scale;
  attribute vec2 size;

  varying vec2 vDim;
  varying vec2 vSize;

  void main() {
    vDim = dim;
    vSize = size;
    vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);

    gl_PointSize = 650.0 * scale / length( mvPosition.xyz );
    gl_Position = projectionMatrix * mvPosition;
  }`

const fragmentShader = `
  precision mediump float;

  uniform sampler2D texture;

  varying vec2 vDim;
  varying vec2 vScale;
  varying vec2 vSize;

  uniform vec3 fogColor;
  uniform float fogNear;
  uniform float fogFar;

  void main() {

    gl_FragColor = vec4( 1.0, 1.0, 1.0, 1.0 );
    gl_FragColor = gl_FragColor * texture2D( texture, vec2(vDim.x + (gl_PointCoord.x * vSize.x), vDim.y + (gl_PointCoord.y * vSize.y)) );

    float depth = gl_FragCoord.z / gl_FragCoord.w;

    float fogFactor = smoothstep( fogNear, fogFar, depth );
    gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );
  }`;


A: In normal PointsMaterial, you have the size property that you can adjust accordingly with the screen size. I don't know what that "scale" float in your shader is, but something like this should work:
var size = ( screen.width / 200 ) + ( screen.height / 200 );
var material = new THREE.CustomShaderMaterial({ color: 0xffffff, size: size });

Here is a Codepen example based on "window.innerWidth" and "window.innerHeight" for simplicity. You can just change them with screen.width and screen.height. Example: Codepen ex.
...

function pointsSize() {
  return (( window.innerWidth / 100 ) + ( window.innerHeight / 100 ));
}
...

window.addEventListener( 'resize', function() {

    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();

    points.material.size = pointsSize();

    renderer.setSize( window.innerWidth, window.innerHeight );

} );

