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 *)