1  #ifndef _INC_ABGL


2  #define _INC_ABGL


3 


4  #include <GL/gl.sbp>


5  #include <GL/glu.sbp>


6 


7  Type XYZ_FLOAT


8  x As GLfloat


9  y As GLfloat


10  z As GLfloat


11  End Type


12 


13  Type XYZ_DOUBLE


14  x As GLdouble


15  y As GLdouble


16  z As GLdouble


17  End Type


18 


19  Class Vector3f


20  Public /* constructor */


21  Sub Vector3f(x As GLfloat, y As GLfloat, z As GLfloat)


22  xyz.x=x


23  xyz.y=y


24  xyz.z=z


25  End Sub


26 


27  Public /* destructor */


28  Sub ~Vector3f()


29  End Sub


30 


31  Public /* property */


32  Function X() As GLfloat


33  Return xyz.x


34  End Function


35  Function Y() As GLfloat


36  Return xyz.y


37  End Function


38  Function Z() As GLfloat


39  Return xyz.z


40  End Function


41  Sub X(x As GLfloat)


42  xyz.x=x


43  End Sub


44  Sub Y(y As GLfloat)


45  xyz.y=y


46  End Sub


47  Sub Z(z As GLfloat)


48  xyz.z=z


49  End Sub


50 


51  Protected


52  xyz As XYZ_FLOAT


53  End Class


54 


55  Class Vector3d


56  Public /* constructor */


57  Sub Vector3d(x As GLdouble, y As GLdouble, z As GLdouble)


58  xyz.x=x


59  xyz.y=y


60  xyz.z=z


61  End Sub


62 


63  Public /* destructor */


64  Sub ~Vector3d()


65  End Sub


66 


67  Public /* property */


68  Function X() As GLdouble


69  Return xyz.x


70  End Function


71  Function Y() As GLdouble


72  Return xyz.y


73  End Function


74  Function Z() As GLdouble


75  Return xyz.z


76  End Function


77  Sub X(x As GLdouble)


78  xyz.x=x


79  End Sub


80  Sub Y(y As GLdouble)


81  xyz.y=y


82  End Sub


83  Sub Z(z As GLdouble)


84  xyz.z=z


85  End Sub


86 


87  Protected


88  xyz As XYZ_DOUBLE


89  End Class


90 


91  Type RGB_FLOAT


92  r As GLfloat


93  g As GLfloat


94  b As GLfloat


95  End Type


96 


97  Type RGB_DOUBLE


98  r As GLdouble


99  g As GLdouble


100  b As GLdouble


101  End Type


102 


103  Class Color3f


104  Public /* constructor */


105  Sub Color3f(r As GLfloat, g As GLfloat, b As GLfloat)


106  rgb.r = r


107  rgb.g = g


108  rgb.b = b


109  End Sub


110 


111  Public /* destructor */


112  Sub ~Color3f()


113  End Sub


114 


115  Public /* property */


116  Function R() As GLfloat


117  Return rgb.r


118  End Function


119  Function G() As GLfloat


120  Return rgb.g


121  End Function


122  Function B() As GLfloat


123  Return rgb.r


124  End Function


125  Sub R(r As GLfloat)


126  rgb.r = r


127  End Sub


128  Sub G(g As GLfloat)


129  rgb.g = g


130  End Sub


131  Sub B(b As GLfloat)


132  rgb.b = b


133  End Sub


134 


135  Protected


136  rgb As RGB_FLOAT


137  End Class


138 


139  Class Color3d


140  Public /* constructor */


141  Sub Color3d(r As GLdouble, g As GLdouble, b As GLdouble)


142  rgb.r = r


143  rgb.g = g


144  rgb.b = b


145  End Sub


146 


147  Public /* destructor */


148  Sub ~Color3d()


149  End Sub


150 


151  Public /* property */


152  Function R() As GLdouble


153  Return rgb.r


154  End Function


155  Function G() As GLdouble


156  Return rgb.g


157  End Function


158  Function B() As GLdouble


159  Return rgb.r


160  End Function


161  Sub R(r As GLdouble)


162  rgb.r = r


163  End Sub


164  Sub G(g As GLdouble)


165  rgb.g = g


166  End Sub


167  Sub B(b As GLdouble)


168  rgb.b = b


169  End Sub


170 


171  Protected


172  rgb As RGB_DOUBLE


173  End Class


174 


175  Type RGBA_FLOAT


176  r As GLfloat


177  g As GLfloat


178  b As GLfloat


179  a As GLfloat


180  End Type


181 


182  Type RGBA_DOUBLE


183  r As GLdouble


184  g As GLdouble


185  b As GLdouble


186  a As GLdouble


187  End Type


188 


189  Class Color4f


190  Public /* constructor */


191  Sub Color4f(r As GLfloat, g As GLfloat, b As GLfloat, a As GLfloat)


192  rgba.r = r


193  rgba.g = g


194  rgba.b = b


195  rgba.a = a


196  End Sub


197 


198  Public /* destructor */


199  Sub ~Color4f()


200  End Sub


201 


202  Public /* property */


203  Function R() As GLfloat


204  Return rgba.r


205  End Function


206  Function G() As GLfloat


207  Return rgba.g


208  End Function


209  Function B() As GLfloat


210  Return rgba.r


211  End Function


212  Function A() As GLfloat


213  Return rgba.a


214  End Function


215  Sub R(r As GLfloat)


216  rgba.r = r


217  End Sub


218  Sub G(g As GLfloat)


219  rgba.g = g


220  End Sub


221  Sub B(b As GLfloat)


222  rgba.b = b


223  End Sub


224  Sub A(a As GLfloat)


225  rgba.a = a


226  End Sub


227 


228  Protected


229  rgba As RGBA_FLOAT


230  End Class


231 


232  Class Color4d


233 


234  Public /* constructor */


235  Sub Color4d(r As GLdouble, g As GLdouble, b As GLdouble, a As GLdouble)


236  rgba.r = r


237  rgba.g = g


238  rgba.b = b


239  rgba.a = a


240  End Sub


241 


242  Public /* destructor */


243  Sub ~Color4d()


244  End Sub


245 


246  Public /* property */


247  Function R() As GLdouble


248  Return rgba.r


249  End Function


250  Function G() As GLdouble


251  Return rgba.g


252  End Function


253  Function B() As GLdouble


254  Return rgba.r


255  End Function


256  Function A() As GLdouble


257  Return rgba.a


258  End Function


259  Sub R(r As GLdouble)


260  rgba.r = r


261  End Sub


262  Sub G(g As GLdouble)


263  rgba.g = g


264  End Sub


265  Sub B(b As GLdouble)


266  rgba.b = b


267  End Sub


268  Sub A(a As GLdouble)


269  rgba.a = a


270  End Sub


271 


272  Protected


273  rgba As RGBA_DOUBLE


274  End Class


275 


276 


277 


278  Class Light


279  Private


280  Number As GLenum


281 


282  Public


283  Sub Enabled(enabled As GLboolean)


284  Dim lighting As GLboolean


285  glGetBooleanv(Number,VarPtr(lighting))


286  Return lighting


287  End Sub


288  Function Enable() As GLboolean


289  If enabled Then


290  glEnable(Number)


291  Else


292  glDisable(Number)


293  End If


294  End Function


295 


296  Public /* constructor */


297  Sub Light(num As GLenum)


298  Number=num


299  End Sub


300 


301  Public


302  Sub SetAmbient(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


303  Dim amb[3] As GLfloat


304  amb[0]=red


305  amb[1]=green


306  amb[2]=blue


307  amb[3]=alpha


308  glLightfv(Number,GL_AMBIENT,amb)


309  End Sub


310  Sub SetAmbient(color As Color4f)


311  Dim amb[3] As GLfloat


312  amb[0]=color.R


313  amb[1]=color.G


314  amb[2]=color.B


315  amb[3]=color.A


316  glLightfv(Number,GL_AMBIENT,amb)


317  End Sub


318  Sub SetAmbient(amb As *GLfloat)


319  glLightfv(Number,GL_AMBIENT,amb)


320  End Sub


321 


322  Sub SetDiffuse(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


323  Dim dif[3] As GLfloat


324  dif[0]=red


325  dif[1]=green


326  dif[2]=blue


327  dif[3]=alpha


328  glLightfv(Number,GL_DIFFUSE,dif)


329  End Sub


330  Sub SetDiffuse(color As Color4f)


331  Dim dif[3] As GLfloat


332  amb[0]=color.R


333  amb[1]=color.G


334  amb[2]=color.B


335  amb[3]=color.A


336  glLightfv(Number,GL_DIFFUSE,dif)


337  End Sub


338  Sub SetDiffuse(dif As *GLfloat)


339  glLightfv(Number,GL_DIFFUSE,dif)


340  End Sub


341 


342  Sub SetSpecular(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


343  Dim spc[3] As GLfloat


344  spc[0]=red


345  spc[1]=green


346  spc[2]=blue


347  spc[3]=alpha


348  glLightfv(Number,GL_SPECULAR,spc)


349  End Sub


350  Sub SetSpecular(color As Color4f)


351  Dim spc[3] As GLfloat


352  amb[0]=color.R


353  amb[1]=color.G


354  amb[2]=color.B


355  amb[3]=color.A


356  glLightfv(Number,GL_SPECULAR,spc)


357  End Sub


358  Sub SetSpecular(spc As *GLfloat)


359  glLightfv(Number,GL_SPECULAR,spc)


360  End Sub


361 


362  Sub SetPosition(pos As *GLfloat)


363  glLightfv(Number,GL_POSITION,pos)


364  End Sub


365  End Class


366 


367  Class Material


368  Public


369  Sub Ambient(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


370  Dim face As GLenum


371  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


372  Dim amb[3] As GLfloat


373  amb[0]=red


374  amb[1]=green


375  amb[2]=blue


376  amb[3]=alpha


377  glMaterialfv(face,GL_AMBIENT,amb)


378  End Sub


379  Sub Ambient(color As Color4f)


380  Dim face As GLenum


381  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


382  Dim amb[3] As GLfloat


383  amb[0]=color.R


384  amb[1]=color.G


385  amb[2]=color.B


386  amb[3]=color.A


387  glMaterialfv(face,GL_AMBIENT,amb)


388  End Sub


389  Sub Ambient(amb As *GLfloat)


390  glMaterialfv(face,GL_AMBIENT,amb)


391  End Sub


392 


393  Sub Diffuse(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


394  Dim face As GLenum


395  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


396  Dim dif[3] As GLfloat


397  dif[0]=red


398  dif[1]=green


399  dif[2]=blue


400  dif[3]=alpha


401  glMaterialfv(face,GL_DIFFUSE,dif)


402  End Sub


403  Sub Diffuse(color As Color4f)


404  Dim face As GLenum


405  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


406  Dim dif[3] As GLfloat


407  dif[0]=color.R


408  dif[1]=color.G


409  dif[2]=color.B


410  dif[3]=color.A


411  glMaterialfv(face,GL_DIFFUSE,dif)


412  End Sub


413  Sub Diffuse(dif As *GLfloat)


414  glMaterialfv(face,GL_DIFFUSE,dif)


415  End Sub


416 


417  Sub Specular(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


418  Dim face As GLenum


419  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


420  Dim spc[3] As GLfloat


421  spc[0]=red


422  spc[1]=green


423  spc[2]=blue


424  spc[3]=alpha


425  glMaterialfv(face,GL_SPECULAR,spc)


426  End Sub


427  Sub Specular(color As Color4f)


428  Dim face As GLenum


429  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


430  Dim spc[3] As GLfloat


431  spc[0]=color.R


432  spc[1]=color.G


433  spc[2]=color.B


434  spc[3]=color.A


435  glMaterialfv(face,GL_SPECULAR,spc)


436  End Sub


437  Sub Specular(spc As *GLfloat)


438  glMaterialfv(face,GL_SPECULAR,spc)


439  End Sub


440 


441  Sub Shininess(shin As GLfloat)


442  Dim face As GLenum


443  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


444  glMaterialf(face,GL_SHININESS,shin)


445  End Sub


446 


447  Sub Emission(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


448  Dim face As GLenum


449  glGetIntegerv(GL_COLOR_MATERIAL_FACE,VarPtr(face))


450  Dim ems[3] As GLfloat


451  ems[0]=red


452  ems[1]=green


453  ems[2]=blue


454  ems[3]=alpha


455  glMaterialfv(face,GL_EMISSION,ems)


456  End Sub


457  End Class


458 


459  Class ModelView


460  Public


461  Sub LoadIdentity()


462  Dim mode As GLenum


463  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


464  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


465  glLoadIdentity()


466  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


467  End Sub


468  Sub LookAt(eyex As GLdouble, eyey As GLdouble, eyez As GLdouble, centerx As GLdouble, centery As GLdouble, centerz As GLdouble, upx As GLdouble, upy As GLdouble, upz As GLdouble)


469  Dim mode As GLenum


470  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


471  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


472  gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz)


473  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


474  End Sub


475  Sub RotateX(angle As GLdouble)


476  Dim mode As GLenum


477  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


478  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


479  glRotated(angle, 1.0 As GLdouble, 0.0 As GLdouble, 0.0 As GLdouble)


480  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


481  End Sub


482  Sub RotateX(angle As GLfloat)


483  Dim mode As GLenum


484  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


485  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


486  glRotatef(angle, 1.0 As GLfloat, 0.0 As GLfloat, 0.0 As GLfloat)


487  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


488  End Sub


489  Sub RotateY(angle As GLdouble)


490  Dim mode As GLenum


491  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


492  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


493  glRotated(angle, 0.0 As GLdouble, 1.0 As GLdouble, 0.0 As GLdouble)


494  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


495  End Sub


496  Sub RotateY(angle As GLfloat)


497  Dim mode As GLenum


498  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


499  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


500  glRotatef(angle, 0.0 As GLfloat, 1.0 As GLfloat, 0.0 As GLfloat)


501  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


502  End Sub


503  Sub RotateZ(angle As GLdouble)


504  Dim mode As GLenum


505  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


506  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


507  glRotated(angle, 0.0 As GLdouble, 0.0 As GLdouble, 1.0 As GLdouble)


508  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


509  End Sub


510  Sub RotateZ(angle As GLfloat)


511  Dim mode As GLenum


512  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


513  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


514  glRotatef(angle, 0.0 As GLfloat, 0.0 As GLfloat, 1.0 As GLfloat)


515  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


516  End Sub


517  Sub Scale(x As GLdouble, y As GLdouble, z As GLdouble)


518  Dim mode As GLenum


519  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


520  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


521  glScaled(x, y, z)


522  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


523  End Sub


524  Sub Scale(x As GLfloat, y As GLfloat, z As GLfloat)


525  Dim mode As GLenum


526  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


527  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


528  glScalef(x, y, z)


529  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


530  End Sub


531  Sub Translate(x As GLdouble, y As GLdouble, z As GLdouble)


532  Dim mode As GLenum


533  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


534  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


535  glTranslated(x, y, z)


536  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


537  End Sub


538  Sub Translate(x As GLfloat, y As GLfloat, z As GLfloat)


539  Dim mode As GLenum


540  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


541  If mode<>GL_MODELVIEW Then glMatrixMode(GL_MODELVIEW)


542  glTranslatef(x, y, z)


543  If mode<>GL_MODELVIEW Then glMatrixMode(mode)


544  End Sub


545  End Class


546 


547  Class Projection


548  Public


549  Sub LoadIdentity()


550  Dim mode As GLenum


551  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


552  If mode<>GL_PROJECTION Then glMatrixMode(GL_PROJECTION)


553  glLoadIdentity()


554  If mode<>GL_PROJECTION Then glMatrixMode(mode)


555  End Sub


556  Sub Ortho2D(left As GLdouble, right As GLdouble, bottom As GLdouble, top As GLdouble)


557  Dim mode As GLenum


558  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


559  If mode<>GL_PROJECTION Then glMatrixMode(GL_PROJECTION)


560  gluOrtho2D(left, right, bottom, top)


561  If mode<>GL_PROJECTION Then glMatrixMode(mode)


562  End Sub


563  Sub Ortho3D(left As GLdouble, right As GLdouble, bottom As GLdouble, top As GLdouble, zNear As GLdouble, zFar As GLdouble)


564  Dim mode As GLenum


565  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


566  If mode<>GL_PROJECTION Then glMatrixMode(GL_PROJECTION)


567  glOrtho(left, right, bottom, top, zNear, zFar)


568  If mode<>GL_PROJECTION Then glMatrixMode(mode)


569  End Sub


570  Sub Frustum(left As GLdouble, right As GLdouble, bottom As GLdouble, top As GLdouble, zNear As GLdouble, zFar As GLdouble)


571  Dim mode As GLenum


572  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


573  If mode<>GL_PROJECTION Then glMatrixMode(GL_PROJECTION)


574  glFrustum(left, right, bottom, top, zNear, zFar)


575  If mode<>GL_PROJECTION Then glMatrixMode(mode)


576  End Sub


577  Sub Perspective(fovy As GLdouble, aspect As GLdouble, zNear As GLdouble, zFar As GLdouble)


578  Dim mode As GLenum


579  glGetIntegerv(GL_MATRIX_MODE,VarPtr(mode))


580  If mode<>GL_PROJECTION Then glMatrixMode(GL_PROJECTION)


581  gluPerspective(fovy, aspect, zNear, zFar)


582  If mode<>GL_PROJECTION Then glMatrixMode(mode)


583  End Sub


584  End Class


585 


586  Class Transform


587  Public


588  Projection As Projection


589  ModelView As ModelView


590  End Class


591 


592  Class LightModel


593  Public


594  /* Function Ambient () As GLenum


595  Dim amb As GLenum


596  glGetFloatv(GL_LIGHT_MODEL_AMBIENT,VarPtr(amb))


597  Return func


598  End Function*/


599  Sub Ambient(amb As *GLfloat)


600  glLightModelfv(GL_LIGHT_MODEL_AMBIENT,VarPtr(amb))


601  End Sub


602 


603  Function LocalView() As GLboolean


604  Dim local As GLboolean


605  glGetBooleanv(GL_LIGHT_MODEL_LOCAL_VIEW,VarPtr(local))


606  Return local


607  End Function


608  Sub LocalView(enable As GLboolean)


609  If enable Then


610  glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEW,GL_TRUE)


611  Else


612  glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEW,GL_FALSE)


613  End If


614  End Sub


615 


616  Function TwoSide() As GLboolean


617  Dim local As GLboolean


618  glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE,VarPtr(local))


619  Return local


620  End Function


621  Sub TwoSide(enable As GLboolean)


622  If enable Then


623  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE)


624  Else


625  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE)


626  End If


627  End Sub


628  End Class


629 


630  Class RenderState


631  Public /* Composiotion */


632  LightModel As LightModel


633 


634  Public


635  Function AlphaTestEnable() As GLboolean


636  Dim alpha As GLboolean


637  glGetBooleanv(GL_ALPHA_TEST,VarPtr(alpha))


638  Return alpha


639  End Function


640  Sub AlphaTestEnable(enable As GLboolean)


641  If enable Then


642  glEnable(GL_ALPHA_TEST)


643  Else


644  glDisable(GL_ALPHA_TEST)


645  End If


646  End Sub


647 


648  Function AlphaFunction() As GLenum


649  Dim func As GLenum


650  glGetIntegerv(GL_ALPHA_TEST_FUNC,VarPtr(func))


651  Return func


652  End Function


653  Sub AlphaFunction(func As GLenum)


654  Dim ref As GLclampf


655  glGetFloatv(GL_ALPHA_TEST_REF,VarPtr(ref))


656  glAlphaFunc(func,ref)


657  End Sub


658 


659  Function BlendEnable() As GLboolean


660  Dim blend As GLboolean


661  glGetBooleanv(GL_BLEND,VarPtr(blend))


662  Return blend


663  End Function


664  Sub BlendEnable(enable As GLboolean)


665  If enable Then


666  glEnable(GL_BLEND)


667  Else


668  glDisable(GL_BLEND)


669  End If


670  End Sub


671 


672  Function BlendDestinationFactor() As GLenum


673  Dim dfactor As GLenum


674  glGetIntegerv(GL_BLEND_DST,VarPtr(dfactor))


675  Return dfactor


676  End Function


677  Sub BlendDestinationFactor(dfactor As GLenum)


678  Dim sfactor As GLenum


679  glGetIntegerv(GL_BLEND_SRC,VarPtr(sfactor))


680  glBlendFunc(sfactor,dfactor)


681  End Sub


682 


683  Function BlendSourceFactor() As GLenum


684  Dim sfactor As GLenum


685  glGetIntegerv(GL_BLEND_SRC,VarPtr(sfactor))


686  Return sfactor


687  End Function


688  Sub BlendSourceFactor(sfactor As GLenum)


689  Dim dfactor As GLenum


690  glGetIntegerv(GL_BLEND_DST,VarPtr(dfactor))


691  glBlendFunc(sfactor,dfactor)


692  End Sub


693 


694  Function CullFaceEnable() As GLboolean


695  Dim cull As GLboolean


696  glGetBooleanv(GL_CULL_FACE,VarPtr(cull))


697  Return cull


698  End Function


699  Sub CullFaceEnable(enable As GLboolean)


700  If enable Then


701  glEnable(GL_CULL_FACE)


702  Else


703  glDisable(GL_CULL_FACE)


704  End If


705  End Sub


706 


707  Function CullFaceMode () As GLenum


708  Dim mode As GLenum


709  glGetIntegerv(GL_CULL_FACE_MODE,VarPtr(mode))


710  Return mode


711  End Function


712  Sub CullFaceMode(mode As GLenum)


713  glCullFace(mode)


714  End Sub


715 


716  Function DepthTestEnable () As GLboolean


717  Dim depth As GLboolean


718  glGetBooleanv(GL_DEPTH_TEST,VarPtr(depth))


719  Return depth


720  End Function


721  Sub DepthTestEnable(enable As GLboolean)


722  If enable Then


723  glEnable(GL_DEPTH_TEST)


724  Else


725  glDisable(GL_DEPTH_TEST)


726  End If


727  End Sub


728 


729  Function DepthFunction () As GLenum


730  Dim func As GLenum


731  glGetIntegerv(GL_DEPTH_FUNC,VarPtr(func))


732  Return func


733  End Function


734  Sub DepthFunction(func As GLenum)


735  glDepthFunc(func)


736  End Sub


737 


738  Function DepthBufferWritable() As GLboolean


739  Dim writable As GLboolean


740  glGetBooleanv(GL_DEPTH_WRITEMASK,VarPtr(writable))


741  Return writable


742  End Function


743  Sub DepthBufferWritable(enable As GLboolean)


744  If enable Then


745  glDepthMask(GL_DEPTH_WRITEMASK)


746  Else


747  glDepthMask(GL_DEPTH_WRITEMASK)


748  End If


749  End Sub


750 


751  Function DitherEnable() As GLboolean


752  Dim dither As GLboolean


753  glGetBooleanv(GL_DITHER,VarPtr(dither))


754  Return dither


755  End Function


756  Sub DitherEnable(enable As GLboolean)


757  If enable Then


758  glEnable(GL_DITHER)


759  Else


760  glDisable(GL_DITHER)


761  End If


762  End Sub


763 


764  Function FogEnable () As GLboolean


765  Dim fog As GLboolean


766  glGetBooleanv(GL_FOG,VarPtr(fog))


767  Return fog


768  End Function


769  Sub FogEnable(enable As GLboolean)


770  If enable Then


771  glEnable(GL_FOG)


772  Else


773  glDisable(GL_FOG)


774  End If


775  End Sub


776 


777  Function FogMode() As GLenum


778  Dim mode As GLenum


779  glGetIntegerv(GL_FOG_MODE,VarPtr(mode))


780  Return mode


781  End Function


782  Sub FogMode(mode As GLenum)


783  glFogi(GL_FOG_MODE,mode)


784  End Sub


785 


786  Function FogColor() As *GLfloat


787  glGetFloatv(GL_FOG_COLOR,FogColor)


788  Return FogColor


789  End Function


790  Sub FogColor(fcolor As *GLfloat)


791  glFogfv(GL_FOG_COLOR,fcolor)


792  End Sub


793 


794  Function FogDensity() As GLfloat


795  Dim density As GLfloat


796  glGetFloatv(GL_FOG_DENSITY,density)


797  Return density


798  End Function


799  Sub FogDensity(density As GLfloat)


800  glFogf(GL_FOG_DENSITY,density)


801  End Sub


802 


803  Function FogStart() As GLfloat


804  Dim fstrat As GLfloat


805  glGetFloatv(GL_FOG_START,fstrat)


806  Return fstrat


807  End Function


808  Sub FogStart(fstrat As GLfloat)


809  glFogf(GL_FOG_START,fstrat)


810  End Sub


811 


812  Function FogEnd() As GLfloat


813  Dim fend As GLfloat


814  glGetFloatv(GL_FOG_END,fend)


815  Return fend


816  End Function


817  Sub FogEnd(fend As GLfloat)


818  glFogf(GL_FOG_END,fend)


819  End Sub


820 


821  Function Lighting() As GLboolean


822  Dim lighting As GLboolean


823  glGetBooleanv(GL_LIGHTING,VarPtr(lighting))


824  Return lighting


825  End Function


826  Sub Lighting(enable As GLboolean)


827  If enable Then


828  glEnable(GL_LIGHTING)


829  Else


830  glDisable(GL_LIGHTING)


831  End If


832  End Sub


833 


834  Function LineSmoothEnable() As GLboolean


835  Dim smooth As GLboolean


836  glGetBooleanv(GL_LINE_SMOOTH,VarPtr(smooth))


837  Return smooth


838  End Function


839  Sub LineSmoothEnable(enable As GLboolean)


840  If enable Then


841  glEnable(GL_LINE_SMOOTH)


842  Else


843  glDisable(GL_LINE_SMOOTH)


844  End If


845  End Sub


846 


847  Function LogicOpEnable() As GLboolean


848  Dim logic As GLboolean


849  glGetBooleanv(GL_COLOR_LOGIC_OP,VarPtr(logic))


850  Return logic


851  End Function


852  Sub LogicOpEnable(enable As GLboolean)


853  If enable Then


854  glEnable(GL_COLOR_LOGIC_OP)


855  Else


856  glDisable(GL_COLOR_LOGIC_OP)


857  End If


858  End Sub


859 


860  Function LogicOpCode() As GLenum


861  Dim code As GLenum


862  glGetFloatv(GL_COLOR_LOGIC_OP_MODE,code)


863  Return code


864  End Function


865  Sub LogicOpCode(code As GLenum)


866  glLogicOp(code)


867  End Sub


868 


869  Function PointSmoothEnable() As GLboolean


870  Dim smooth As GLboolean


871  glGetBooleanv(GL_POINT_SMOOTH,VarPtr(smooth))


872  Return smooth


873  End Function


874  Sub PointSmoothEnable(enable As GLboolean)


875  If enable Then


876  glEnable(GL_POINT_SMOOTH)


877  Else


878  glDisable(GL_POINT_SMOOTH)


879  End If


880  End Sub


881 


882  Function PolygonSmoothEnable() As GLboolean


883  Dim smooth As GLboolean


884  glGetBooleanv(GL_POLYGON_SMOOTH,VarPtr(smooth))


885  Return smooth


886  End Function


887  Sub PolygonSmoothEnable(enable As GLboolean)


888  If enable Then


889  glEnable(GL_POLYGON_SMOOTH)


890  Else


891  glDisable(GL_POLYGON_SMOOTH)


892  End If


893  End Sub


894 


895  Function ReferenceAlpha() As GLclampf


896  Dim ref As GLclampf


897  glGetFloatv(GL_ALPHA_TEST_REF,VarPtr(ref))


898  Return ref


899  End Function


900  Sub ReferenceAlpha(ref As GLclampf)


901  Dim func As GLenum


902  glGetIntegerv(GL_ALPHA_TEST_FUNC,VarPtr(func))


903  glAlphaFunc(func,ref)


904  End Sub


905 


906  Function ShadeModel() As GLenum


907  Dim mode As GLenum


908  glGetIntegerv(GL_SHADE_MODEL,VarPtr(mode))


909  Return mode


910  End Function


911  Sub ShadeModel(mode As GLenum)


912  glShadeModel(mode)


913  End Sub


914  End Class


915 


916 


917  Enum ColorType


918  RgbColor=0


919  RgbaColor=0


920  IndexColor


921  End Enum


922 


923  Enum BufferType


924  SingleBuffer=0


925  DoubleBuffer


926  End Enum


927 


928  Enum ClearBuffer


929  DepthBufferBit = &H00000100


930  AccumBufferBit = &H00000200


931  StencilBufferBit = &H00000400


932  ColorBufferBit = &H00004000


933  End Enum


934 


935  Enum PrimitiveMode


936  Points = &H0000


937  Lines = &H0001


938  LineLoop = &H0002


939  LineStrip = &H0003


940  Triangles = &H0004


941  TriangleStrip = &H0005


942  TriangleFan = &H0006


943  Quads = &H0007


944  QuadStrip = &H0008


945  Polygon = &H0009


946  End Enum


947 


948  Class RenderingContext


949  Public /* Composiotion */


950  Material As Material


951  RenderState As RenderState


952  Transform As Transform


953  Lights[ELM(8)] As Light


954 


955  Public /* Constructor */


956  Sub RenderingContext()


957  Dim hrc As HGLRC


958  hrc=wglGetCurrentContext()


959  If hrc Then


960  wglMakeCurrent(NULL,NULL)


961  wglDeleteContext(hrc)


962  End If


963 


964  Lights[0].Light(GL_LIGHT0)


965  Lights[1].Light(GL_LIGHT1)


966  Lights[2].Light(GL_LIGHT2)


967  Lights[3].Light(GL_LIGHT3)


968  Lights[4].Light(GL_LIGHT4)


969  Lights[5].Light(GL_LIGHT5)


970  Lights[6].Light(GL_LIGHT6)


971  Lights[7].Light(GL_LIGHT7)


972  End Sub


973  Sub RenderingContext(hdc As HDC, ByRef pfd As PIXELFORMATDESCRIPTOR)


974  RenderingContext()


975 


976  Dim pf As Long


977  pf=ChoosePixelFormat(hdc,pfd)


978  If pf=0 Then


979  MessageBox(NULL,"Choose Pixel Format failed","error",MB_OK)


980  Exit Sub


981  End If


982  If SetPixelFormat(hdc,pf,pfd)=FALSE Then


983  MessageBox(NULL,"Set Pixel Format failed","error",MB_OK)


984  Exit Sub


985  End If


986 


987  Dim hrc As HGLRC


988  hrc=wglCreateContext(hdc)


989  wglMakeCurrent(hdc,hrc)


990  End Sub


991  Sub RenderingContext(hdc As HDC, ByRef ctype As ColorType, ByRef btype As BufferType)


992  RenderingContext()


993 


994  Dim pfd As PIXELFORMATDESCRIPTOR


995  pfd.nSize=SizeOf(PIXELFORMATDESCRIPTOR) As Word


996  pfd.nVersion=GL_VERSION_1_1


997  If btype=BufferType.DoubleBuffer As Long Then


998  pfd.dwFlags or=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER


999  Else


1000  pfd.dwFlags or=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL


1001  End If


1002  If ctype=ColorType.RgbColor As Long Then


1003  pfd.iPixelType=PFD_TYPE_RGBA


1004  Else


1005  pfd.iPixelType=PFD_TYPE_COLORINDEX


1006  End If


1007  pfd.cColorBits=24


1008  pfd.cRedBits=0


1009  pfd.cRedShift=0


1010  pfd.cGreenBits=0


1011  pfd.cGreenShift=0


1012  pfd.cBlueBits=0


1013  pfd.cBlueShift=0


1014  pfd.cAlphaBits=0


1015  pfd.cAlphaShift=0


1016  pfd.cAccumBits=0


1017  pfd.cAccumRedBits=0


1018  pfd.cAccumGreenBits=0


1019  pfd.cAccumBlueBits=0


1020  pfd.cAccumAlphaBits=0


1021  pfd.cDepthBits=32


1022  pfd.cStencilBits=0


1023  pfd.cAuxBuffers=0


1024  pfd.iLayerType=PFD_MAIN_PLANE


1025  pfd.bReserved=0


1026  pfd.dwLayerMask=0


1027  pfd.dwVisibleMask=0


1028  pfd.dwDamageMask=0


1029  RenderingContext(hdc,pfd)


1030  End Sub


1031  Sub RenderingContext(hdc As HDC)


1032  RenderingContext(hdc As HDC, ColorType.RgbColor, BufferType.DoubleBuffer)


1033  End Sub


1034 


1035  Public /* Destructor */


1036  Sub ~RenderingContext()


1037  Dim hrc As HGLRC


1038  hrc=wglGetCurrentContext()


1039  wglMakeCurrent(NULL,NULL)


1040  wglDeleteContext(hrc)


1041  End Sub


1042 


1043  Public /* Method */


1044  Sub Begin(mode As GLenum)


1045  glBegin(mode)


1046  End Sub


1047  Sub Begin(mode As PrimitiveMode)


1048  glBegin(mode)


1049  End Sub


1050  Sub Clear(mask As GLbitfield)


1051  glClear(mask)


1052  End Sub


1053  Sub Clear(mask As ClearBuffer)


1054  glClear(mask)


1055  End Sub


1056 


1057  Sub ClearAccum(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


1058  glClearAccum(red, green, blue, alpha)


1059  End Sub


1060  Sub ClearAccum(color As Color4f)


1061  glClearAccum(color.R, color.G, color.B, color.A)


1062  End Sub


1063  Sub ClearColor(red As GLclampf, green As GLclampf, blue As GLclampf, alpha As GLclampf)


1064  glClearColor(red, green, blue, alpha)


1065  End Sub


1066  Sub ClearColor(color As Color4f)


1067  glClearColor(color.R, color.G, color.B, color.A)


1068  End Sub


1069  Sub ClearDepth(depth As GLclampd)


1070  glClearDepth(depth)


1071  End Sub


1072  Sub ClearIndex(c As GLfloat)


1073  glClearIndex(c)


1074  End Sub


1075  Sub ClearStencil(s As GLint)


1076  glClearStencil(s)


1077  End Sub


1078 


1079  Sub Color(red As GLdouble, green As GLdouble, blue As GLdouble)


1080  glColor3d(red,green,blue)


1081  End Sub


1082  Sub Color(red As GLdouble, green As GLdouble, blue As GLdouble, alpha As GLdouble)


1083  glColor4d(red,green,blue,alpha)


1084  End Sub


1085 


1086  Sub Color(red As GLfloat, green As GLfloat, blue As GLfloat)


1087  glColor3f(red,green,blue)


1088  End Sub


1089  Sub Color(red As GLfloat, green As GLfloat, blue As GLfloat, alpha As GLfloat)


1090  glColor4f(red,green,blue,alpha)


1091  End Sub


1092 


1093  Sub DrawPrimiteve()


1094  End Sub


1095 


1096  Sub End()


1097  glEnd()


1098  End Sub


1099 


1100  Sub Finish()


1101  glFinish()


1102  End Sub


1103  Sub Flush()


1104  glFlush()


1105  End Sub


1106 


1107  Function GenerateTexures() As GLint


1108  glGenTextures()


1109  End Function


1110 


1111  Sub MatrixMode(mode As GLenum)


1112  glMatrixMode(mode)


1113  End Sub


1114 


1115  Sub Present()


1116  SwapBuffers(wglGetCurrentDC())


1117  End Sub


1118  Sub Present(hdc As HDC)


1119  SwapBuffers(hdc)


1120  End Sub


1121 


1122  Sub PopMatrix()


1123  glPopMatrix()


1124  End Sub


1125 


1126  Sub PushMatrix()


1127  glPushMatrix()


1128  End Sub


1129 


1130  Sub Vertex(x As GLdouble, y As GLdouble)


1131  glVertex2d(x,y)


1132  End Sub


1133  Sub Vertex(x As GLdouble, y As GLdouble, z As GLdouble)


1134  glVertex3d(x,y,z)


1135  End Sub


1136  Sub Vertex(x As GLdouble, y As GLdouble, z As GLdouble, w As GLdouble)


1137  glVertex4d(x,y,z,w)


1138  End Sub


1139  Sub Vertex(x As GLfloat, y As GLfloat)


1140  glVertex2f(x,y)


1141  End Sub


1142  Sub Vertex(x As GLfloat, y As GLfloat, z As GLfloat)


1143  glVertex3f(x,y,z)


1144  End Sub


1145  Sub Vertex(x As GLfloat, y As GLfloat, z As GLfloat, w As GLfloat)


1146  glVertex4f(x,y,z,w)


1147  End Sub


1148 


1149  Sub Viewport(x As GLint, y As GLint, width As GLsizei, height As GLsizei)


1150  glViewport(x, y, width, height)


1151  End Sub


1152  End Class


1153 


1154 


1155 


1156  #endif

