Overview  Index  Help 
spectrum

0001  (**
0002   * libglut.sml
0003   *
0004   * @copyright (c) 2006-2007, Tohoku University.
0005   * @author UENO Katsuhiro
0006   * @version $Id: libglut.sml,v 1.10.2.3 2007/03/29 15:00:37 katsu Exp $
0007   *)
0008  
0009  use "CConfig/load.sml";
0010  
0011  local
0012    open CConfig
0013  
0014    val libglName =
0015        valOf (findLibrary ("gl","glEnable",["GL/gl.h"]))
0016        handle Option =>
0017        valOf (findLibrary ("GL","glEnable",["GL/gl.h"]))
0018        handle Option =>
0019        valOf (findLibrary ("-framework OpenGL","glEnable",["OpenGL/gl.h"]))
0020    val libgluName =
0021        valOf (findLibrary ("glu","gluLookAt",["GL/glu.h"]))
0022        handle Option =>
0023        valOf (findLibrary ("GLU","gluLookAt",["GL/glu.h"]))
0024        handle Option =>
0025        valOf (findLibrary ("-framework OpenGL","gluLookAt",["OpenGL/glu.h"]))
0026    val libglutName =
0027        valOf (findLibrary ("glut","glutInit",["GL/glut.h"]))
0028        handle Option =>
0029        valOf (findLibrary ("-framework GLUT","glutInit",["GLUT/glut.h"]))
0030  (*
0031    (* Mac OS X *)
0032    val _ = #set (CConfig.config "CFLAGS")
0033                 (SOME "-framework OpenGL -framework GLUT")
0034    val libglName = "/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL"
0035    val libgluName = libglName
0036    val libglutName = "/System/Library/Frameworks/GLUT.framework/Versions/A/GLUT"
0037  *)
0038  
0039    fun constWord name =
0040        let
0041          val w = valOf (haveConstUInt (name, ["GL/glut.h"]))
0042                  handle Option =>
0043                  valOf (haveConstUInt (name, ["GLUT/glut.h"]))
0044        (*val _ = print ("val "^name^" = 0wx"^Word.fmt StringCvt.HEX w^"\n")*)
0045        in
0046          w
0047        end
0048  
0049    open DynamicLink
0050  
0051    val libgl = dlopen libglName
0052    val libglu = if libglName = libgluName then libgl else dlopen libgluName
0053    val libglut = dlopen libglutName
0054  in
0055  
0056  structure GLUT =
0057  struct
0058    val glutInit =
0059        dlsym (libglut, "glutInit")
0060        : _import (int ref, string array) -> unit
0061    val glutInitDisplayMode =
0062        dlsym (libglut, "glutInitDisplayMode")
0063        : _import word -> unit
0064    val glutInitWindowSize =
0065        dlsym (libglut, "glutInitWindowSize")
0066        : _import (int, int) -> unit
0067    val glutCreateWindow =
0068        dlsym (libglut, "glutCreateWindow")
0069        : _import string -> unit
0070    val glutDisplayFunc =
0071        dlsym (libglut, "glutDisplayFunc")
0072        : _import (()->unit) -> unit
0073    val glutReshapeFunc =
0074        dlsym (libglut, "glutReshapeFunc")
0075        : _import ((int, int)->unit) -> unit
0076    val glutMouseFunc =
0077        dlsym (libglut, "glutMouseFunc")
0078        : _import (()->unit) -> unit
0079    val glutKeyboardFunc =
0080        dlsym (libglut, "glutKeyboardFunc")
0081        : _import ((int, int, int)->unit) -> unit
0082    val glutTimerFunc =
0083        dlsym (libglut, "glutTimerFunc")
0084        : _import (int, int->unit, int) -> unit
0085    val glutIdleFunc =
0086        dlsym (libglut, "glutIdleFunc")
0087        : _import (()->unit) -> unit
0088    val glutMainLoop =
0089        dlsym (libglut, "glutMainLoop")
0090        : _import () -> unit
0091    val glutSwapBuffers =
0092        dlsym (libglut, "glutSwapBuffers")
0093        : _import () -> unit
0094    val glutPostRedisplay =
0095        dlsym (libglut, "glutPostRedisplay")
0096        : _import () -> unit
0097  
0098    val GLUT_RGBA = constWord "GLUT_RGBA"
0099    val GLUT_DOUBLE = constWord "GLUT_DOUBLE"
0100    val GLUT_DEPTH = constWord "GLUT_DEPTH"
0101  (*
0102    (* Mac OS X *)
0103    val GLUT_RGBA = 0wx0
0104    val GLUT_DOUBLE = 0wx2
0105    val GLUT_DEPTH = 0wx10
0106  *)
0107  
0108  end
0109  
0110  structure GL =
0111  struct
0112    val glClearColor =
0113        dlsym (libgl, "glClearColor")
0114        : _import (float, float, float, float) -> unit
0115    val glEnable =
0116        dlsym (libgl, "glEnable")
0117        : _import word -> unit
0118    val glFrontFace =
0119        dlsym (libgl, "glFrontFace")
0120        : _import word -> unit
0121    val glLightfv =
0122        dlsym (libgl, "glLightfv")
0123        : _import (word, word, float * float * float * float) -> unit
0124    val glClear =
0125        dlsym (libgl, "glClear")
0126        : _import word -> unit
0127    val glFlush =
0128        dlsym (libgl, "glFlush")
0129        : _import () -> unit
0130    val glViewport =
0131        dlsym (libgl, "glViewport")
0132        : _import (int, int, int, int) -> unit
0133    val glMatrixMode =
0134        dlsym (libgl, "glMatrixMode")
0135        : _import word -> unit
0136    val glLoadIdentity =
0137        dlsym (libgl, "glLoadIdentity")
0138        : _import () -> unit
0139    val glMatrixMode =
0140        dlsym (libgl, "glMatrixMode")
0141        : _import word -> unit
0142    val glPushMatrix =
0143        dlsym (libgl, "glPushMatrix")
0144        : _import () -> unit
0145    val glPopMatrix =
0146        dlsym (libgl, "glPopMatrix")
0147        : _import () -> unit
0148    val glRotated =
0149        dlsym (libgl, "glRotated")
0150        : _import (real, real, real, real) -> unit
0151    val glTranslated =
0152        dlsym (libgl, "glTranslated")
0153        : _import (real, real, real) -> unit
0154    val glMaterialfv =
0155        dlsym (libgl, "glMaterialfv")
0156        : _import (word, word, float * float * float * float) -> unit
0157    val glMaterialiv =
0158        dlsym (libgl, "glMaterialiv")
0159        : _import (word, word, int * int * int * int) -> unit
0160    val glBegin =
0161        dlsym (libgl, "glBegin")
0162        : _import word -> unit
0163    val glEnd =
0164        dlsym (libgl, "glEnd")
0165        : _import () -> unit
0166    val glNormal3dv =
0167        dlsym (libgl, "glNormal3dv")
0168        : _import (real * real * real) -> unit
0169    val glVertex3dv =
0170        dlsym (libgl, "glVertex3dv")
0171        : _import (real * real * real) -> unit
0172    val glVertex2d =
0173        dlsym (libgl, "glVertex2d")
0174        : _import (real, real) -> unit
0175    val glVertex3d =
0176        dlsym (libgl, "glVertex3d")
0177        : _import (real, real, real) -> unit
0178    val glCullFace =
0179        dlsym (libgl, "glCullFace")
0180        : _import word -> unit
0181    val glColor4i =
0182        dlsym (libgl, "glColor4i")
0183        : _import (word, word, word, word) -> unit
0184    val glColor3d =
0185        dlsym (libgl, "glColor3d")
0186        : _import (real, real, real) -> unit
0187    val glBlendFunc =
0188        dlsym (libgl, "glBlendFunc")
0189        : _import (word, word) -> unit
0190    val glOrtho =
0191        dlsym (libgl, "glOrtho")
0192        : _import (real, real, real, real, real, real) -> unit
0193  
0194    val GL_PROJECTION = constWord "GL_PROJECTION"
0195    val GL_DEPTH_TEST = constWord "GL_DEPTH_TEST"
0196    val GL_CULL_FACE = constWord "GL_CULL_FACE"
0197    val GL_BACK = constWord "GL_BACK"
0198    val GL_FRONT_AND_BACK = constWord "GL_FRONT_AND_BACK"
0199    val GL_FRONT = constWord "GL_FRONT"
0200    val GL_CW = constWord "GL_CW"
0201    val GL_LIGHTING = constWord "GL_LIGHTING"
0202    val GL_LIGHT0 = constWord "GL_LIGHT0"
0203    val GL_LIGHT1 = constWord "GL_LIGHT1"
0204    val GL_DIFFUSE = constWord "GL_DIFFUSE"
0205    val GL_SPECULAR = constWord "GL_SPECULAR"
0206    val GL_AMBIENT = constWord "GL_AMBIENT"
0207    val GL_COLOR_BUFFER_BIT = constWord "GL_COLOR_BUFFER_BIT"
0208    val GL_DEPTH_BUFFER_BIT = constWord "GL_DEPTH_BUFFER_BIT"
0209    val GL_MODELVIEW = constWord "GL_MODELVIEW"
0210    val GL_QUADS = constWord "GL_QUADS"
0211    val GL_POSITION = constWord "GL_POSITION"
0212    val GL_LINE_LOOP = constWord "GL_LINE_LOOP"
0213    val GL_LINES = constWord "GL_LINES"
0214    val GL_POLYGON = constWord "GL_POLYGON"
0215    val GL_LINE_SMOOTH = constWord "GL_LINE_SMOOTH"
0216    val GL_POLYGON_SMOOTH = constWord "GL_POLYGON_SMOOTH"
0217    val GL_BLEND = constWord "GL_BLEND"
0218    val GL_SRC_ALPHA = constWord "GL_SRC_ALPHA"
0219    val GL_ONE_MINUS_SRC_ALPHA = constWord "GL_ONE_MINUS_SRC_ALPHA"
0220  (*
0221    (* Mac OS X *)
0222    val GL_PROJECTION = 0wx1701
0223    val GL_DEPTH_TEST = 0wxB71
0224    val GL_CULL_FACE = 0wxB44
0225    val GL_BACK = 0wx405
0226    val GL_FRONT_AND_BACK = 0wx408
0227    val GL_FRONT = 0wx404
0228    val GL_CW = 0wx900
0229    val GL_LIGHTING = 0wxB50
0230    val GL_LIGHT0 = 0wx4000
0231    val GL_LIGHT1 = 0wx4001
0232    val GL_DIFFUSE = 0wx1201
0233    val GL_SPECULAR = 0wx1202
0234    val GL_AMBIENT = 0wx1200
0235    val GL_COLOR_BUFFER_BIT = 0wx4000
0236    val GL_DEPTH_BUFFER_BIT = 0wx100
0237    val GL_MODELVIEW = 0wx1700
0238    val GL_QUADS = 0wx7
0239    val GL_POSITION = 0wx1203
0240    val GL_LINE_LOOP = 0wx2
0241    val GL_LINES = 0wx1
0242    val GL_POLYGON = 0wx9
0243    val GL_LINE_SMOOTH = 0wxB20
0244    val GL_POLYGON_SMOOTH = 0wxB41
0245    val GL_BLEND = 0wxBE2
0246    val GL_SRC_ALPHA = 0wx302
0247    val GL_ONE_MINUS_SRC_ALPHA = 0wx303
0248  *)
0249  
0250  end
0251  
0252  structure GLU =
0253  struct
0254  
0255    type gluQuadricObj = word
0256  
0257    val gluPerspective =
0258        dlsym (libglu, "gluPerspective")
0259        : _import (real, real, real, real) -> unit
0260    val gluLookAt =
0261        dlsym (libglu, "gluLookAt")
0262        : _import (real, real, real, real, real, real, real, real, real) -> unit
0263    val gluNewQuadric =
0264        dlsym (libglu, "gluNewQuadric")
0265        : _import () -> gluQuadricObj
0266    val gluDeleteQuadric =
0267        dlsym (libglu, "gluDeleteQuadric")
0268        : _import gluQuadricObj -> unit
0269    val gluQuadricDrawStyle =
0270        dlsym (libglu, "gluQuadricDrawStyle")
0271        : _import (gluQuadricObj, word) -> unit
0272    val gluQuadricNormals =
0273        dlsym (libglu, "gluQuadricNormals")
0274        : _import (gluQuadricObj, word) -> unit
0275    val gluQuadricOrientation =
0276        dlsym (libglu, "gluQuadricOrientation")
0277        : _import (gluQuadricObj, word) -> unit
0278    val gluCylinder =
0279        dlsym (libglu, "gluCylinder")
0280        : _import (gluQuadricObj, real, real, real, int, int) -> unit
0281    val gluDisk =
0282        dlsym (libglu, "gluDisk")
0283        : _import (gluQuadricObj, real, real, int, int) -> unit
0284  
0285    val GLU_FILL = constWord "GLU_FILL"
0286    val GLU_SMOOTH = constWord "GLU_SMOOTH"
0287    val GLU_INSIDE = constWord "GLU_INSIDE"
0288  (*
0289    (* Mac OS X *)
0290    val GLU_FILL = 0wx186AC
0291    val GLU_SMOOTH = 0wx186A0
0292    val GLU_INSIDE = 0wx186B5
0293  *)
0294  
0295  end
0296  
0297  end (* local *)


Overview  Index  Help 
spectrum