protected virtual void SetupUniforms(IEnumerable <Uniform> uniforms) { foreach (var uniform in uniforms) { var loc = GL.GetUniformLocation(PgmId, uniform.Name); var val = uniform.GetValue(); var type = val.GetType(); if (type == typeof(float)) { GL.Uniform1(loc, (float)val); } else if (type == typeof(double)) { GL.Uniform1(loc, (double)val); } else if (type == typeof(int)) { GL.Uniform1(loc, (int)val); } else if (type == typeof(uint)) { GL.Uniform1(loc, (uint)val); } else if (type == typeof(Vector2)) { var vec2 = (Vector2)val; GL.Uniform2(loc, vec2.X, vec2.Y); } else { throw new ArgumentException($"Unsupported uniform type: {type}"); } } }
public void SetVectorArrayParameter(string name, int index, Vector3 vector, string shader) { GL.UseProgram(_shaderHandleDictionary[shader]); int location = GL.GetUniformLocation(_shaderHandleDictionary[shader], name + "[" + index + "]"); if (location != -1) { GL.Uniform3(location, vector); } }
public void SetNumericParameter(string name, float number, string shader) { GL.UseProgram(_shaderHandleDictionary[shader]); int location = GL.GetUniformLocation(_shaderHandleDictionary[shader], name); if (location != -1) { GL.Uniform1(location, number); } }
public void SetMatrixParameter(string name, Matrix4 matrix, string shader) { GL.UseProgram(_shaderHandleDictionary[shader]); int location = GL.GetUniformLocation(_shaderHandleDictionary[shader], name); if (location != -1) { GL.UniformMatrix4(location, false, ref matrix); } }
public void SetNumericParameter(string name, float number) { foreach (var shaderHandle in _shaderHandleDictionary.Values) { GL.UseProgram(shaderHandle); int location = GL.GetUniformLocation(shaderHandle, name); if (location != -1) { GL.Uniform1(location, number); } } }
public void SetVectorArrayParameter(string name, int index, Vector3 vector) { foreach (var shaderHandle in _shaderHandleDictionary.Values) { GL.UseProgram(shaderHandle); int location = GL.GetUniformLocation(shaderHandle, name + "[" + index + "]"); if (location != -1) { GL.Uniform3(location, vector); } } }
public void SetMatrixParameter(string name, Matrix4 matrix) { foreach (var shaderHandle in _shaderHandleDictionary.Values) { GL.UseProgram(shaderHandle); int location = GL.GetUniformLocation(shaderHandle, name); if (location != -1) { GL.UniformMatrix4(location, false, ref matrix); } } }
public void UseTexture(string textureName, string shader, string uniformName) { if (!_textureHandleDictionary.ContainsKey(textureName)) { throw new ApplicationException("Texture has to be added before using"); } GL.UseProgram(_shaderHandleDictionary[shader]); var textureInfo = _textureHandleDictionary[textureName]; GL.ActiveTexture(TextureUnit.Texture0 + textureInfo.Unit); GL.BindTexture(TextureTarget.Texture2D, textureInfo.Handle); int location = GL.GetUniformLocation(_shaderHandleDictionary[shader], uniformName); if (location != -1) { int textureUnitIndex = textureInfo.Unit; GL.Uniform1(location, textureUnitIndex); } }