Index: Include/abgl.ab
===================================================================
--- Include/abgl.ab	(revision 77)
+++ Include/abgl.ab	(revision 78)
@@ -41,12 +41,12 @@
 
 Public /* operator */
-	Sub Operator = (vec As Vector2f)
+	Sub Operator = (ByRef vec As Vector2f)
 		This.X=vec.X
 		This.Y=vec.Y
 	End Sub
-	Function Operator + (vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+	Function Operator + (ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As Vector2f
 		Return Add(vec1,vec2)
 	End Function
-	Function Operator - (vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+	Function Operator - (ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As Vector2f
 		Return Substract(vec1,vec2)
 	End Function
@@ -55,9 +55,9 @@
 	End Function
 */
-	Function Operator * (vec As Vector2f, sca As GLfloat) As Vector2f
+	Function Operator * (ByRef vec As Vector2f, sca As GLfloat) As Vector2f
 		Dim ret As Vector2f(vec.X*sca,vec.Y*sca)
 		Return ret
 	End Function
-	Function Operator / (vec As Vector2f, sca As GLfloat) As Vector2f
+	Function Operator / (ByRef vec As Vector2f, sca As GLfloat) As Vector2f
 		Dim ret As Vector2f(vec.X/sca,vec.Y/sca)
 		Return ret
@@ -66,14 +66,14 @@
 
 Public /* method */
-	Function Add(vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+	Function Add(ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As Vector2f
 		Dim ret As Vector2f(vec1.X+vec2.X,vec1.Y+vec2.Y)
 		Return ret
 	End Function
-	Function Distance(vec1 As Vector2f, vec2 As Vector2f) As GLfloat
+	Function Distance(ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As GLfloat
 		Dim ret As Vector2f
 		ret=vec1-vec2
 		Return ret.Magnitude
 	End Function
-	Function Dot(vec1 As Vector2f, vec2 As Vector2f) As GLfloat
+	Function Dot(ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As GLfloat
 		Return vec1.X*vec2.X+vec1.Y*vec2.Y
 	End Function
@@ -89,5 +89,5 @@
 		Return ret
 	End Function
-	Function Substract(vec1 As Vector2f, vec2 As Vector2f) As Vector2f
+	Function Substract(ByRef vec1 As Vector2f, ByRef vec2 As Vector2f) As Vector2f
 		Dim ret As Vector2f(vec1.X-vec2.X,vec1.Y-vec2.Y)
 		Return ret
@@ -132,15 +132,15 @@
 
 Public /* operator */
-	Sub Operator = (vec As Vector2d)
+	Sub Operator = (ByRef vec As Vector2d)
 		This.X=vec.X
 		This.Y=vec.Y
 	End Sub
-	Function Operator + (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+	Function Operator + (ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As Vector2d
 		Return Add(vec1,vec2)
 	End Function
-	Function Operator - (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+	Function Operator - (ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As Vector2d
 		Return Substract(vec1,vec2)
 	End Function
-/*	Function Operator * (vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+/*	Function Operator * (ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As Vector2d
 		Return Dot(vec1,vec2)
 	End Function*/
@@ -157,14 +157,14 @@
 
 Public /* method */
-	Function Add(vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+	Function Add(ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As Vector2d
 		Dim ret As Vector2d(vec1.X+vec2.X,vec1.Y+vec2.Y)
 		Return ret
 	End Function
-	Function Distance(vec1 As Vector2d, vec2 As Vector2d) As GLdouble
+	Function Distance(ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As GLdouble
 		Dim ret As Vector2d
 		ret=vec1-vec2
 		Return ret.Magnitude
 	End Function
-	Function Dot(vec1 As Vector2d, vec2 As Vector2d) As GLdouble
+	Function Dot(ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As GLdouble
 		Return vec1.X*vec2.X+vec1.Y*vec2.Y
 	End Function
@@ -180,5 +180,5 @@
 		Return ret
 	End Function
-	Function Substract(vec1 As Vector2d, vec2 As Vector2d) As Vector2d
+	Function Substract(ByRef vec1 As Vector2d, ByRef vec2 As Vector2d) As Vector2d
 		Dim ret As Vector2d(vec1.X-vec2.X,vec1.Y-vec2.Y)
 		Return ret
@@ -469,5 +469,14 @@
 
 Public /* operator */
-
+	Function operator () As Color3f
+		Return This
+	End Function
+	Sub operator = (c As Color3f)
+		This.R=c.R
+		This.G=c.G
+		This.B=c.B
+	End Sub
+
+Public /* method */
 	' HSBを求める式はhttp://ofo.jp/osakana/cgtips/hsb.phtmlを参考にした
 	' Drawwing\Color.abをさらに参考にしました。
@@ -478,11 +487,11 @@
 		d = max - min
 		If rgb.g = max Then
-			Return ((rgb.b - rgb.r) As Double / d * 1.0*_System_PI/3.0 + 2.0*_System_PI/3.0) As GLfloat
+			Return ((rgb.b - rgb.r) As Double / d * 60.0 + 120.0) As GLfloat
 		ElseIf rgb.b = max Then
-			Return ((rgb.r - rgb.g) As Double / d * 1.0*_System_PI/3.0 + 4.0*_System_PI/3.0) As GLfloat
+			Return ((rgb.r - rgb.g) As Double / d * 60.0 + 240.0) As GLfloat
 		ElseIf rgb.g < rgb.b Then
-			Return ((rgb.g - rgb.b) As Double / d * 1.0*_System_PI/3.0 + 6.0*_System_PI/3.0) As GLfloat
-		Else
-			Return ((rgb.g - rgb.b) As Double / d * 1.0*_System_PI/3.0) As GLfloat
+			Return ((rgb.g - rgb.b) As Double / d * 60.0 + 360.0) As GLfloat
+		Else
+			Return ((rgb.g - rgb.b) As Double / d * 60.0) As GLfloat
 		EndIf
 	End Function
@@ -495,9 +504,55 @@
 	End Function
 
-	Function GetBrightness() As GLfloat
+	Function GetVolue() As GLfloat
 		Dim max As GLfloat
 		max = Math.Max(Math.Max(rgb.r, rgb.g), rgb.b)
 		Return max
 	End Function
+
+Public /* static method */
+	Static Function FromRGB(r As GLbyte, g As GLbyte, b As GLbyte) As Color3f
+		Dim ret As Color3f(r/255,g/255,b/255)
+		Return ret
+	End Function
+	Static Function FromCOLORREF(c As COLORREF) As Color3f
+		Dim ret As Color3f((c and &hff)/255,(c>>8 and &hff)/255,(c>>16 and &hff)/255)
+		Return ret
+	End Function
+	Static Function FromHSB(h As GLfloat, s As GLfloat, v As GLfloat) As Color3f
+		Dim r As GLfloat
+		Dim g As GLfloat
+		Dim b As GLfloat
+		If h<0 Then h+=360.0
+		Select Case (h\60)
+			Case 0
+				r=v
+				g=v*(1-s*(1-(h/60-h\60)))
+				b=v*(1-s)
+			Case 1
+				r=v*(1-s*(h/60-h\60))
+				g=v
+				b=v*(1-s)
+			Case 2
+				r=v*(1-s)
+				g=v
+				b=v*(1-s*(1-(h/60-h\60)))
+			Case 3
+				r=v*(1-s)
+				g=v*(1-s*(h/60-h\60))
+				b=v
+			Case 4
+				r=v*(1-s*(1-(h/60-h\60)))
+				g=v*(1-s)
+				b=v
+			Case 5
+				r=v
+				g=v*(1-s)
+				b=v*(1-s*(h/60-h\60))
+		End Select
+
+		Dim ret As Color3f(r,g,b)
+		Return ret
+	End Function
+
 Protected
 	rgb As RGB_FLOAT
@@ -1454,4 +1509,7 @@
 		glColor3f(red,green,blue)
 	End Sub
+	Sub Color(c As Color3f)
+		glColor3fv(c)
+	End Sub
 	Sub Color(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)
 		glColor4f(red,green,blue,alpha)
