title: In OpenGL ES 2.0 / GLSL, where do you need precision specifiers?
body: <p>Does the variable that you're stuffing values into dictate what precision you're working with, to the right of the equals sign?</p>
  
  <p>For example, is there any difference, of meaning, to the precision specifier here:</p>
  
  <pre><code>gl_FragColor = lowp vec4(1);
  </code></pre>
  
  <p>Here's another example:</p>
  
  <pre><code>lowp float floaty = 1. * 2.;
  floaty = lowp 1. * lowp 2.;
  </code></pre>
  
  <p>And if you take some floats, and create a vector or matrix from them, will that vector or matrix take on the precision of the values you stuff it with, or will those values transform into another precision level?</p>
  
  <p>I think optimizing this would best answer the question:</p>
  
  <pre><code>dot(gl_LightSource[0].position.xyz, gl_NormalMatrix * gl_Normal)
  </code></pre>
  
  <p>I mean, does it need to go this far, if you want it as fast as possible, or is some of it useless?</p>
  
  <pre><code>lowp dot(lowp gl_LightSource[0].position.xyz, lowp gl_NormalMatrix * lowp gl_Normal)
  </code></pre>
  
  <p>I know you can define the default precision for float, and that this supposedly is used for vectors and matrices afterwards.  Assume for the purpose of education, that we had defined this previously:</p>
  
  <pre><code>precision highp float;
  </code></pre>