public void TestUniform3i() { if (!HasVersion(2, 0) && !HasEsVersion(2, 0) && !IsGlExtensionSupported("GL_ARB_shader_objects")) { Assert.Inconclusive("required features not implemented"); } using (Device device = new Device()) using (new GLContext(device)) { uint program = CreateProgramUniform3i(); try { Vertex3i uniformStruct; int[] uniformValue; int uniformLoc = Gl.GetUniformLocation(program, "uVec"); if (uniformLoc < 0) { throw new InvalidOperationException("no uniform variable"); } // glGetUniformiv uniformValue = Array3(1); Gl.GetUniform(program, uniformLoc, uniformValue); CollectionAssert.AreEqual(Array3(0), uniformValue); // glGetUniformiv (ref) uniformStruct = new Vertex3i(1); Gl.GetUniformi(program, uniformLoc, ref uniformStruct); Assert.AreEqual(Vertex3i.Zero, uniformStruct); // glUniform3i uniformValue = Array3(0); Gl.Uniform3(uniformLoc, Array3(1)); Gl.GetUniform(program, uniformLoc, uniformValue); CollectionAssert.AreEqual(Array3(1), uniformValue); // glUniform3iv uniformValue = Array3(0); Gl.Uniform3(uniformLoc, Array3(9)); Gl.GetUniform(program, uniformLoc, uniformValue); CollectionAssert.AreEqual(Array3(9), uniformValue); // glUniform3iv (ref) uniformValue = Array3(0); uniformStruct = new Vertex3i(5); Gl.Uniform3i(uniformLoc, 1, ref uniformStruct); Gl.GetUniform(program, uniformLoc, uniformValue); CollectionAssert.AreEqual(Array3(5), uniformValue); } finally { Gl.DeleteProgram(program); } } }
void IShaderUniformContainer.SetUniform(GraphicsContext ctx, string uniformName, Vertex3i v) { throw new NotImplementedException(); }
/// <summary> /// Set uniform state variable (ivec3 variable or bvec3 variable). /// </summary> /// <param name="ctx"> /// A <see cref="GraphicsContext"/> used for operations. /// </param> /// <param name="uniformName"> /// A <see cref="String"/> that specify the variable name in the shader source. /// </param> /// <param name="v"> /// A <see cref="Vertex3i"/> holding the uniform variabile data (first component). /// </param> public void SetUniform(GraphicsContext ctx, string uniformName, Vertex3i v) { SetUniform(ctx, uniformName, v.x, v.y, v.z); }