diff --git a/Source/OpenTK/Graphics/Color4.cs b/Source/OpenTK/Graphics/Color4.cs
new file mode 100644
index 00000000..246acf95
--- /dev/null
+++ b/Source/OpenTK/Graphics/Color4.cs
@@ -0,0 +1,149 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace OpenTK.Graphics
+{
+ ///
+ /// Represents a color with 4 floating-point components (R, G, B, A).
+ ///
+ public struct Color4 : IEquatable
+ {
+ #region Fields
+
+ ///
+ /// The red component of this Color4 structure.
+ ///
+ public readonly float R;
+
+ ///
+ /// The green component of this Color4 structure.
+ ///
+ public readonly float G;
+
+ ///
+ /// The blue component of this Color4 structure.
+ ///
+ public readonly float B;
+
+ ///
+ /// The alpha component of this Color4 structure.
+ ///
+ public readonly float A;
+
+ #endregion
+
+ #region Constructors
+
+ ///
+ /// Constructs a new Color4 structure from the specified components.
+ ///
+ /// The red component of the new Color4 structure.
+ /// The green component of the new Color4 structure.
+ /// The blue component of the new Color4 structure.
+ /// The alpha component of the new Color4 structure.
+ public Color4(float r, float g, float b, float a)
+ {
+ R = r;
+ G = g;
+ B = b;
+ A = a;
+ }
+
+ ///
+ /// Constructs a new Color4 structure from the specified System.Drawing.Color.
+ ///
+ /// The System.Drawing.Color containing the component values.
+ public Color4(Color color)
+ {
+ R = color.R / (float)Byte.MaxValue;
+ G = color.G / (float)Byte.MaxValue;
+ B = color.B / (float)Byte.MaxValue;
+ A = color.A / (float)Byte.MaxValue;
+ }
+
+ #endregion
+
+ #region Conversions
+
+ ///
+ /// Converts the specified System.Drawing.Color to a Color4 structure.
+ ///
+ /// The System.Drawing.Color to convert.
+ /// A new Color4 structure containing the converted components.
+ public static implicit operator Color4(Color color)
+ {
+ return new Color4(color);
+ }
+
+ ///
+ /// Converts the specified Color4 to a System.Drawing.Color structure.
+ ///
+ /// The Color4 to convert.
+ /// A new System.Drawing.Color structure containing the converted components.
+ public static explicit operator Color(Color4 color)
+ {
+ return Color.FromArgb(
+ (int)(color.A * Byte.MaxValue),
+ (int)(color.R * Byte.MaxValue),
+ (int)(color.G * Byte.MaxValue),
+ (int)(color.B * Byte.MaxValue));
+ }
+
+ #endregion
+
+ #region IEquatable Members
+
+ ///
+ /// Compares whether this Color4 structure is equal to the specified Color4.
+ ///
+ /// The Color4 structure to compare to.
+ /// True if both Color4 structures contain the same components; false otherwise.
+ public bool Equals(Color4 other)
+ {
+ return
+ this.R == other.R &&
+ this.G == other.G &&
+ this.B == other.B &&
+ this.A == other.A;
+ }
+
+ #endregion
+
+ #region Overrides
+
+ ///
+ /// Compares whether this Color4 structure is equal to the specified object.
+ ///
+ /// An object to compare to.
+ /// True obj is a Color4 structure with the same components as this Color4; false otherwise.
+ public override bool Equals(object obj)
+ {
+ if (!(obj is Color4))
+ return false;
+
+ return Equals((Color4)obj);
+ }
+
+ ///
+ /// Calculates the hash code for this Color4 structure.
+ ///
+ /// A System.Int32 containing the hashcode of this Color4 structure.
+ public override int GetHashCode()
+ {
+ return ((Color)this).GetHashCode();
+ }
+
+ ///
+ /// Creates a System.String that describes this Color4 structure.
+ ///
+ /// A System.String that describes this Color4 structure.
+ public override string ToString()
+ {
+ return String.Format("{{R, G, B, A = {0}, {1}, {2}, {3}}}", R.ToString(), G.ToString(), B.ToString(), A.ToString());
+ }
+
+ #endregion
+ }
+}
diff --git a/Source/OpenTK/Graphics/GL/GLHelper.cs b/Source/OpenTK/Graphics/GL/GLHelper.cs
index 3ddb68bd..56a6acd6 100644
--- a/Source/OpenTK/Graphics/GL/GLHelper.cs
+++ b/Source/OpenTK/Graphics/GL/GLHelper.cs
@@ -54,7 +54,7 @@ namespace OpenTK.Graphics
///
///
///
- ///
+ ///
///
///
public static partial class GL
@@ -659,6 +659,34 @@ namespace OpenTK.Graphics
#endregion
+ #region public static void Material() overloads
+
+ public static void Materialv(MaterialFace face, MaterialParameter pname, Vector4 @params)
+ {
+ Materialv(face, pname, ref @params.X);
+ }
+
+ public static void Materialv(MaterialFace face, MaterialParameter pname, Color4 @params)
+ {
+ unsafe { GL.Materialv(face, pname, (float*)&@params); }
+ }
+
+ #endregion
+
+ #region public static void Light() overloads
+
+ public static void Lightv(LightName name, LightParameter pname, Vector4 @params)
+ {
+ GL.Lightv(name, pname, ref @params.X);
+ }
+
+ public static void Lightv(LightName name, LightParameter pname, Color4 @params)
+ {
+ unsafe { GL.Lightv(name, pname, (float*)&@params); }
+ }
+
+ #endregion
+
#region --- Overloads for OpenTK.Math ---
public static void Normal3(Vector3 normal)
@@ -770,14 +798,6 @@ namespace OpenTK.Graphics
}
}
- public static void Materialv(MaterialFace face, MaterialParameter pname, Vector4 @params)
- {
- unsafe
- {
- Materialv(face, pname, &@params.X);
- }
- }
-
#endregion
#region public static void ShaderSource(Int32 shader, System.String @string)