protected int LocateUniform(string uniformName, bool softFail = true) { int location = 0; if (UniformLocations.TryGetValue(uniformName, out location)) { return(location); } location = GL.GetUniformLocation(Handle, uniformName); if (location == -1) { if (softFail) { LogWarn($"Could not locate {uniformName}"); } else { throw new InvalidOperationException($"ShaderProgram.LocateUniform ({Name}): Could not locate {uniformName}"); } } UniformLocations.Add(uniformName, location); return(location); }
private int GetUniformLocation(string name) { if (!UniformLocations.TryGetValue(name, out int location)) { location = GL.GetUniformLocation(Handle, name); UniformLocations.Add(name, location); } return(location); }
private void SetUniforms(UniformLocations uniformsLocations, UniformValues uniformsValues) { if (LocationValidation.Enabled(uniformsLocations.Location_iTime)) { Gl.Uniform1f <float>(uniformsLocations.Location_iTime, 1, (float)uniformsValues.Time); } if (LocationValidation.Enabled(uniformsLocations.Location_iResolution)) { Gl.Uniform2f(uniformsLocations.Location_iResolution, 1, uniformsValues.Resolution); } if (LocationValidation.Enabled(uniformsLocations.Location_iCursorPosition)) { Gl.Uniform3f(uniformsLocations.Location_iCursorPosition, 1, uniformsValues.CursorPosition); } if (LocationValidation.Enabled(uniformsLocations.Location_iCursorMovement)) { Gl.Uniform3f(uniformsLocations.Location_iCursorMovement, 1, uniformsValues.CursorMovement); } }