public void SetUniform(string name, float v1, float?v2 = null, float?v3 = null, float?v4 = null) { if (ActiveShaderProgram == null) { throw new InvalidOperationException("No shader program is loaded. Cannot set uniforms."); } int uniformLocation = Gl.GetUniformLocation(ActiveShaderProgram.ProgramId, name); if (uniformLocation < 0) { throw new KeyNotFoundException(string.Format("The specified uniform '{0}' cannot be found for program '{1}'.", name, ActiveShaderProgram.ProgramId)); } if (v4 != null && v4.HasValue) { Gl.Uniform4(uniformLocation, v1, v2.Value, v3.Value, v4.Value); return; } if (v3 != null && v3.HasValue) { Gl.Uniform3(uniformLocation, v1, v2.Value, v3.Value); return; } if (v2 != null && v2.HasValue) { Gl.Uniform2(uniformLocation, v1, v2.Value); return; } Gl.Uniform1(uniformLocation, v1); return; }