-"vec3 newlight_compute_quadratic( vec3 wnormal, vec3 halfview, \n"
-" vec3 light_pos, vec3 light_colour )\n"
+"float newlight_specular( vec3 wnormal, vec3 dir, vec3 halfview, float exponent )\n"
+"{\n"
+" vec3 specdir = reflect( -dir, wnormal );\n"
+" return pow(max(dot( halfview, specdir ), 0.0), exponent);\n"
+"}\n"
+"\n"
+"vec3 newlight_compute_quadratic( vec3 wnormal, float max_dist,\n"
+" vec3 light_colour, vec3 light_pos )\n"
+"{\n"
+" vec3 light_delta = light_pos-aWorldCo;\n"
+"\n"
+" float dist2 = dot(light_delta,light_delta);\n"
+"\n"
+" float quadratic = dist2*100.0;\n"
+" float attenuation = 1.0f/( 1.0f + quadratic );\n"
+" attenuation *= max( dot( normalize(light_delta), wnormal ), 0.0 );\n"
+"\n"
+" float falloff = max( 0.0, 1.0-(dist2*max_dist) );\n"
+" return light_colour * attenuation * falloff;\n"
+"}\n"
+"\n"
+"vec3 newlight_compute_spot( vec3 wnormal, vec3 halfview, \n"
+" vec3 light_colour, vec3 light_pos,\n"
+" vec4 light_dir )\n"