Index: /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Context.ab
===================================================================
--- /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Context.ab	(revision 690)
+++ /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Context.ab	(revision 690)
@@ -0,0 +1,390 @@
+#require <gl\gl.sbp>
+#require <gl\glu.sbp>
+
+/*
+Const PFD_TYPE_RGBA = 0
+Const PFD_TYPE_COLORINDEX = 1
+
+Const PFD_MAIN_PLANE = 0
+Const PFD_OVERLAY_PLANE = 1
+Const PFD_UNDERLAY_PLANE = (-1)
+
+Const PFD_DOUBLEBUFFER = &H00000001
+Const PFD_STEREO = &H00000002
+Const PFD_DRAW_TO_WINDOW = &H00000004
+Const PFD_DRAW_TO_BITMAP = &H00000008
+Const PFD_SUPPORT_GDI = &H00000010
+Const PFD_SUPPORT_OPENGL = &H00000020
+Const PFD_GENERIC_FORMAT = &H00000040
+Const PFD_NEED_PALETTE = &H00000080
+Const PFD_NEED_SYSTEM_PALETTE = &H00000100
+Const PFD_SWAP_EXCHANGE = &H00000200
+Const PFD_SWAP_COPY = &H00000400
+Const PFD_SWAP_LAYER_BUFFERS = &H00000800
+Const PFD_GENERIC_ACCELERATED = &H00001000
+Const PFD_SUPPORT_DIRECTDRAW = &H00002000
+
+Const PFD_DEPTH_DONTCARE = &H20000000
+Const PFD_DOUBLEBUFFER_DONTCARE = &H40000000
+Const PFD_STEREO_DONTCARE = &H80000000
+
+Type PIXELFORMATDESCRIPTOR
+	nSize As Word
+	nVersion As Word
+	dwFlags As DWord
+	iPixelType As Byte
+	cColorBits As Byte
+	cRedBits As Byte
+	cRedShift As Byte
+	cGreenBits As Byte
+	cGreenShift As Byte
+	cBlueBits As Byte
+	cBlueShift As Byte
+	cAlphaBits As Byte
+	cAlphaShift As Byte
+	cAccumBits As Byte
+	cAccumRedBits As Byte
+	cAccumGreenBits As Byte
+	cAccumBlueBits As Byte
+	cAccumAlphaBits As Byte
+	cDepthBits As Byte
+	cStencilBits As Byte
+	cAuxBuffers As Byte
+	iLayerType As Byte
+	bReserved As Byte
+	dwLayerMask As DWord
+	dwVisibleMask As DWord
+	dwDamageMask As DWord
+End Type
+*/
+
+Namespace ActiveBasic
+Namespace OpenGL
+
+	Class AlphaTestManager
+	Public
+		Sub AlphaFunction(func As DWord)
+			glAlphaFunc(func,ReferenceAlpha())
+		End Sub
+		Function AlphaFunction() As DWord
+			glGetIntegerv(GL_ALPHA_TEST_FUNC,VarPtr(AlphaFunction))
+		End Function
+		Sub ReferenceAlpha(ref As Single)
+			glAlphaFunc(AlphaFunction,ref)
+		End Sub
+		Function ReferenceAlpha() As Single
+			glGetFloatv(GL_ALPHA_TEST_REF,VarPtr(ReferenceAlpha))
+		End Function
+	End Class
+
+	Class BlendManager
+	Public
+		Sub Destination(dest As DWord)
+			glBlendFunc(Source(),dest)
+		End Sub
+		Function Destination() As DWord
+			glGetIntegerv(GL_BLEND_DST,VarPtr(Destination))
+		End Function
+		Sub Source(src As DWord)
+			glBlendFunc(src,Destination())
+		End Sub
+		Function Source() As DWord
+			glGetIntegerv(GL_BLEND_SRC,VarPtr(Source))
+		End Function
+	End Class
+
+	Class ClientStateManager
+	Public
+		Sub ColorArrayEnable(enable As Boolean)
+			setEnable(GL_COLOR_ARRAY,enable)
+		End Sub
+		Function ColorArrayEnable() As Boolean
+			Return getEnable(GL_COLOR_ARRAY)
+		End Function
+		Sub EdgeFlagArrayEnable(enable As Boolean)
+			setEnable(GL_EDGE_FLAG_ARRAY,enable)
+		End Sub
+		Function EdgeFlagArrayEnable() As Boolean
+			Return getEnable(GL_EDGE_FLAG_ARRAY)
+		End Function
+		Sub IndexArrayEnable(enable As Boolean)
+			setEnable(GL_INDEX_ARRAY,enable)
+		End Sub
+		Function IndexArrayEnable() As Boolean
+			Return getEnable(GL_INDEX_ARRAY)
+		End Function
+		Sub NormalArrayEnable(enable As Boolean)
+			setEnable(GL_NORMAL_ARRAY,enable)
+		End Sub
+		Function NormalArrayEnable() As Boolean
+			Return getEnable(GL_NORMAL_ARRAY)
+		End Function
+		Sub TextureCoordArrayEnable(enable As Boolean)
+			setEnable(GL_TEXTURE_COORD_ARRAY,enable)
+		End Sub
+		Function TextureCoordArrayEnable() As Boolean
+			Return getEnable(GL_TEXTURE_COORD_ARRAY)
+		End Function
+		Sub VertexArrayEnable(enable As Boolean)
+			setEnable(GL_VERTEX_ARRAY,enable)
+		End Sub
+		Function VertexArrayEnable() As Boolean
+			Return getEnable(GL_VERTEX_ARRAY)
+		End Function
+
+	Private
+		Sub setEnable(cap As DWord, enable As Boolean)
+			If enable Then
+				glEnable(cap)
+			Else
+				glDisable(cap)
+			End If
+		End Sub
+		Function getEnable(cap As DWord) As Boolean
+			Dim b As Byte
+			glGetBooleanv(cap,VarPtr(b))
+			Return b
+		End Function
+	End Class
+
+	Class FogManager
+	Public
+		Sub Density(dens As Single)
+			glFogf(GL_FOG_DENSITY,dens)
+		End Sub
+		Function Density() As Single
+			glGetFloatv(GL_FOG_DENSITY,VarPtr(Density))
+		End Function
+		Sub End(end As Single)
+			glFogf(GL_FOG_END,end)
+		End Sub
+		Function End() As Single
+			glGetFloatv(GL_FOG_END,VarPtr(End))
+		End Function
+		Sub Mode(mode As DWord)
+			glFogi(GL_FOG_MODE,mode)
+		End Sub
+		Function Mode() As DWord
+			glGetIntegerv(GL_FOG_MODE,VarPtr(Mode))
+		End Function
+		Sub Start(start As Single)
+			glFogf(GL_FOG_START,start)
+		End Sub
+		Function Start() As Single
+			glGetFloatv(GL_FOG_START,VarPtr(Start))
+		End Function
+
+	Public
+		Sub FogColor(red As Single, green As Single, blue As Single, alpha As Single)
+			Dim c[3] As Single
+			glFogfv(GL_FOG_COLOR,c)
+		End Sub
+
+	Private
+	End Class
+
+	Class ServerStateManager
+	Public
+		Sub AlphaTestEnable(enable As Boolean)
+			setEnable(GL_ALPHA_TEST,enable)
+		End Sub
+		Function AlphaTestEnable() As Boolean
+			Return getEnable(GL_ALPHA_TEST)
+		End Function
+		Sub AutoNormalEnable(enable As Boolean)
+			setEnable(GL_AUTO_NORMAL,enable)
+		End Sub
+		Function AutoNormalEnable() As Boolean
+			Return getEnable(GL_AUTO_NORMAL)
+		End Function
+		Sub BlendEnable(enable As Boolean)
+			setEnable(GL_BLEND,enable)
+		End Sub
+		Function BlendEnable() As Boolean
+			Return getEnable(GL_BLEND)
+		End Function
+		Sub CullFaceEnable(enable As Boolean)
+			setEnable(GL_CULL_FACE,enable)
+		End Sub
+		Function CullFaceEnable() As Boolean
+			Return getEnable(GL_CULL_FACE)
+		End Function
+		Sub DepthTestEnable(enable As Boolean)
+			setEnable(GL_DEPTH_TEST,enable)
+		End Sub
+		Function DepthTestEnable() As Boolean
+			Return getEnable(GL_DEPTH_TEST)
+		End Function
+		Sub FogEnable(enable As Boolean)
+			setEnable(GL_FOG,enable)
+		End Sub
+		Function FogEnable() As Boolean
+			Return getEnable(GL_FOG)
+		End Function
+		Sub LightingEnable(enable As Boolean)
+			setEnable(GL_LIGHTING,enable)
+		End Sub
+		Function LightingEnable() As Boolean
+			Return getEnable(GL_LIGHTING)
+		End Function
+		Sub LineSmoothEnable(enable As Boolean)
+			setEnable(GL_LINE_SMOOTH,enable)
+		End Sub
+		Function LineSmoothEnable() As Boolean
+			Return getEnable(GL_LINE_SMOOTH)
+		End Function
+		Sub LineStippleEnable(enable As Boolean)
+			setEnable(GL_LINE_STIPPLE,enable)
+		End Sub
+		Function LineStippleEnable() As Boolean
+			Return getEnable(GL_LINE_STIPPLE)
+		End Function
+		Sub NormalizeEnable(enable As Boolean)
+			setEnable(GL_NORMALIZE,enable)
+		End Sub
+		Function NormalizeEnable() As Boolean
+			Return getEnable(GL_NORMALIZE)
+		End Function
+		Sub PointSmoothEnable(enable As Boolean)
+			setEnable(GL_POINT_SMOOTH,enable)
+		End Sub
+		Function PointSmoothEnable() As Boolean
+			Return getEnable(GL_POINT_SMOOTH)
+		End Function
+		Sub PolygonSmoothEnable(enable As Boolean)
+			setEnable(GL_POLYGON_SMOOTH,enable)
+		End Sub
+		Function PolygonSmoothEnable() As Boolean
+			Return getEnable(GL_POLYGON_SMOOTH)
+		End Function
+		Sub StencilTestEnable(enable As Boolean)
+			setEnable(GL_STENCIL_TEST,enable)
+		End Sub
+		Function StencilTestEnable() As Boolean
+			Return getEnable(GL_STENCIL_TEST)
+		End Function
+		Sub Texture1DEnable(enable As Boolean)
+			setEnable(GL_TEXTURE_1D,enable)
+		End Sub
+		Function Texture1DEnable() As Boolean
+			Return getEnable(GL_TEXTURE_1D)
+		End Function
+		Sub Texture2DEnable(enable As Boolean)
+			setEnable(GL_TEXTURE_2D,enable)
+		End Sub
+		Function Texture2DEnable() As Boolean
+			Return getEnable(GL_TEXTURE_2D)
+		End Function
+
+	Private
+		Sub setEnable(cap As DWord, enable As Boolean)
+			If enable Then
+				glEnable(cap)
+			Else
+				glDisable(cap)
+			End If
+		End Sub
+		Function getEnable(cap As DWord) As Boolean
+			Dim b As Byte
+			glGetBooleanv(cap,VarPtr(b))
+			Return b
+		End Function
+	End Class
+
+
+	Class Context
+	Public /* constructor & destructor */
+		Sub Context(hdc As HDC)
+			Dim pfd = [
+			SizeOf(PIXELFORMATDESCRIPTOR),  ' size of this pfd
+			1,                              ' version number
+			PFD_DRAW_TO_WINDOW or_            ' support window
+			  PFD_SUPPORT_OPENGL or_          ' support OpenGL
+			  PFD_DOUBLEBUFFER,             ' double buffered
+			PFD_TYPE_RGBA,                  ' RGBA type
+			32,                             ' 24-bit color depth
+			0, 0, 0, 0, 0, 0,               ' color bits ignored
+			8,                              ' 8-bit alpha buffer
+			0,                              ' shift bit ignored
+			0,                              ' no accumulation buffer
+			0, 0, 0, 0,                     ' accum bits ignored
+			32,                             ' 32-bit z-buffer
+			8,                              ' 8-bit stencil buffer
+			0,                              ' no auxiliary buffer
+			PFD_MAIN_PLANE,                 ' main layer
+			0,                              ' reserved
+			0, 0, 0
+			] As PIXELFORMATDESCRIPTOR
+
+
+			Dim pfmt As Long
+
+			pfmt=ChoosePixelFormat(hdc, pfd)
+			If pfmt = 0 Then
+				OutputDebugString(Ex"ChoosePixelFormat failed\n")
+				'Throw 
+			End If
+
+			If SetPixelFormat(hdc, pfmt, pfd) = FALSE Then
+				OutputDebugString(Ex"SetPixelFormat failed\n")
+				'MessageBox("SetPixelFormat failed");
+				'Throw 
+			End If
+
+			hrc = wglCreateContext(hdc)
+			wglMakeCurrent(hdc, hrc)
+
+		End Sub
+		Sub ~Context()
+			wglMakeCurrent(NULL, NULL)
+			wglDeleteContext(hrc)
+		End Sub
+
+	Public /* property */
+		Function AlphaTest() As AlphaTestManager
+			Return New AlphaTestManager
+		End Function
+		Function ClientState() As ClientStateManager
+			Return New ClientStateManager
+		End Function
+		Function Fog() As FogManager
+			Return New FogManager
+		End Function
+		Function ServerState() As ServerStateManager
+			Return New ServerStateManager
+		End Function
+
+	Public /* method */
+		Sub Clear(mask As DWord)
+			glClear(mask)
+		End Sub
+		Sub ClearAccum(red As Single, green As Single, blue As Single, alpha As Single)
+			glClearAccum(red,green,blue,alpha)
+		End Sub
+		Sub ClearColor(red As Single, green As Single, blue As Single, alpha As Single)
+			glClearColor(red,green,blue,alpha)
+		End Sub
+		Sub ClearDepth(depth As Single)
+			glClearDepth(depth)
+		End Sub
+		Sub ClearIndex(index As Single)
+			glClearIndex(index)
+		End Sub
+		Sub ClearStencil()
+		End Sub
+		Sub Begin(mode As DWord)
+			glBegin(mode)
+		End Sub
+		Sub End()
+			glEnd()
+		End Sub
+
+		Sub SwapBuffer()
+			SwapBuffers(wglGetCurrentDC())
+		End Sub
+	Private
+		hrc As HGLRC
+	End Class
+
+End Namespace
+End Namespace
Index: /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/DisplayList.ab
===================================================================
--- /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/DisplayList.ab	(revision 690)
+++ /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/DisplayList.ab	(revision 690)
@@ -0,0 +1,41 @@
+#require <gl/gl.sbp>
+
+Namespace ActiveBasic
+Namespace OpenGL
+
+	'ディスプレイリストを扱うためのクラス
+	Class DisplayList
+	Public
+		Sub DisplayList(size As Long)
+			This.size = size
+			list = glGenLists(size)
+		End Sub
+		Sub ~DisplayList()
+			glDeleteLists(list, size)
+		End Sub
+
+	Public
+		Sub Call()
+			Call(0)
+		End Sub
+		Sub Call(index As Long)
+			If index < size Then
+				glCallList(list+index)
+			End If
+		End Sub
+		Sub EndList()
+			glEndList()
+		End Sub
+		Sub NewList(index As Long)
+			glNewList(list+index,GL_COMPILE)
+		End Sub
+		Sub NewListExecute(index As Long)
+			glNewList(list+index,GL_COMPILE_AND_EXECUTE)
+		End Sub
+	Private
+		list As DWord
+		size As Long
+	End Class
+
+End Namespace
+End Namespace
Index: /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Light.ab
===================================================================
--- /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Light.ab	(revision 690)
+++ /trunk/ab5.0/ablib/src/Classes/ActiveBasic/OpenGL/Light.ab	(revision 690)
@@ -0,0 +1,65 @@
+#require <gl/gl.sbp>
+Namespace ActiveBasic
+Namespace OpenGL
+
+	'光源を扱うためのクラス
+	Class Light
+	Public
+		Sub Light(num As DWord)
+			number = num
+		End Sub
+
+	Public
+		Sub Ambient(red As Single, green As Single, blue As Single, alpha As Single)
+			Dim color[3] As Single
+			color[0]=red
+			color[1]=green
+			color[2]=blue
+			color[3]=alpha
+			glLightfv(GL_LIGHT0+number,GL_AMBIENT,color)
+		End Sub
+		Sub ConstantAttenuation(rate As Single)
+			glLightf(GL_LIGHT0+number,GL_CONSTANT_ATTENUATION,rate)
+		End Sub
+		Sub SpotCutOff(angle As Single)
+			glLightf(GL_LIGHT0+number,GL_SPOT_CUTOFF,angle)
+		End Sub
+		Sub Diffuse(red As Single, green As Single, blue As Single, alpha As Single)
+			Dim color[3] As Single
+			color[0]=red
+			color[1]=green
+			color[2]=blue
+			color[3]=alpha
+			glLightfv(GL_LIGHT0+number,GL_DIFFUSE,color)
+		End Sub
+		Sub SpotDirection(x As Single, y As Single, z As Single)
+			Dim dir[2] As Single
+			dir[0]=x
+			dir[1]=y
+			dir[2]=z
+			glLightfv(GL_LIGHT0+number,GL_SPOT_DIRECTION,dir)
+		End Sub
+		Sub SpotExponent(exp As Single)
+			glLightf(GL_LIGHT0+number,GL_SPOT_EXPONENT,exp)
+		End Sub
+		Sub LinearAttenuation(rate As Single)
+			glLightf(GL_LIGHT0+number,GL_LINEAR_ATTENUATION,rate)
+		End Sub
+		Sub QuadraticAttenuation(rate As Single)
+			glLightf(GL_LIGHT0+number,GL_QUADRATIC_ATTENUATION,rate)
+		End Sub
+		Sub Specular(red As Single, green As Single, blue As Single, alpha As Single)
+			Dim color[3] As Single
+			color[0]=red
+			color[1]=green
+			color[2]=blue
+			color[3]=alpha
+			glLightfv(GL_LIGHT0+number,GL_SPECULAR,color)
+		End Sub
+		
+	Private
+		number As DWord
+	End Class
+
+End Namespace
+End Namespace
