コード例 #1
0
        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;
        }