├── .gitignore ├── README.md ├── examples ├── glut_example.nim └── nim.cfg ├── opengl.nimble └── src ├── glu.nim ├── glut.nim ├── glx.nim ├── opengl.nim └── wingl.nim /.gitignore: -------------------------------------------------------------------------------- 1 | nimcache/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # opengl 2 | An OpenGL interface 3 | 4 | # Extension loading 5 | ``loadExtensions()`` must be executed after the creation of a rendering context and before any OpenGL extension procs are used. 6 | 7 | # Automatic error checking 8 | The OpenGL procs do perform automatic error checking by default. This can be disabled at compile-time by defining the conditional symbol ``noAutoGLerrorCheck`` (-d:noAutoGLerrorCheck), in which case the error checking code will be omitted from the binary; or at run-time by executing this statement: ``enableAutoGLerrorCheck(false)``. 9 | -------------------------------------------------------------------------------- /examples/glut_example.nim: -------------------------------------------------------------------------------- 1 | # OpenGL example using glut 2 | 3 | import glut 4 | import opengl 5 | import glu 6 | 7 | proc display() {.cdecl.} = 8 | glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) # Clear color and depth buffers 9 | glMatrixMode(GL_MODELVIEW) # To operate on model-view matrix 10 | glLoadIdentity() # Reset the model-view matrix 11 | glTranslatef(1.5, 0.0, -7.0) # Move right and into the screen 12 | 13 | # Render a cube consisting of 6 quads 14 | # Each quad consists of 2 triangles 15 | # Each triangle consists of 3 vertices 16 | 17 | glBegin(GL_TRIANGLES) # Begin drawing of triangles 18 | 19 | # Top face (y = 1.0f) 20 | glColor3f(0.0, 1.0, 0.0) # Green 21 | glVertex3f( 1.0, 1.0, -1.0) 22 | glVertex3f(-1.0, 1.0, -1.0) 23 | glVertex3f(-1.0, 1.0, 1.0) 24 | glVertex3f( 1.0, 1.0, 1.0) 25 | glVertex3f( 1.0, 1.0, -1.0) 26 | glVertex3f(-1.0, 1.0, 1.0) 27 | 28 | # Bottom face (y = -1.0f) 29 | glColor3f(1.0, 0.5, 0.0) # Orange 30 | glVertex3f( 1.0, -1.0, 1.0) 31 | glVertex3f(-1.0, -1.0, 1.0) 32 | glVertex3f(-1.0, -1.0, -1.0) 33 | glVertex3f( 1.0, -1.0, -1.0) 34 | glVertex3f( 1.0, -1.0, 1.0) 35 | glVertex3f(-1.0, -1.0, -1.0) 36 | 37 | # Front face (z = 1.0f) 38 | glColor3f(1.0, 0.0, 0.0) # Red 39 | glVertex3f( 1.0, 1.0, 1.0) 40 | glVertex3f(-1.0, 1.0, 1.0) 41 | glVertex3f(-1.0, -1.0, 1.0) 42 | glVertex3f( 1.0, -1.0, 1.0) 43 | glVertex3f( 1.0, 1.0, 1.0) 44 | glVertex3f(-1.0, -1.0, 1.0) 45 | 46 | # Back face (z = -1.0f) 47 | glColor3f(1.0, 1.0, 0.0) # Yellow 48 | glVertex3f( 1.0, -1.0, -1.0) 49 | glVertex3f(-1.0, -1.0, -1.0) 50 | glVertex3f(-1.0, 1.0, -1.0) 51 | glVertex3f( 1.0, 1.0, -1.0) 52 | glVertex3f( 1.0, -1.0, -1.0) 53 | glVertex3f(-1.0, 1.0, -1.0) 54 | 55 | # Left face (x = -1.0f) 56 | glColor3f(0.0, 0.0, 1.0) # Blue 57 | glVertex3f(-1.0, 1.0, 1.0) 58 | glVertex3f(-1.0, 1.0, -1.0) 59 | glVertex3f(-1.0, -1.0, -1.0) 60 | glVertex3f(-1.0, -1.0, 1.0) 61 | glVertex3f(-1.0, 1.0, 1.0) 62 | glVertex3f(-1.0, -1.0, -1.0) 63 | 64 | # Right face (x = 1.0f) 65 | glColor3f(1.0, 0.0, 1.0) # Magenta 66 | glVertex3f(1.0, 1.0, -1.0) 67 | glVertex3f(1.0, 1.0, 1.0) 68 | glVertex3f(1.0, -1.0, 1.0) 69 | glVertex3f(1.0, -1.0, -1.0) 70 | glVertex3f(1.0, 1.0, -1.0) 71 | glVertex3f(1.0, -1.0, 1.0) 72 | 73 | glEnd() # End of drawing 74 | 75 | glutSwapBuffers() # Swap the front and back frame buffers (double buffering) 76 | 77 | proc reshape(width: GLsizei, height: GLsizei) {.cdecl.} = 78 | # Compute aspect ratio of the new window 79 | if height == 0: 80 | return # To prevent divide by 0 81 | 82 | # Set the viewport to cover the new window 83 | glViewport(0, 0, width, height) 84 | 85 | # Set the aspect ratio of the clipping volume to match the viewport 86 | glMatrixMode(GL_PROJECTION) # To operate on the Projection matrix 87 | glLoadIdentity() # Reset 88 | # Enable perspective projection with fovy, aspect, zNear and zFar 89 | gluPerspective(45.0, width / height, 0.1, 100.0) 90 | 91 | glutInit() 92 | glutInitDisplayMode(GLUT_DOUBLE) 93 | glutInitWindowSize(640, 480) 94 | glutInitWindowPosition(50, 50) 95 | discard glutCreateWindow("OpenGL Example") 96 | 97 | glutDisplayFunc(display) 98 | glutReshapeFunc(reshape) 99 | 100 | loadExtensions() 101 | 102 | glClearColor(0.0, 0.0, 0.0, 1.0) # Set background color to black and opaque 103 | glClearDepth(1.0) # Set background depth to farthest 104 | glEnable(GL_DEPTH_TEST) # Enable depth testing for z-culling 105 | glDepthFunc(GL_LEQUAL) # Set the type of depth-test 106 | glShadeModel(GL_SMOOTH) # Enable smooth shading 107 | glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) # Nice perspective corrections 108 | 109 | glutMainLoop() 110 | -------------------------------------------------------------------------------- /examples/nim.cfg: -------------------------------------------------------------------------------- 1 | --path:"../src" 2 | -------------------------------------------------------------------------------- /opengl.nimble: -------------------------------------------------------------------------------- 1 | [Package] 2 | name: "opengl" 3 | version: "1.0.1" 4 | author: "Andreas Rumpf" 5 | description: "an OpenGL wrapper" 6 | license: "MIT" 7 | 8 | srcDir: "src" 9 | 10 | [Deps] 11 | requires: "nim >= 0.10.3, x11" 12 | -------------------------------------------------------------------------------- /src/glu.nim: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # Adaption of the delphi3d.net OpenGL units to FreePascal 4 | # Sebastian Guenther (sg@freepascal.org) in 2002 5 | # These units are free to use 6 | #****************************************************************************** 7 | # Converted to Delphi by Tom Nuydens (tom@delphi3d.net) 8 | # For the latest updates, visit Delphi3D: http://www.delphi3d.net 9 | #****************************************************************************** 10 | 11 | import opengl 12 | 13 | {.deadCodeElim: on.} 14 | 15 | when defined(windows): 16 | {.push, callconv: stdcall.} 17 | else: 18 | {.push, callconv: cdecl.} 19 | 20 | when defined(windows): 21 | const 22 | dllname = "glu32.dll" 23 | elif defined(macosx): 24 | const 25 | dllname = "/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib" 26 | else: 27 | const 28 | dllname = "libGLU.so.1" 29 | 30 | type 31 | ViewPortArray* = array[0..3, GLint] 32 | T16dArray* = array[0..15, GLdouble] 33 | CallBack* = proc () {.cdecl.} 34 | T3dArray* = array[0..2, GLdouble] 35 | T4pArray* = array[0..3, pointer] 36 | T4fArray* = array[0..3, GLfloat] 37 | 38 | {.deprecated: [ 39 | TViewPortArray: ViewPortArray, 40 | TCallBack: CallBack, 41 | ].} 42 | 43 | type 44 | GLUnurbs*{.final.} = ptr object 45 | GLUquadric*{.final.} = ptr object 46 | GLUtesselator*{.final.} = ptr object 47 | GLUnurbsObj* = GLUnurbs 48 | GLUquadricObj* = GLUquadric 49 | GLUtesselatorObj* = GLUtesselator 50 | GLUtriangulatorObj* = GLUtesselator 51 | 52 | proc gluErrorString*(errCode: GLenum): cstring{.dynlib: dllname, 53 | importc: "gluErrorString".} 54 | when defined(Windows): 55 | proc gluErrorUnicodeStringEXT*(errCode: GLenum): ptr int16{.dynlib: dllname, 56 | importc: "gluErrorUnicodeStringEXT".} 57 | proc gluGetString*(name: GLenum): cstring{.dynlib: dllname, 58 | importc: "gluGetString".} 59 | proc gluOrtho2D*(left, right, bottom, top: GLdouble){.dynlib: dllname, 60 | importc: "gluOrtho2D".} 61 | proc gluPerspective*(fovy, aspect, zNear, zFar: GLdouble){.dynlib: dllname, 62 | importc: "gluPerspective".} 63 | proc gluPickMatrix*(x, y, width, height: GLdouble, viewport: var ViewPortArray){. 64 | dynlib: dllname, importc: "gluPickMatrix".} 65 | proc gluLookAt*(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz: GLdouble){. 66 | dynlib: dllname, importc: "gluLookAt".} 67 | proc gluProject*(objx, objy, objz: GLdouble, 68 | modelMatrix, projMatrix: var T16dArray, 69 | viewport: var ViewPortArray, winx, winy, winz: ptr GLdouble): int{. 70 | dynlib: dllname, importc: "gluProject".} 71 | proc gluUnProject*(winx, winy, winz: GLdouble, 72 | modelMatrix, projMatrix: var T16dArray, 73 | viewport: var ViewPortArray, objx, objy, objz: ptr GLdouble): int{. 74 | dynlib: dllname, importc: "gluUnProject".} 75 | proc gluScaleImage*(format: GLenum, widthin, heightin: GLint, typein: GLenum, 76 | datain: pointer, widthout, heightout: GLint, 77 | typeout: GLenum, dataout: pointer): int{.dynlib: dllname, 78 | importc: "gluScaleImage".} 79 | proc gluBuild1DMipmaps*(target: GLenum, components, width: GLint, 80 | format, atype: GLenum, data: pointer): int{. 81 | dynlib: dllname, importc: "gluBuild1DMipmaps".} 82 | proc gluBuild2DMipmaps*(target: GLenum, components, width, height: GLint, 83 | format, atype: GLenum, data: pointer): int{. 84 | dynlib: dllname, importc: "gluBuild2DMipmaps".} 85 | proc gluNewQuadric*(): GLUquadric{.dynlib: dllname, importc: "gluNewQuadric".} 86 | proc gluDeleteQuadric*(state: GLUquadric){.dynlib: dllname, 87 | importc: "gluDeleteQuadric".} 88 | proc gluQuadricNormals*(quadObject: GLUquadric, normals: GLenum){. 89 | dynlib: dllname, importc: "gluQuadricNormals".} 90 | proc gluQuadricTexture*(quadObject: GLUquadric, textureCoords: GLboolean){. 91 | dynlib: dllname, importc: "gluQuadricTexture".} 92 | proc gluQuadricOrientation*(quadObject: GLUquadric, orientation: GLenum){. 93 | dynlib: dllname, importc: "gluQuadricOrientation".} 94 | proc gluQuadricDrawStyle*(quadObject: GLUquadric, drawStyle: GLenum){. 95 | dynlib: dllname, importc: "gluQuadricDrawStyle".} 96 | proc gluCylinder*(qobj: GLUquadric, baseRadius, topRadius, height: GLdouble, 97 | slices, stacks: GLint){.dynlib: dllname, 98 | importc: "gluCylinder".} 99 | proc gluDisk*(qobj: GLUquadric, innerRadius, outerRadius: GLdouble, 100 | slices, loops: GLint){.dynlib: dllname, importc: "gluDisk".} 101 | proc gluPartialDisk*(qobj: GLUquadric, innerRadius, outerRadius: GLdouble, 102 | slices, loops: GLint, startAngle, sweepAngle: GLdouble){. 103 | dynlib: dllname, importc: "gluPartialDisk".} 104 | proc gluSphere*(qobj: GLuquadric, radius: GLdouble, slices, stacks: GLint){. 105 | dynlib: dllname, importc: "gluSphere".} 106 | proc gluQuadricCallback*(qobj: GLUquadric, which: GLenum, fn: CallBack){. 107 | dynlib: dllname, importc: "gluQuadricCallback".} 108 | proc gluNewTess*(): GLUtesselator{.dynlib: dllname, importc: "gluNewTess".} 109 | proc gluDeleteTess*(tess: GLUtesselator){.dynlib: dllname, 110 | importc: "gluDeleteTess".} 111 | proc gluTessBeginPolygon*(tess: GLUtesselator, polygon_data: pointer){. 112 | dynlib: dllname, importc: "gluTessBeginPolygon".} 113 | proc gluTessBeginContour*(tess: GLUtesselator){.dynlib: dllname, 114 | importc: "gluTessBeginContour".} 115 | proc gluTessVertex*(tess: GLUtesselator, coords: var T3dArray, data: pointer){. 116 | dynlib: dllname, importc: "gluTessVertex".} 117 | proc gluTessEndContour*(tess: GLUtesselator){.dynlib: dllname, 118 | importc: "gluTessEndContour".} 119 | proc gluTessEndPolygon*(tess: GLUtesselator){.dynlib: dllname, 120 | importc: "gluTessEndPolygon".} 121 | proc gluTessProperty*(tess: GLUtesselator, which: GLenum, value: GLdouble){. 122 | dynlib: dllname, importc: "gluTessProperty".} 123 | proc gluTessNormal*(tess: GLUtesselator, x, y, z: GLdouble){.dynlib: dllname, 124 | importc: "gluTessNormal".} 125 | proc gluTessCallback*(tess: GLUtesselator, which: GLenum, fn: CallBack){. 126 | dynlib: dllname, importc: "gluTessCallback".} 127 | proc gluGetTessProperty*(tess: GLUtesselator, which: GLenum, value: ptr GLdouble){. 128 | dynlib: dllname, importc: "gluGetTessProperty".} 129 | proc gluNewNurbsRenderer*(): GLUnurbs{.dynlib: dllname, 130 | importc: "gluNewNurbsRenderer".} 131 | proc gluDeleteNurbsRenderer*(nobj: GLUnurbs){.dynlib: dllname, 132 | importc: "gluDeleteNurbsRenderer".} 133 | proc gluBeginSurface*(nobj: GLUnurbs){.dynlib: dllname, 134 | importc: "gluBeginSurface".} 135 | proc gluBeginCurve*(nobj: GLUnurbs){.dynlib: dllname, importc: "gluBeginCurve".} 136 | proc gluEndCurve*(nobj: GLUnurbs){.dynlib: dllname, importc: "gluEndCurve".} 137 | proc gluEndSurface*(nobj: GLUnurbs){.dynlib: dllname, importc: "gluEndSurface".} 138 | proc gluBeginTrim*(nobj: GLUnurbs){.dynlib: dllname, importc: "gluBeginTrim".} 139 | proc gluEndTrim*(nobj: GLUnurbs){.dynlib: dllname, importc: "gluEndTrim".} 140 | proc gluPwlCurve*(nobj: GLUnurbs, count: GLint, aarray: ptr GLfloat, 141 | stride: GLint, atype: GLenum){.dynlib: dllname, 142 | importc: "gluPwlCurve".} 143 | proc gluNurbsCurve*(nobj: GLUnurbs, nknots: GLint, knot: ptr GLfloat, 144 | stride: GLint, ctlarray: ptr GLfloat, order: GLint, 145 | atype: GLenum){.dynlib: dllname, importc: "gluNurbsCurve".} 146 | proc gluNurbsSurface*(nobj: GLUnurbs, sknot_count: GLint, sknot: ptr GLfloat, 147 | tknot_count: GLint, tknot: ptr GLfloat, 148 | s_stride, t_stride: GLint, ctlarray: ptr GLfloat, 149 | sorder, torder: GLint, atype: GLenum){.dynlib: dllname, 150 | importc: "gluNurbsSurface".} 151 | proc gluLoadSamplingMatrices*(nobj: GLUnurbs, 152 | modelMatrix, projMatrix: var T16dArray, 153 | viewport: var ViewPortArray){.dynlib: dllname, 154 | importc: "gluLoadSamplingMatrices".} 155 | proc gluNurbsProperty*(nobj: GLUnurbs, aproperty: GLenum, value: GLfloat){. 156 | dynlib: dllname, importc: "gluNurbsProperty".} 157 | proc gluGetNurbsProperty*(nobj: GLUnurbs, aproperty: GLenum, value: ptr GLfloat){. 158 | dynlib: dllname, importc: "gluGetNurbsProperty".} 159 | proc gluNurbsCallback*(nobj: GLUnurbs, which: GLenum, fn: CallBack){. 160 | dynlib: dllname, importc: "gluNurbsCallback".} 161 | #*** Callback function prototypes *** 162 | type # gluQuadricCallback 163 | GLUquadricErrorProc* = proc (p: GLenum) # gluTessCallback 164 | GLUtessBeginProc* = proc (p: GLenum) 165 | GLUtessEdgeFlagProc* = proc (p: GLboolean) 166 | GLUtessVertexProc* = proc (p: pointer) 167 | GLUtessEndProc* = proc () 168 | GLUtessErrorProc* = proc (p: GLenum) 169 | GLUtessCombineProc* = proc (p1: var T3dArray, p2: T4pArray, p3: T4fArray, 170 | p4: ptr pointer) 171 | GLUtessBeginDataProc* = proc (p1: GLenum, p2: pointer) 172 | GLUtessEdgeFlagDataProc* = proc (p1: GLboolean, p2: pointer) 173 | GLUtessVertexDataProc* = proc (p1, p2: pointer) 174 | GLUtessEndDataProc* = proc (p: pointer) 175 | GLUtessErrorDataProc* = proc (p1: GLenum, p2: pointer) 176 | GLUtessCombineDataProc* = proc (p1: var T3dArray, p2: var T4pArray, 177 | p3: var T4fArray, p4: ptr pointer, p5: pointer) # 178 | GLUnurbsErrorProc* = proc (p: GLenum) #*** Generic constants ****/ 179 | 180 | const # Version 181 | GLU_VERSION_1_1* = 1 182 | GLU_VERSION_1_2* = 1 # Errors: (return value 0 = no error) 183 | GLU_INVALID_ENUM* = 100900 184 | GLU_INVALID_VALUE* = 100901 185 | GLU_OUT_OF_MEMORY* = 100902 186 | GLU_INCOMPATIBLE_GL_VERSION* = 100903 # StringName 187 | GLU_VERSION* = 100800 188 | GLU_EXTENSIONS* = 100801 # Boolean 189 | GLU_TRUE* = GL_TRUE 190 | GLU_FALSE* = GL_FALSE #*** Quadric constants ****/ 191 | # QuadricNormal 192 | GLU_SMOOTH* = 100000 193 | GLU_FLAT* = 100001 194 | GLU_NONE* = 100002 # QuadricDrawStyle 195 | GLU_POINT* = 100010 196 | GLU_LINE* = 100011 197 | GLU_FILL* = 100012 198 | GLU_SILHOUETTE* = 100013 # QuadricOrientation 199 | GLU_OUTSIDE* = 100020 200 | GLU_INSIDE* = 100021 # Callback types: 201 | # GLU_ERROR = 100103; 202 | #*** Tesselation constants ****/ 203 | GLU_TESS_MAX_COORD* = 1.00000e+150 # TessProperty 204 | GLU_TESS_WINDING_RULE* = 100140 205 | GLU_TESS_BOUNDARY_ONLY* = 100141 206 | GLU_TESS_TOLERANCE* = 100142 # TessWinding 207 | GLU_TESS_WINDING_ODD* = 100130 208 | GLU_TESS_WINDING_NONZERO* = 100131 209 | GLU_TESS_WINDING_POSITIVE* = 100132 210 | GLU_TESS_WINDING_NEGATIVE* = 100133 211 | GLU_TESS_WINDING_ABS_GEQ_TWO* = 100134 # TessCallback 212 | GLU_TESS_BEGIN* = 100100 # void (CALLBACK*)(GLenum type) 213 | constGLU_TESS_VERTEX* = 100101 # void (CALLBACK*)(void *data) 214 | GLU_TESS_END* = 100102 # void (CALLBACK*)(void) 215 | GLU_TESS_ERROR* = 100103 # void (CALLBACK*)(GLenum errno) 216 | GLU_TESS_EDGE_FLAG* = 100104 # void (CALLBACK*)(GLboolean boundaryEdge) 217 | GLU_TESS_COMBINE* = 100105 # void (CALLBACK*)(GLdouble coords[3], 218 | # void *data[4], 219 | # GLfloat weight[4], 220 | # void **dataOut) 221 | GLU_TESS_BEGIN_DATA* = 100106 # void (CALLBACK*)(GLenum type, 222 | # void *polygon_data) 223 | GLU_TESS_VERTEX_DATA* = 100107 # void (CALLBACK*)(void *data, 224 | # void *polygon_data) 225 | GLU_TESS_END_DATA* = 100108 # void (CALLBACK*)(void *polygon_data) 226 | GLU_TESS_ERROR_DATA* = 100109 # void (CALLBACK*)(GLenum errno, 227 | # void *polygon_data) 228 | GLU_TESS_EDGE_FLAG_DATA* = 100110 # void (CALLBACK*)(GLboolean boundaryEdge, 229 | # void *polygon_data) 230 | GLU_TESS_COMBINE_DATA* = 100111 # void (CALLBACK*)(GLdouble coords[3], 231 | # void *data[4], 232 | # GLfloat weight[4], 233 | # void **dataOut, 234 | # void *polygon_data) 235 | # TessError 236 | GLU_TESS_ERROR1* = 100151 237 | GLU_TESS_ERROR2* = 100152 238 | GLU_TESS_ERROR3* = 100153 239 | GLU_TESS_ERROR4* = 100154 240 | GLU_TESS_ERROR5* = 100155 241 | GLU_TESS_ERROR6* = 100156 242 | GLU_TESS_ERROR7* = 100157 243 | GLU_TESS_ERROR8* = 100158 244 | GLU_TESS_MISSING_BEGIN_POLYGON* = GLU_TESS_ERROR1 245 | GLU_TESS_MISSING_BEGIN_CONTOUR* = GLU_TESS_ERROR2 246 | GLU_TESS_MISSING_END_POLYGON* = GLU_TESS_ERROR3 247 | GLU_TESS_MISSING_END_CONTOUR* = GLU_TESS_ERROR4 248 | GLU_TESS_COORD_TOO_LARGE* = GLU_TESS_ERROR5 249 | GLU_TESS_NEED_COMBINE_CALLBACK* = GLU_TESS_ERROR6 #*** NURBS constants ****/ 250 | # NurbsProperty 251 | GLU_AUTO_LOAD_MATRIX* = 100200 252 | GLU_CULLING* = 100201 253 | GLU_SAMPLING_TOLERANCE* = 100203 254 | GLU_DISPLAY_MODE* = 100204 255 | GLU_PARAMETRIC_TOLERANCE* = 100202 256 | GLU_SAMPLING_METHOD* = 100205 257 | GLU_U_STEP* = 100206 258 | GLU_V_STEP* = 100207 # NurbsSampling 259 | GLU_PATH_LENGTH* = 100215 260 | GLU_PARAMETRIC_ERROR* = 100216 261 | GLU_DOMAIN_DISTANCE* = 100217 # NurbsTrim 262 | GLU_MAP1_TRIM_2* = 100210 263 | GLU_MAP1_TRIM_3* = 100211 # NurbsDisplay 264 | # GLU_FILL = 100012; 265 | GLU_OUTLINE_POLYGON* = 100240 266 | GLU_OUTLINE_PATCH* = 100241 # NurbsCallback 267 | # GLU_ERROR = 100103; 268 | # NurbsErrors 269 | GLU_NURBS_ERROR1* = 100251 270 | GLU_NURBS_ERROR2* = 100252 271 | GLU_NURBS_ERROR3* = 100253 272 | GLU_NURBS_ERROR4* = 100254 273 | GLU_NURBS_ERROR5* = 100255 274 | GLU_NURBS_ERROR6* = 100256 275 | GLU_NURBS_ERROR7* = 100257 276 | GLU_NURBS_ERROR8* = 100258 277 | GLU_NURBS_ERROR9* = 100259 278 | GLU_NURBS_ERROR10* = 100260 279 | GLU_NURBS_ERROR11* = 100261 280 | GLU_NURBS_ERROR12* = 100262 281 | GLU_NURBS_ERROR13* = 100263 282 | GLU_NURBS_ERROR14* = 100264 283 | GLU_NURBS_ERROR15* = 100265 284 | GLU_NURBS_ERROR16* = 100266 285 | GLU_NURBS_ERROR17* = 100267 286 | GLU_NURBS_ERROR18* = 100268 287 | GLU_NURBS_ERROR19* = 100269 288 | GLU_NURBS_ERROR20* = 100270 289 | GLU_NURBS_ERROR21* = 100271 290 | GLU_NURBS_ERROR22* = 100272 291 | GLU_NURBS_ERROR23* = 100273 292 | GLU_NURBS_ERROR24* = 100274 293 | GLU_NURBS_ERROR25* = 100275 294 | GLU_NURBS_ERROR26* = 100276 295 | GLU_NURBS_ERROR27* = 100277 296 | GLU_NURBS_ERROR28* = 100278 297 | GLU_NURBS_ERROR29* = 100279 298 | GLU_NURBS_ERROR30* = 100280 299 | GLU_NURBS_ERROR31* = 100281 300 | GLU_NURBS_ERROR32* = 100282 301 | GLU_NURBS_ERROR33* = 100283 302 | GLU_NURBS_ERROR34* = 100284 303 | GLU_NURBS_ERROR35* = 100285 304 | GLU_NURBS_ERROR36* = 100286 305 | GLU_NURBS_ERROR37* = 100287 #*** Backwards compatibility for old tesselator ****/ 306 | 307 | proc gluBeginPolygon*(tess: GLUtesselator){.dynlib: dllname, 308 | importc: "gluBeginPolygon".} 309 | proc gluNextContour*(tess: GLUtesselator, atype: GLenum){.dynlib: dllname, 310 | importc: "gluNextContour".} 311 | proc gluEndPolygon*(tess: GLUtesselator){.dynlib: dllname, 312 | importc: "gluEndPolygon".} 313 | const # Contours types -- obsolete! 314 | GLU_CW* = 100120 315 | GLU_CCW* = 100121 316 | GLU_INTERIOR* = 100122 317 | GLU_EXTERIOR* = 100123 318 | GLU_UNKNOWN* = 100124 # Names without "TESS_" prefix 319 | GLU_BEGIN* = GLU_TESS_BEGIN 320 | GLU_VERTEX* = constGLU_TESS_VERTEX 321 | GLU_END* = GLU_TESS_END 322 | GLU_ERROR* = GLU_TESS_ERROR 323 | GLU_EDGE_FLAG* = GLU_TESS_EDGE_FLAG 324 | 325 | {.pop.} 326 | # implementation 327 | -------------------------------------------------------------------------------- /src/glut.nim: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # Adaption of the delphi3d.net OpenGL units to FreePascal 4 | # Sebastian Guenther (sg@freepascal.org) in 2002 5 | # These units are free to use 6 | # 7 | 8 | # Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. 9 | # This program is freely distributable without licensing fees and is 10 | # provided without guarantee or warrantee expressed or implied. This 11 | # program is -not- in the public domain. 12 | #****************************************************************************** 13 | # Converted to Delphi by Tom Nuydens (tom@delphi3d.net) 14 | # Contributions by Igor Karpov (glygrik@hotbox.ru) 15 | # For the latest updates, visit Delphi3D: http://www.delphi3d.net 16 | #****************************************************************************** 17 | 18 | import opengl 19 | 20 | {.deadCodeElim: on.} 21 | 22 | when defined(windows): 23 | const 24 | dllname = "glut32.dll" 25 | elif defined(macosx): 26 | const 27 | dllname = "/System/Library/Frameworks/GLUT.framework/GLUT" 28 | else: 29 | const 30 | dllname = "libglut.so.3" 31 | type 32 | TGlutVoidCallback* = proc (){.cdecl.} 33 | TGlut1IntCallback* = proc (value: cint){.cdecl.} 34 | TGlut2IntCallback* = proc (v1, v2: cint){.cdecl.} 35 | TGlut3IntCallback* = proc (v1, v2, v3: cint){.cdecl.} 36 | TGlut4IntCallback* = proc (v1, v2, v3, v4: cint){.cdecl.} 37 | TGlut1Char2IntCallback* = proc (c: int8, v1, v2: cint){.cdecl.} 38 | TGlut1UInt3IntCallback* = proc (u, v1, v2, v3: cint){.cdecl.} 39 | 40 | {.deprecated: [Pointer: pointer].} 41 | 42 | const 43 | GLUT_API_VERSION* = 3 44 | GLUT_XLIB_IMPLEMENTATION* = 12 # Display mode bit masks. 45 | GLUT_RGB* = 0 46 | GLUT_RGBA* = GLUT_RGB 47 | GLUT_INDEX* = 1 48 | GLUT_SINGLE* = 0 49 | GLUT_DOUBLE* = 2 50 | GLUT_ACCUM* = 4 51 | GLUT_ALPHA* = 8 52 | GLUT_DEPTH* = 16 53 | GLUT_STENCIL* = 32 54 | GLUT_MULTISAMPLE* = 128 55 | GLUT_STEREO* = 256 56 | GLUT_LUMINANCE* = 512 # Mouse buttons. 57 | GLUT_LEFT_BUTTON* = 0 58 | GLUT_MIDDLE_BUTTON* = 1 59 | GLUT_RIGHT_BUTTON* = 2 # Mouse button state. 60 | GLUT_DOWN* = 0 61 | GLUT_UP* = 1 # function keys 62 | GLUT_KEY_F1* = 1 63 | GLUT_KEY_F2* = 2 64 | GLUT_KEY_F3* = 3 65 | GLUT_KEY_F4* = 4 66 | GLUT_KEY_F5* = 5 67 | GLUT_KEY_F6* = 6 68 | GLUT_KEY_F7* = 7 69 | GLUT_KEY_F8* = 8 70 | GLUT_KEY_F9* = 9 71 | GLUT_KEY_F10* = 10 72 | GLUT_KEY_F11* = 11 73 | GLUT_KEY_F12* = 12 # directional keys 74 | GLUT_KEY_LEFT* = 100 75 | GLUT_KEY_UP* = 101 76 | GLUT_KEY_RIGHT* = 102 77 | GLUT_KEY_DOWN* = 103 78 | GLUT_KEY_PAGE_UP* = 104 79 | GLUT_KEY_PAGE_DOWN* = 105 80 | GLUT_KEY_HOME* = 106 81 | GLUT_KEY_END* = 107 82 | GLUT_KEY_INSERT* = 108 # Entry/exit state. 83 | GLUT_LEFT* = 0 84 | GLUT_ENTERED* = 1 # Menu usage state. 85 | GLUT_MENU_NOT_IN_USE* = 0 86 | GLUT_MENU_IN_USE* = 1 # Visibility state. 87 | GLUT_NOT_VISIBLE* = 0 88 | GLUT_VISIBLE* = 1 # Window status state. 89 | GLUT_HIDDEN* = 0 90 | GLUT_FULLY_RETAINED* = 1 91 | GLUT_PARTIALLY_RETAINED* = 2 92 | GLUT_FULLY_COVERED* = 3 # Color index component selection values. 93 | GLUT_RED* = 0 94 | GLUT_GREEN* = 1 95 | GLUT_BLUE* = 2 # Layers for use. 96 | GLUT_NORMAL* = 0 97 | GLUT_OVERLAY* = 1 98 | 99 | when defined(Windows): 100 | const # Stroke font constants (use these in GLUT program). 101 | GLUT_STROKE_ROMAN* = cast[pointer](0) 102 | GLUT_STROKE_MONO_ROMAN* = cast[pointer](1) # Bitmap font constants (use these in GLUT program). 103 | GLUT_BITMAP_9_BY_15* = cast[pointer](2) 104 | GLUT_BITMAP_8_BY_13* = cast[pointer](3) 105 | GLUT_BITMAP_TIMES_ROMAN_10* = cast[pointer](4) 106 | GLUT_BITMAP_TIMES_ROMAN_24* = cast[pointer](5) 107 | GLUT_BITMAP_HELVETICA_10* = cast[pointer](6) 108 | GLUT_BITMAP_HELVETICA_12* = cast[pointer](7) 109 | GLUT_BITMAP_HELVETICA_18* = cast[pointer](8) 110 | else: 111 | var # Stroke font constants (use these in GLUT program). 112 | GLUT_STROKE_ROMAN*: pointer 113 | GLUT_STROKE_MONO_ROMAN*: pointer # Bitmap font constants (use these in GLUT program). 114 | GLUT_BITMAP_9_BY_15*: pointer 115 | GLUT_BITMAP_8_BY_13*: pointer 116 | GLUT_BITMAP_TIMES_ROMAN_10*: pointer 117 | GLUT_BITMAP_TIMES_ROMAN_24*: pointer 118 | GLUT_BITMAP_HELVETICA_10*: pointer 119 | GLUT_BITMAP_HELVETICA_12*: pointer 120 | GLUT_BITMAP_HELVETICA_18*: pointer 121 | const # glutGet parameters. 122 | GLUT_WINDOW_X* = 100 123 | GLUT_WINDOW_Y* = 101 124 | GLUT_WINDOW_WIDTH* = 102 125 | GLUT_WINDOW_HEIGHT* = 103 126 | GLUT_WINDOW_BUFFER_SIZE* = 104 127 | GLUT_WINDOW_STENCIL_SIZE* = 105 128 | GLUT_WINDOW_DEPTH_SIZE* = 106 129 | GLUT_WINDOW_RED_SIZE* = 107 130 | GLUT_WINDOW_GREEN_SIZE* = 108 131 | GLUT_WINDOW_BLUE_SIZE* = 109 132 | GLUT_WINDOW_ALPHA_SIZE* = 110 133 | GLUT_WINDOW_ACCUM_RED_SIZE* = 111 134 | GLUT_WINDOW_ACCUM_GREEN_SIZE* = 112 135 | GLUT_WINDOW_ACCUM_BLUE_SIZE* = 113 136 | GLUT_WINDOW_ACCUM_ALPHA_SIZE* = 114 137 | GLUT_WINDOW_DOUBLEBUFFER* = 115 138 | GLUT_WINDOW_RGBA* = 116 139 | GLUT_WINDOW_PARENT* = 117 140 | GLUT_WINDOW_NUM_CHILDREN* = 118 141 | GLUT_WINDOW_COLORMAP_SIZE* = 119 142 | GLUT_WINDOW_NUM_SAMPLES* = 120 143 | GLUT_WINDOW_STEREO* = 121 144 | GLUT_WINDOW_CURSOR* = 122 145 | GLUT_SCREEN_WIDTH* = 200 146 | GLUT_SCREEN_HEIGHT* = 201 147 | GLUT_SCREEN_WIDTH_MM* = 202 148 | GLUT_SCREEN_HEIGHT_MM* = 203 149 | GLUT_MENU_NUM_ITEMS* = 300 150 | GLUT_DISPLAY_MODE_POSSIBLE* = 400 151 | GLUT_INIT_WINDOW_X* = 500 152 | GLUT_INIT_WINDOW_Y* = 501 153 | GLUT_INIT_WINDOW_WIDTH* = 502 154 | GLUT_INIT_WINDOW_HEIGHT* = 503 155 | constGLUT_INIT_DISPLAY_MODE* = 504 156 | GLUT_ELAPSED_TIME* = 700 157 | GLUT_WINDOW_FORMAT_ID* = 123 # glutDeviceGet parameters. 158 | GLUT_HAS_KEYBOARD* = 600 159 | GLUT_HAS_MOUSE* = 601 160 | GLUT_HAS_SPACEBALL* = 602 161 | GLUT_HAS_DIAL_AND_BUTTON_BOX* = 603 162 | GLUT_HAS_TABLET* = 604 163 | GLUT_NUM_MOUSE_BUTTONS* = 605 164 | GLUT_NUM_SPACEBALL_BUTTONS* = 606 165 | GLUT_NUM_BUTTON_BOX_BUTTONS* = 607 166 | GLUT_NUM_DIALS* = 608 167 | GLUT_NUM_TABLET_BUTTONS* = 609 168 | GLUT_DEVICE_IGNORE_KEY_REPEAT* = 610 169 | GLUT_DEVICE_KEY_REPEAT* = 611 170 | GLUT_HAS_JOYSTICK* = 612 171 | GLUT_OWNS_JOYSTICK* = 613 172 | GLUT_JOYSTICK_BUTTONS* = 614 173 | GLUT_JOYSTICK_AXES* = 615 174 | GLUT_JOYSTICK_POLL_RATE* = 616 # glutLayerGet parameters. 175 | GLUT_OVERLAY_POSSIBLE* = 800 176 | GLUT_LAYER_IN_USE* = 801 177 | GLUT_HAS_OVERLAY* = 802 178 | GLUT_TRANSPARENT_INDEX* = 803 179 | GLUT_NORMAL_DAMAGED* = 804 180 | GLUT_OVERLAY_DAMAGED* = 805 # glutVideoResizeGet parameters. 181 | GLUT_VIDEO_RESIZE_POSSIBLE* = 900 182 | GLUT_VIDEO_RESIZE_IN_USE* = 901 183 | GLUT_VIDEO_RESIZE_X_DELTA* = 902 184 | GLUT_VIDEO_RESIZE_Y_DELTA* = 903 185 | GLUT_VIDEO_RESIZE_WIDTH_DELTA* = 904 186 | GLUT_VIDEO_RESIZE_HEIGHT_DELTA* = 905 187 | GLUT_VIDEO_RESIZE_X* = 906 188 | GLUT_VIDEO_RESIZE_Y* = 907 189 | GLUT_VIDEO_RESIZE_WIDTH* = 908 190 | GLUT_VIDEO_RESIZE_HEIGHT* = 909 # glutGetModifiers return mask. 191 | GLUT_ACTIVE_SHIFT* = 1 192 | GLUT_ACTIVE_CTRL* = 2 193 | GLUT_ACTIVE_ALT* = 4 # glutSetCursor parameters. 194 | # Basic arrows. 195 | GLUT_CURSOR_RIGHT_ARROW* = 0 196 | GLUT_CURSOR_LEFT_ARROW* = 1 # Symbolic cursor shapes. 197 | GLUT_CURSOR_INFO* = 2 198 | GLUT_CURSOR_DESTROY* = 3 199 | GLUT_CURSOR_HELP* = 4 200 | GLUT_CURSOR_CYCLE* = 5 201 | GLUT_CURSOR_SPRAY* = 6 202 | GLUT_CURSOR_WAIT* = 7 203 | GLUT_CURSOR_TEXT* = 8 204 | GLUT_CURSOR_CROSSHAIR* = 9 # Directional cursors. 205 | GLUT_CURSOR_UP_DOWN* = 10 206 | GLUT_CURSOR_LEFT_RIGHT* = 11 # Sizing cursors. 207 | GLUT_CURSOR_TOP_SIDE* = 12 208 | GLUT_CURSOR_BOTTOM_SIDE* = 13 209 | GLUT_CURSOR_LEFT_SIDE* = 14 210 | GLUT_CURSOR_RIGHT_SIDE* = 15 211 | GLUT_CURSOR_TOP_LEFT_CORNER* = 16 212 | GLUT_CURSOR_TOP_RIGHT_CORNER* = 17 213 | GLUT_CURSOR_BOTTOM_RIGHT_CORNER* = 18 214 | GLUT_CURSOR_BOTTOM_LEFT_CORNER* = 19 # Inherit from parent window. 215 | GLUT_CURSOR_INHERIT* = 100 # Blank cursor. 216 | GLUT_CURSOR_NONE* = 101 # Fullscreen crosshair (if available). 217 | GLUT_CURSOR_FULL_CROSSHAIR* = 102 # GLUT device control sub-API. 218 | # glutSetKeyRepeat modes. 219 | GLUT_KEY_REPEAT_OFF* = 0 220 | GLUT_KEY_REPEAT_ON* = 1 221 | GLUT_KEY_REPEAT_DEFAULT* = 2 # Joystick button masks. 222 | GLUT_JOYSTICK_BUTTON_A* = 1 223 | GLUT_JOYSTICK_BUTTON_B* = 2 224 | GLUT_JOYSTICK_BUTTON_C* = 4 225 | GLUT_JOYSTICK_BUTTON_D* = 8 # GLUT game mode sub-API. 226 | # glutGameModeGet. 227 | GLUT_GAME_MODE_ACTIVE* = 0 228 | GLUT_GAME_MODE_POSSIBLE* = 1 229 | GLUT_GAME_MODE_WIDTH* = 2 230 | GLUT_GAME_MODE_HEIGHT* = 3 231 | GLUT_GAME_MODE_PIXEL_DEPTH* = 4 232 | GLUT_GAME_MODE_REFRESH_RATE* = 5 233 | GLUT_GAME_MODE_DISPLAY_CHANGED* = 6 # GLUT initialization sub-API. 234 | 235 | {.push dynlib: dllname, importc.} 236 | proc glutInit*(argcp: ptr cint, argv: pointer) 237 | 238 | proc glutInit*() = 239 | ## version that passes `argc` and `argc` implicitely. 240 | var 241 | cmdLine {.importc: "cmdLine".}: array[0..255, cstring] 242 | cmdCount {.importc: "cmdCount".}: cint 243 | glutInit(addr(cmdCount), addr(cmdLine)) 244 | 245 | proc glutInitDisplayMode*(mode: int16) 246 | proc glutInitDisplayString*(str: cstring) 247 | proc glutInitWindowPosition*(x, y: int) 248 | proc glutInitWindowSize*(width, height: int) 249 | proc glutMainLoop*() 250 | # GLUT window sub-API. 251 | proc glutCreateWindow*(title: cstring): int 252 | proc glutCreateSubWindow*(win, x, y, width, height: int): int 253 | proc glutDestroyWindow*(win: int) 254 | proc glutPostRedisplay*() 255 | proc glutPostWindowRedisplay*(win: int) 256 | proc glutSwapBuffers*() 257 | proc glutSetWindow*(win: int) 258 | proc glutSetWindowTitle*(title: cstring) 259 | proc glutSetIconTitle*(title: cstring) 260 | proc glutPositionWindow*(x, y: int) 261 | proc glutReshapeWindow*(width, height: int) 262 | proc glutPopWindow*() 263 | proc glutPushWindow*() 264 | proc glutIconifyWindow*() 265 | proc glutShowWindow*() 266 | proc glutHideWindow*() 267 | proc glutFullScreen*() 268 | proc glutSetCursor*(cursor: int) 269 | proc glutWarpPointer*(x, y: int) 270 | # GLUT overlay sub-API. 271 | proc glutEstablishOverlay*() 272 | proc glutRemoveOverlay*() 273 | proc glutUseLayer*(layer: GLenum) 274 | proc glutPostOverlayRedisplay*() 275 | proc glutPostWindowOverlayRedisplay*(win: int) 276 | proc glutShowOverlay*() 277 | proc glutHideOverlay*() 278 | # GLUT menu sub-API. 279 | proc glutCreateMenu*(callback: TGlut1IntCallback): int 280 | proc glutDestroyMenu*(menu: int) 281 | proc glutSetMenu*(menu: int) 282 | proc glutAddMenuEntry*(caption: cstring, value: int) 283 | proc glutAddSubMenu*(caption: cstring, submenu: int) 284 | proc glutChangeToMenuEntry*(item: int, caption: cstring, value: int) 285 | proc glutChangeToSubMenu*(item: int, caption: cstring, submenu: int) 286 | proc glutRemoveMenuItem*(item: int) 287 | proc glutAttachMenu*(button: int) 288 | proc glutDetachMenu*(button: int) 289 | # GLUT window callback sub-API. 290 | proc glutDisplayFunc*(f: TGlutVoidCallback) 291 | proc glutReshapeFunc*(f: TGlut2IntCallback) 292 | proc glutKeyboardFunc*(f: TGlut1Char2IntCallback) 293 | proc glutMouseFunc*(f: TGlut4IntCallback) 294 | proc glutMotionFunc*(f: TGlut2IntCallback) 295 | proc glutPassiveMotionFunc*(f: TGlut2IntCallback) 296 | proc glutEntryFunc*(f: TGlut1IntCallback) 297 | proc glutVisibilityFunc*(f: TGlut1IntCallback) 298 | proc glutIdleFunc*(f: TGlutVoidCallback) 299 | proc glutTimerFunc*(millis: int16, f: TGlut1IntCallback, value: int) 300 | proc glutMenuStateFunc*(f: TGlut1IntCallback) 301 | proc glutSpecialFunc*(f: TGlut3IntCallback) 302 | proc glutSpaceballMotionFunc*(f: TGlut3IntCallback) 303 | proc glutSpaceballRotateFunc*(f: TGlut3IntCallback) 304 | proc glutSpaceballButtonFunc*(f: TGlut2IntCallback) 305 | proc glutButtonBoxFunc*(f: TGlut2IntCallback) 306 | proc glutDialsFunc*(f: TGlut2IntCallback) 307 | proc glutTabletMotionFunc*(f: TGlut2IntCallback) 308 | proc glutTabletButtonFunc*(f: TGlut4IntCallback) 309 | proc glutMenuStatusFunc*(f: TGlut3IntCallback) 310 | proc glutOverlayDisplayFunc*(f: TGlutVoidCallback) 311 | proc glutWindowStatusFunc*(f: TGlut1IntCallback) 312 | proc glutKeyboardUpFunc*(f: TGlut1Char2IntCallback) 313 | proc glutSpecialUpFunc*(f: TGlut3IntCallback) 314 | proc glutJoystickFunc*(f: TGlut1UInt3IntCallback, pollInterval: int) 315 | # GLUT color index sub-API. 316 | proc glutSetColor*(cell: int, red, green, blue: GLfloat) 317 | proc glutGetColor*(ndx, component: int): GLfloat 318 | proc glutCopyColormap*(win: int) 319 | # GLUT state retrieval sub-API. 320 | # GLUT extension support sub-API 321 | proc glutExtensionSupported*(name: cstring): int 322 | # GLUT font sub-API 323 | proc glutBitmapCharacter*(font: pointer, character: int) 324 | proc glutBitmapWidth*(font: pointer, character: int): int 325 | proc glutStrokeCharacter*(font: pointer, character: int) 326 | proc glutStrokeWidth*(font: pointer, character: int): int 327 | proc glutBitmapLength*(font: pointer, str: cstring): int 328 | proc glutStrokeLength*(font: pointer, str: cstring): int 329 | # GLUT pre-built models sub-API 330 | proc glutWireSphere*(radius: GLdouble, slices, stacks: GLint) 331 | proc glutSolidSphere*(radius: GLdouble, slices, stacks: GLint) 332 | proc glutWireCone*(base, height: GLdouble, slices, stacks: GLint) 333 | proc glutSolidCone*(base, height: GLdouble, slices, stacks: GLint) 334 | proc glutWireCube*(size: GLdouble) 335 | proc glutSolidCube*(size: GLdouble) 336 | proc glutWireTorus*(innerRadius, outerRadius: GLdouble, sides, rings: GLint) 337 | proc glutSolidTorus*(innerRadius, outerRadius: GLdouble, sides, rings: GLint) 338 | proc glutWireDodecahedron*() 339 | proc glutSolidDodecahedron*() 340 | proc glutWireTeapot*(size: GLdouble) 341 | proc glutSolidTeapot*(size: GLdouble) 342 | proc glutWireOctahedron*() 343 | proc glutSolidOctahedron*() 344 | proc glutWireTetrahedron*() 345 | proc glutSolidTetrahedron*() 346 | proc glutWireIcosahedron*() 347 | proc glutSolidIcosahedron*() 348 | # GLUT video resize sub-API. 349 | proc glutVideoResizeGet*(param: GLenum): int 350 | proc glutSetupVideoResizing*() 351 | proc glutStopVideoResizing*() 352 | proc glutVideoResize*(x, y, width, height: int) 353 | proc glutVideoPan*(x, y, width, height: int) 354 | # GLUT debugging sub-API. 355 | proc glutReportErrors*() 356 | # GLUT device control sub-API. 357 | proc glutIgnoreKeyRepeat*(ignore: int) 358 | proc glutSetKeyRepeat*(repeatMode: int) 359 | proc glutForceJoystickFunc*() 360 | # GLUT game mode sub-API. 361 | #example glutGameModeString('1280x1024:32@75'); 362 | proc glutGameModeString*(AString: cstring) 363 | proc glutLeaveGameMode*() 364 | proc glutGameModeGet*(mode: GLenum): int 365 | # implementation 366 | {.pop.} # dynlib: dllname, importc 367 | -------------------------------------------------------------------------------- /src/glx.nim: -------------------------------------------------------------------------------- 1 | # 2 | # 3 | # Translation of the Mesa GLX headers for FreePascal 4 | # Copyright (C) 1999 Sebastian Guenther 5 | # 6 | # 7 | # Mesa 3-D graphics library 8 | # Version: 3.0 9 | # Copyright (C) 1995-1998 Brian Paul 10 | # 11 | # This library is free software; you can redistribute it and/or 12 | # modify it under the terms of the GNU Library General Public 13 | # License as published by the Free Software Foundation; either 14 | # version 2 of the License, or (at your option) any later version. 15 | # 16 | # This library is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | # Library General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU Library General Public 22 | # License along with this library; if not, write to the Free 23 | # Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 | # 25 | 26 | import X, XLib, XUtil, opengl 27 | 28 | {.deadCodeElim: on.} 29 | 30 | when defined(windows): 31 | const 32 | dllname = "GL.dll" 33 | elif defined(macosx): 34 | const 35 | dllname = "/usr/X11R6/lib/libGL.dylib" 36 | else: 37 | const 38 | dllname = "libGL.so" 39 | const 40 | GLX_USE_GL* = 1'i32 41 | GLX_BUFFER_SIZE* = 2'i32 42 | GLX_LEVEL* = 3'i32 43 | GLX_RGBA* = 4'i32 44 | GLX_DOUBLEBUFFER* = 5'i32 45 | GLX_STEREO* = 6'i32 46 | GLX_AUX_BUFFERS* = 7'i32 47 | GLX_RED_SIZE* = 8'i32 48 | GLX_GREEN_SIZE* = 9'i32 49 | GLX_BLUE_SIZE* = 10'i32 50 | GLX_ALPHA_SIZE* = 11'i32 51 | GLX_DEPTH_SIZE* = 12'i32 52 | GLX_STENCIL_SIZE* = 13'i32 53 | GLX_ACCUM_RED_SIZE* = 14'i32 54 | GLX_ACCUM_GREEN_SIZE* = 15'i32 55 | GLX_ACCUM_BLUE_SIZE* = 16'i32 56 | GLX_ACCUM_ALPHA_SIZE* = 17'i32 # GLX_EXT_visual_info extension 57 | GLX_X_VISUAL_TYPE_EXT* = 0x00000022 58 | GLX_TRANSPARENT_TYPE_EXT* = 0x00000023 59 | GLX_TRANSPARENT_INDEX_VALUE_EXT* = 0x00000024 60 | GLX_TRANSPARENT_RED_VALUE_EXT* = 0x00000025 61 | GLX_TRANSPARENT_GREEN_VALUE_EXT* = 0x00000026 62 | GLX_TRANSPARENT_BLUE_VALUE_EXT* = 0x00000027 63 | GLX_TRANSPARENT_ALPHA_VALUE_EXT* = 0x00000028 # Error codes returned by glXGetConfig: 64 | GLX_BAD_SCREEN* = 1 65 | GLX_BAD_ATTRIBUTE* = 2 66 | GLX_NO_EXTENSION* = 3 67 | GLX_BAD_VISUAL* = 4 68 | GLX_BAD_CONTEXT* = 5 69 | GLX_BAD_VALUE* = 6 70 | GLX_BAD_ENUM* = 7 # GLX 1.1 and later: 71 | GLX_VENDOR* = 1 72 | GLX_VERSION* = 2 73 | GLX_EXTENSIONS* = 3 # GLX_visual_info extension 74 | GLX_TRUE_COLOR_EXT* = 0x00008002 75 | GLX_DIRECT_COLOR_EXT* = 0x00008003 76 | GLX_PSEUDO_COLOR_EXT* = 0x00008004 77 | GLX_STATIC_COLOR_EXT* = 0x00008005 78 | GLX_GRAY_SCALE_EXT* = 0x00008006 79 | GLX_STATIC_GRAY_EXT* = 0x00008007 80 | GLX_NONE_EXT* = 0x00008000 81 | GLX_TRANSPARENT_RGB_EXT* = 0x00008008 82 | GLX_TRANSPARENT_INDEX_EXT* = 0x00008009 83 | 84 | type # From XLib: 85 | XPixmap* = TXID 86 | XFont* = TXID 87 | XColormap* = TXID 88 | GLXContext* = pointer 89 | GLXPixmap* = TXID 90 | GLXDrawable* = TXID 91 | GLXContextID* = TXID 92 | TXPixmap* = XPixmap 93 | TXFont* = XFont 94 | TXColormap* = XColormap 95 | TGLXContext* = GLXContext 96 | TGLXPixmap* = GLXPixmap 97 | TGLXDrawable* = GLXDrawable 98 | TGLXContextID* = GLXContextID 99 | 100 | proc glXChooseVisual*(dpy: PDisplay, screen: int, attribList: ptr int32): PXVisualInfo{. 101 | cdecl, dynlib: dllname, importc: "glXChooseVisual".} 102 | proc glXCreateContext*(dpy: PDisplay, vis: PXVisualInfo, shareList: GLXContext, 103 | direct: bool): GLXContext{.cdecl, dynlib: dllname, 104 | importc: "glXCreateContext".} 105 | proc glXDestroyContext*(dpy: PDisplay, ctx: GLXContext){.cdecl, dynlib: dllname, 106 | importc: "glXDestroyContext".} 107 | proc glXMakeCurrent*(dpy: PDisplay, drawable: GLXDrawable, ctx: GLXContext): bool{. 108 | cdecl, dynlib: dllname, importc: "glXMakeCurrent".} 109 | proc glXCopyContext*(dpy: PDisplay, src, dst: GLXContext, mask: int32){.cdecl, 110 | dynlib: dllname, importc: "glXCopyContext".} 111 | proc glXSwapBuffers*(dpy: PDisplay, drawable: GLXDrawable){.cdecl, 112 | dynlib: dllname, importc: "glXSwapBuffers".} 113 | proc glXCreateGLXPixmap*(dpy: PDisplay, visual: PXVisualInfo, pixmap: XPixmap): GLXPixmap{. 114 | cdecl, dynlib: dllname, importc: "glXCreateGLXPixmap".} 115 | proc glXDestroyGLXPixmap*(dpy: PDisplay, pixmap: GLXPixmap){.cdecl, 116 | dynlib: dllname, importc: "glXDestroyGLXPixmap".} 117 | proc glXQueryExtension*(dpy: PDisplay, errorb, event: var int): bool{.cdecl, 118 | dynlib: dllname, importc: "glXQueryExtension".} 119 | proc glXQueryVersion*(dpy: PDisplay, maj, min: var int): bool{.cdecl, 120 | dynlib: dllname, importc: "glXQueryVersion".} 121 | proc glXIsDirect*(dpy: PDisplay, ctx: GLXContext): bool{.cdecl, dynlib: dllname, 122 | importc: "glXIsDirect".} 123 | proc glXGetConfig*(dpy: PDisplay, visual: PXVisualInfo, attrib: int, 124 | value: var int): int{.cdecl, dynlib: dllname, 125 | importc: "glXGetConfig".} 126 | proc glXGetCurrentContext*(): GLXContext{.cdecl, dynlib: dllname, 127 | importc: "glXGetCurrentContext".} 128 | proc glXGetCurrentDrawable*(): GLXDrawable{.cdecl, dynlib: dllname, 129 | importc: "glXGetCurrentDrawable".} 130 | proc glXWaitGL*(){.cdecl, dynlib: dllname, importc: "glXWaitGL".} 131 | proc glXWaitX*(){.cdecl, dynlib: dllname, importc: "glXWaitX".} 132 | proc glXUseXFont*(font: XFont, first, count, list: int){.cdecl, dynlib: dllname, 133 | importc: "glXUseXFont".} 134 | # GLX 1.1 and later 135 | proc glXQueryExtensionsString*(dpy: PDisplay, screen: int): cstring{.cdecl, 136 | dynlib: dllname, importc: "glXQueryExtensionsString".} 137 | proc glXQueryServerString*(dpy: PDisplay, screen, name: int): cstring{.cdecl, 138 | dynlib: dllname, importc: "glXQueryServerString".} 139 | proc glXGetClientString*(dpy: PDisplay, name: int): cstring{.cdecl, 140 | dynlib: dllname, importc: "glXGetClientString".} 141 | # Mesa GLX Extensions 142 | proc glXCreateGLXPixmapMESA*(dpy: PDisplay, visual: PXVisualInfo, 143 | pixmap: XPixmap, cmap: XColormap): GLXPixmap{. 144 | cdecl, dynlib: dllname, importc: "glXCreateGLXPixmapMESA".} 145 | proc glXReleaseBufferMESA*(dpy: PDisplay, d: GLXDrawable): bool{.cdecl, 146 | dynlib: dllname, importc: "glXReleaseBufferMESA".} 147 | proc glXCopySubBufferMESA*(dpy: PDisplay, drawbale: GLXDrawable, 148 | x, y, width, height: int){.cdecl, dynlib: dllname, 149 | importc: "glXCopySubBufferMESA".} 150 | proc glXGetVideoSyncSGI*(counter: var int32): int{.cdecl, dynlib: dllname, 151 | importc: "glXGetVideoSyncSGI".} 152 | proc glXWaitVideoSyncSGI*(divisor, remainder: int, count: var int32): int{. 153 | cdecl, dynlib: dllname, importc: "glXWaitVideoSyncSGI".} 154 | # implementation 155 | -------------------------------------------------------------------------------- /src/wingl.nim: -------------------------------------------------------------------------------- 1 | import opengl, windows 2 | 3 | {.deadCodeElim: on.} 4 | 5 | proc wglGetExtensionsStringARB*(hdc: HDC): cstring{.dynlib: dllname, 6 | importc: "wglGetExtensionsStringARB".} 7 | const 8 | WGL_FRONT_COLOR_BUFFER_BIT_ARB* = 0x00000001 9 | WGL_BACK_COLOR_BUFFER_BIT_ARB* = 0x00000002 10 | WGL_DEPTH_BUFFER_BIT_ARB* = 0x00000004 11 | WGL_STENCIL_BUFFER_BIT_ARB* = 0x00000008 12 | 13 | proc WinChoosePixelFormat*(DC: HDC, p2: PPixelFormatDescriptor): int{. 14 | dynlib: "gdi32", importc: "ChoosePixelFormat".} 15 | proc wglCreateBufferRegionARB*(hDC: HDC, iLayerPlane: TGLint, uType: TGLuint): THandle{. 16 | dynlib: dllname, importc: "wglCreateBufferRegionARB".} 17 | proc wglDeleteBufferRegionARB*(hRegion: THandle){.dynlib: dllname, 18 | importc: "wglDeleteBufferRegionARB".} 19 | proc wglSaveBufferRegionARB*(hRegion: THandle, x: TGLint, y: TGLint, 20 | width: TGLint, height: TGLint): BOOL{. 21 | dynlib: dllname, importc: "wglSaveBufferRegionARB".} 22 | proc wglRestoreBufferRegionARB*(hRegion: THandle, x: TGLint, y: TGLint, 23 | width: TGLint, height: TGLint, xSrc: TGLint, 24 | ySrc: TGLint): BOOL{.dynlib: dllname, 25 | importc: "wglRestoreBufferRegionARB".} 26 | proc wglAllocateMemoryNV*(size: TGLsizei, readFrequency: TGLfloat, 27 | writeFrequency: TGLfloat, priority: TGLfloat): PGLvoid{. 28 | dynlib: dllname, importc: "wglAllocateMemoryNV".} 29 | proc wglFreeMemoryNV*(pointer: PGLvoid){.dynlib: dllname, 30 | importc: "wglFreeMemoryNV".} 31 | const 32 | WGL_IMAGE_BUFFER_MIN_ACCESS_I3D* = 0x00000001 33 | WGL_IMAGE_BUFFER_LOCK_I3D* = 0x00000002 34 | 35 | proc wglCreateImageBufferI3D*(hDC: HDC, dwSize: DWORD, uFlags: UINT): PGLvoid{. 36 | dynlib: dllname, importc: "wglCreateImageBufferI3D".} 37 | proc wglDestroyImageBufferI3D*(hDC: HDC, pAddress: PGLvoid): BOOL{. 38 | dynlib: dllname, importc: "wglDestroyImageBufferI3D".} 39 | proc wglAssociateImageBufferEventsI3D*(hdc: HDC, pEvent: PHandle, 40 | pAddress: PGLvoid, pSize: PDWORD, 41 | count: UINT): BOOL{.dynlib: dllname, 42 | importc: "wglAssociateImageBufferEventsI3D".} 43 | proc wglReleaseImageBufferEventsI3D*(hdc: HDC, pAddress: PGLvoid, count: UINT): BOOL{. 44 | dynlib: dllname, importc: "wglReleaseImageBufferEventsI3D".} 45 | proc wglEnableFrameLockI3D*(): BOOL{.dynlib: dllname, 46 | importc: "wglEnableFrameLockI3D".} 47 | proc wglDisableFrameLockI3D*(): BOOL{.dynlib: dllname, 48 | importc: "wglDisableFrameLockI3D".} 49 | proc wglIsEnabledFrameLockI3D*(pFlag: PBOOL): BOOL{.dynlib: dllname, 50 | importc: "wglIsEnabledFrameLockI3D".} 51 | proc wglQueryFrameLockMasterI3D*(pFlag: PBOOL): BOOL{.dynlib: dllname, 52 | importc: "wglQueryFrameLockMasterI3D".} 53 | proc wglGetFrameUsageI3D*(pUsage: PGLfloat): BOOL{.dynlib: dllname, 54 | importc: "wglGetFrameUsageI3D".} 55 | proc wglBeginFrameTrackingI3D*(): BOOL{.dynlib: dllname, 56 | importc: "wglBeginFrameTrackingI3D".} 57 | proc wglEndFrameTrackingI3D*(): BOOL{.dynlib: dllname, 58 | importc: "wglEndFrameTrackingI3D".} 59 | proc wglQueryFrameTrackingI3D*(pFrameCount: PDWORD, pMissedFrames: PDWORD, 60 | pLastMissedUsage: PGLfloat): BOOL{. 61 | dynlib: dllname, importc: "wglQueryFrameTrackingI3D".} 62 | const 63 | WGL_NUMBER_PIXEL_FORMATS_ARB* = 0x00002000 64 | WGL_DRAW_TO_WINDOW_ARB* = 0x00002001 65 | WGL_DRAW_TO_BITMAP_ARB* = 0x00002002 66 | WGL_ACCELERATION_ARB* = 0x00002003 67 | WGL_NEED_PALETTE_ARB* = 0x00002004 68 | WGL_NEED_SYSTEM_PALETTE_ARB* = 0x00002005 69 | WGL_SWAP_LAYER_BUFFERS_ARB* = 0x00002006 70 | WGL_SWAP_METHOD_ARB* = 0x00002007 71 | WGL_NUMBER_OVERLAYS_ARB* = 0x00002008 72 | WGL_NUMBER_UNDERLAYS_ARB* = 0x00002009 73 | WGL_TRANSPARENT_ARB* = 0x0000200A 74 | WGL_TRANSPARENT_RED_VALUE_ARB* = 0x00002037 75 | WGL_TRANSPARENT_GREEN_VALUE_ARB* = 0x00002038 76 | WGL_TRANSPARENT_BLUE_VALUE_ARB* = 0x00002039 77 | WGL_TRANSPARENT_ALPHA_VALUE_ARB* = 0x0000203A 78 | WGL_TRANSPARENT_INDEX_VALUE_ARB* = 0x0000203B 79 | WGL_SHARE_DEPTH_ARB* = 0x0000200C 80 | WGL_SHARE_STENCIL_ARB* = 0x0000200D 81 | WGL_SHARE_ACCUM_ARB* = 0x0000200E 82 | WGL_SUPPORT_GDI_ARB* = 0x0000200F 83 | WGL_SUPPORT_OPENGL_ARB* = 0x00002010 84 | WGL_DOUBLE_BUFFER_ARB* = 0x00002011 85 | WGL_STEREO_ARB* = 0x00002012 86 | WGL_PIXEL_TYPE_ARB* = 0x00002013 87 | WGL_COLOR_BITS_ARB* = 0x00002014 88 | WGL_RED_BITS_ARB* = 0x00002015 89 | WGL_RED_SHIFT_ARB* = 0x00002016 90 | WGL_GREEN_BITS_ARB* = 0x00002017 91 | WGL_GREEN_SHIFT_ARB* = 0x00002018 92 | WGL_BLUE_BITS_ARB* = 0x00002019 93 | WGL_BLUE_SHIFT_ARB* = 0x0000201A 94 | WGL_ALPHA_BITS_ARB* = 0x0000201B 95 | WGL_ALPHA_SHIFT_ARB* = 0x0000201C 96 | WGL_ACCUM_BITS_ARB* = 0x0000201D 97 | WGL_ACCUM_RED_BITS_ARB* = 0x0000201E 98 | WGL_ACCUM_GREEN_BITS_ARB* = 0x0000201F 99 | WGL_ACCUM_BLUE_BITS_ARB* = 0x00002020 100 | WGL_ACCUM_ALPHA_BITS_ARB* = 0x00002021 101 | WGL_DEPTH_BITS_ARB* = 0x00002022 102 | WGL_STENCIL_BITS_ARB* = 0x00002023 103 | WGL_AUX_BUFFERS_ARB* = 0x00002024 104 | WGL_NO_ACCELERATION_ARB* = 0x00002025 105 | WGL_GENERIC_ACCELERATION_ARB* = 0x00002026 106 | WGL_FULL_ACCELERATION_ARB* = 0x00002027 107 | WGL_SWAP_EXCHANGE_ARB* = 0x00002028 108 | WGL_SWAP_COPY_ARB* = 0x00002029 109 | WGL_SWAP_UNDEFINED_ARB* = 0x0000202A 110 | WGL_TYPE_RGBA_ARB* = 0x0000202B 111 | WGL_TYPE_COLORINDEX_ARB* = 0x0000202C 112 | 113 | proc wglGetPixelFormatAttribivARB*(hdc: HDC, iPixelFormat: TGLint, 114 | iLayerPlane: TGLint, nAttributes: TGLuint, 115 | piAttributes: PGLint, piValues: PGLint): BOOL{. 116 | dynlib: dllname, importc: "wglGetPixelFormatAttribivARB".} 117 | proc wglGetPixelFormatAttribfvARB*(hdc: HDC, iPixelFormat: TGLint, 118 | iLayerPlane: TGLint, nAttributes: TGLuint, 119 | piAttributes: PGLint, pfValues: PGLfloat): BOOL{. 120 | dynlib: dllname, importc: "wglGetPixelFormatAttribfvARB".} 121 | proc wglChoosePixelFormatARB*(hdc: HDC, piAttribIList: PGLint, 122 | pfAttribFList: PGLfloat, nMaxFormats: TGLuint, 123 | piFormats: PGLint, nNumFormats: PGLuint): BOOL{. 124 | dynlib: dllname, importc: "wglChoosePixelFormatARB".} 125 | const 126 | WGL_ERROR_INVALID_PIXEL_TYPE_ARB* = 0x00002043 127 | WGL_ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB* = 0x00002054 128 | 129 | proc wglMakeContextCurrentARB*(hDrawDC: HDC, hReadDC: HDC, hglrc: HGLRC): BOOL{. 130 | dynlib: dllname, importc: "wglMakeContextCurrentARB".} 131 | proc wglGetCurrentReadDCARB*(): HDC{.dynlib: dllname, 132 | importc: "wglGetCurrentReadDCARB".} 133 | const 134 | WGL_DRAW_TO_PBUFFER_ARB* = 0x0000202D # WGL_DRAW_TO_PBUFFER_ARB { already defined } 135 | WGL_MAX_PBUFFER_PIXELS_ARB* = 0x0000202E 136 | WGL_MAX_PBUFFER_WIDTH_ARB* = 0x0000202F 137 | WGL_MAX_PBUFFER_HEIGHT_ARB* = 0x00002030 138 | WGL_PBUFFER_LARGEST_ARB* = 0x00002033 139 | WGL_PBUFFER_WIDTH_ARB* = 0x00002034 140 | WGL_PBUFFER_HEIGHT_ARB* = 0x00002035 141 | WGL_PBUFFER_LOST_ARB* = 0x00002036 142 | 143 | proc wglCreatePbufferARB*(hDC: HDC, iPixelFormat: TGLint, iWidth: TGLint, 144 | iHeight: TGLint, piAttribList: PGLint): THandle{. 145 | dynlib: dllname, importc: "wglCreatePbufferARB".} 146 | proc wglGetPbufferDCARB*(hPbuffer: THandle): HDC{.dynlib: dllname, 147 | importc: "wglGetPbufferDCARB".} 148 | proc wglReleasePbufferDCARB*(hPbuffer: THandle, hDC: HDC): TGLint{. 149 | dynlib: dllname, importc: "wglReleasePbufferDCARB".} 150 | proc wglDestroyPbufferARB*(hPbuffer: THandle): BOOL{.dynlib: dllname, 151 | importc: "wglDestroyPbufferARB".} 152 | proc wglQueryPbufferARB*(hPbuffer: THandle, iAttribute: TGLint, piValue: PGLint): BOOL{. 153 | dynlib: dllname, importc: "wglQueryPbufferARB".} 154 | proc wglSwapIntervalEXT*(interval: TGLint): BOOL{.dynlib: dllname, 155 | importc: "wglSwapIntervalEXT".} 156 | proc wglGetSwapIntervalEXT*(): TGLint{.dynlib: dllname, 157 | importc: "wglGetSwapIntervalEXT".} 158 | const 159 | WGL_BIND_TO_TEXTURE_RGB_ARB* = 0x00002070 160 | WGL_BIND_TO_TEXTURE_RGBA_ARB* = 0x00002071 161 | WGL_TEXTURE_FORMAT_ARB* = 0x00002072 162 | WGL_TEXTURE_TARGET_ARB* = 0x00002073 163 | WGL_MIPMAP_TEXTURE_ARB* = 0x00002074 164 | WGL_TEXTURE_RGB_ARB* = 0x00002075 165 | WGL_TEXTURE_RGBA_ARB* = 0x00002076 166 | WGL_NO_TEXTURE_ARB* = 0x00002077 167 | WGL_TEXTURE_CUBE_MAP_ARB* = 0x00002078 168 | WGL_TEXTURE_1D_ARB* = 0x00002079 169 | WGL_TEXTURE_2D_ARB* = 0x0000207A # WGL_NO_TEXTURE_ARB { already defined } 170 | WGL_MIPMAP_LEVEL_ARB* = 0x0000207B 171 | WGL_CUBE_MAP_FACE_ARB* = 0x0000207C 172 | WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB* = 0x0000207D 173 | WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB* = 0x0000207E 174 | WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB* = 0x0000207F 175 | WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB* = 0x00002080 176 | WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB* = 0x00002081 177 | WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB* = 0x00002082 178 | WGL_FRONT_LEFT_ARB* = 0x00002083 179 | WGL_FRONT_RIGHT_ARB* = 0x00002084 180 | WGL_BACK_LEFT_ARB* = 0x00002085 181 | WGL_BACK_RIGHT_ARB* = 0x00002086 182 | WGL_AUX0_ARB* = 0x00002087 183 | WGL_AUX1_ARB* = 0x00002088 184 | WGL_AUX2_ARB* = 0x00002089 185 | WGL_AUX3_ARB* = 0x0000208A 186 | WGL_AUX4_ARB* = 0x0000208B 187 | WGL_AUX5_ARB* = 0x0000208C 188 | WGL_AUX6_ARB* = 0x0000208D 189 | WGL_AUX7_ARB* = 0x0000208E 190 | WGL_AUX8_ARB* = 0x0000208F 191 | WGL_AUX9_ARB* = 0x00002090 192 | 193 | proc wglBindTexImageARB*(hPbuffer: THandle, iBuffer: TGLint): BOOL{. 194 | dynlib: dllname, importc: "wglBindTexImageARB".} 195 | proc wglReleaseTexImageARB*(hPbuffer: THandle, iBuffer: TGLint): BOOL{. 196 | dynlib: dllname, importc: "wglReleaseTexImageARB".} 197 | proc wglSetPbufferAttribARB*(hPbuffer: THandle, piAttribList: PGLint): BOOL{. 198 | dynlib: dllname, importc: "wglSetPbufferAttribARB".} 199 | proc wglGetExtensionsStringEXT*(): cstring{.dynlib: dllname, 200 | importc: "wglGetExtensionsStringEXT".} 201 | proc wglMakeContextCurrentEXT*(hDrawDC: HDC, hReadDC: HDC, hglrc: HGLRC): BOOL{. 202 | dynlib: dllname, importc: "wglMakeContextCurrentEXT".} 203 | proc wglGetCurrentReadDCEXT*(): HDC{.dynlib: dllname, 204 | importc: "wglGetCurrentReadDCEXT".} 205 | const 206 | WGL_DRAW_TO_PBUFFER_EXT* = 0x0000202D 207 | WGL_MAX_PBUFFER_PIXELS_EXT* = 0x0000202E 208 | WGL_MAX_PBUFFER_WIDTH_EXT* = 0x0000202F 209 | WGL_MAX_PBUFFER_HEIGHT_EXT* = 0x00002030 210 | WGL_OPTIMAL_PBUFFER_WIDTH_EXT* = 0x00002031 211 | WGL_OPTIMAL_PBUFFER_HEIGHT_EXT* = 0x00002032 212 | WGL_PBUFFER_LARGEST_EXT* = 0x00002033 213 | WGL_PBUFFER_WIDTH_EXT* = 0x00002034 214 | WGL_PBUFFER_HEIGHT_EXT* = 0x00002035 215 | 216 | proc wglCreatePbufferEXT*(hDC: HDC, iPixelFormat: TGLint, iWidth: TGLint, 217 | iHeight: TGLint, piAttribList: PGLint): THandle{. 218 | dynlib: dllname, importc: "wglCreatePbufferEXT".} 219 | proc wglGetPbufferDCEXT*(hPbuffer: THandle): HDC{.dynlib: dllname, 220 | importc: "wglGetPbufferDCEXT".} 221 | proc wglReleasePbufferDCEXT*(hPbuffer: THandle, hDC: HDC): TGLint{. 222 | dynlib: dllname, importc: "wglReleasePbufferDCEXT".} 223 | proc wglDestroyPbufferEXT*(hPbuffer: THandle): BOOL{.dynlib: dllname, 224 | importc: "wglDestroyPbufferEXT".} 225 | proc wglQueryPbufferEXT*(hPbuffer: THandle, iAttribute: TGLint, piValue: PGLint): BOOL{. 226 | dynlib: dllname, importc: "wglQueryPbufferEXT".} 227 | const 228 | WGL_NUMBER_PIXEL_FORMATS_EXT* = 0x00002000 229 | WGL_DRAW_TO_WINDOW_EXT* = 0x00002001 230 | WGL_DRAW_TO_BITMAP_EXT* = 0x00002002 231 | WGL_ACCELERATION_EXT* = 0x00002003 232 | WGL_NEED_PALETTE_EXT* = 0x00002004 233 | WGL_NEED_SYSTEM_PALETTE_EXT* = 0x00002005 234 | WGL_SWAP_LAYER_BUFFERS_EXT* = 0x00002006 235 | WGL_SWAP_METHOD_EXT* = 0x00002007 236 | WGL_NUMBER_OVERLAYS_EXT* = 0x00002008 237 | WGL_NUMBER_UNDERLAYS_EXT* = 0x00002009 238 | WGL_TRANSPARENT_EXT* = 0x0000200A 239 | WGL_TRANSPARENT_VALUE_EXT* = 0x0000200B 240 | WGL_SHARE_DEPTH_EXT* = 0x0000200C 241 | WGL_SHARE_STENCIL_EXT* = 0x0000200D 242 | WGL_SHARE_ACCUM_EXT* = 0x0000200E 243 | WGL_SUPPORT_GDI_EXT* = 0x0000200F 244 | WGL_SUPPORT_OPENGL_EXT* = 0x00002010 245 | WGL_DOUBLE_BUFFER_EXT* = 0x00002011 246 | WGL_STEREO_EXT* = 0x00002012 247 | WGL_PIXEL_TYPE_EXT* = 0x00002013 248 | WGL_COLOR_BITS_EXT* = 0x00002014 249 | WGL_RED_BITS_EXT* = 0x00002015 250 | WGL_RED_SHIFT_EXT* = 0x00002016 251 | WGL_GREEN_BITS_EXT* = 0x00002017 252 | WGL_GREEN_SHIFT_EXT* = 0x00002018 253 | WGL_BLUE_BITS_EXT* = 0x00002019 254 | WGL_BLUE_SHIFT_EXT* = 0x0000201A 255 | WGL_ALPHA_BITS_EXT* = 0x0000201B 256 | WGL_ALPHA_SHIFT_EXT* = 0x0000201C 257 | WGL_ACCUM_BITS_EXT* = 0x0000201D 258 | WGL_ACCUM_RED_BITS_EXT* = 0x0000201E 259 | WGL_ACCUM_GREEN_BITS_EXT* = 0x0000201F 260 | WGL_ACCUM_BLUE_BITS_EXT* = 0x00002020 261 | WGL_ACCUM_ALPHA_BITS_EXT* = 0x00002021 262 | WGL_DEPTH_BITS_EXT* = 0x00002022 263 | WGL_STENCIL_BITS_EXT* = 0x00002023 264 | WGL_AUX_BUFFERS_EXT* = 0x00002024 265 | WGL_NO_ACCELERATION_EXT* = 0x00002025 266 | WGL_GENERIC_ACCELERATION_EXT* = 0x00002026 267 | WGL_FULL_ACCELERATION_EXT* = 0x00002027 268 | WGL_SWAP_EXCHANGE_EXT* = 0x00002028 269 | WGL_SWAP_COPY_EXT* = 0x00002029 270 | WGL_SWAP_UNDEFINED_EXT* = 0x0000202A 271 | WGL_TYPE_RGBA_EXT* = 0x0000202B 272 | WGL_TYPE_COLORINDEX_EXT* = 0x0000202C 273 | 274 | proc wglGetPixelFormatAttribivEXT*(hdc: HDC, iPixelFormat: TGLint, 275 | iLayerPlane: TGLint, nAttributes: TGLuint, 276 | piAttributes: PGLint, piValues: PGLint): BOOL{. 277 | dynlib: dllname, importc: "wglGetPixelFormatAttribivEXT".} 278 | proc wglGetPixelFormatAttribfvEXT*(hdc: HDC, iPixelFormat: TGLint, 279 | iLayerPlane: TGLint, nAttributes: TGLuint, 280 | piAttributes: PGLint, pfValues: PGLfloat): BOOL{. 281 | dynlib: dllname, importc: "wglGetPixelFormatAttribfvEXT".} 282 | proc wglChoosePixelFormatEXT*(hdc: HDC, piAttribIList: PGLint, 283 | pfAttribFList: PGLfloat, nMaxFormats: TGLuint, 284 | piFormats: PGLint, nNumFormats: PGLuint): BOOL{. 285 | dynlib: dllname, importc: "wglChoosePixelFormatEXT".} 286 | const 287 | WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D* = 0x00002050 288 | WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D* = 0x00002051 289 | WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D* = 0x00002052 290 | WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D* = 0x00002053 291 | 292 | proc wglGetDigitalVideoParametersI3D*(hDC: HDC, iAttribute: TGLint, 293 | piValue: PGLint): BOOL{.dynlib: dllname, 294 | importc: "wglGetDigitalVideoParametersI3D".} 295 | proc wglSetDigitalVideoParametersI3D*(hDC: HDC, iAttribute: TGLint, 296 | piValue: PGLint): BOOL{.dynlib: dllname, 297 | importc: "wglSetDigitalVideoParametersI3D".} 298 | const 299 | WGL_GAMMA_TABLE_SIZE_I3D* = 0x0000204E 300 | WGL_GAMMA_EXCLUDE_DESKTOP_I3D* = 0x0000204F 301 | 302 | proc wglGetGammaTableParametersI3D*(hDC: HDC, iAttribute: TGLint, 303 | piValue: PGLint): BOOL{.dynlib: dllname, 304 | importc: "wglGetGammaTableParametersI3D".} 305 | proc wglSetGammaTableParametersI3D*(hDC: HDC, iAttribute: TGLint, 306 | piValue: PGLint): BOOL{.dynlib: dllname, 307 | importc: "wglSetGammaTableParametersI3D".} 308 | proc wglGetGammaTableI3D*(hDC: HDC, iEntries: TGLint, puRed: PGLUSHORT, 309 | puGreen: PGLUSHORT, puBlue: PGLUSHORT): BOOL{. 310 | dynlib: dllname, importc: "wglGetGammaTableI3D".} 311 | proc wglSetGammaTableI3D*(hDC: HDC, iEntries: TGLint, puRed: PGLUSHORT, 312 | puGreen: PGLUSHORT, puBlue: PGLUSHORT): BOOL{. 313 | dynlib: dllname, importc: "wglSetGammaTableI3D".} 314 | const 315 | WGL_GENLOCK_SOURCE_MULTIVIEW_I3D* = 0x00002044 316 | WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D* = 0x00002045 317 | WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D* = 0x00002046 318 | WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D* = 0x00002047 319 | WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D* = 0x00002048 320 | WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D* = 0x00002049 321 | WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D* = 0x0000204A 322 | WGL_GENLOCK_SOURCE_EDGE_RISING_I3D* = 0x0000204B 323 | WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D* = 0x0000204C 324 | WGL_FLOAT_COMPONENTS_NV* = 0x000020B0 325 | WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV* = 0x000020B1 326 | WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV* = 0x000020B2 327 | WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV* = 0x000020B3 328 | WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV* = 0x000020B4 329 | WGL_TEXTURE_FLOAT_R_NV* = 0x000020B5 330 | WGL_TEXTURE_FLOAT_RG_NV* = 0x000020B6 331 | WGL_TEXTURE_FLOAT_RGB_NV* = 0x000020B7 332 | WGL_TEXTURE_FLOAT_RGBA_NV* = 0x000020B8 333 | 334 | proc wglEnableGenlockI3D*(hDC: HDC): BOOL{.dynlib: dllname, 335 | importc: "wglEnableGenlockI3D".} 336 | proc wglDisableGenlockI3D*(hDC: HDC): BOOL{.dynlib: dllname, 337 | importc: "wglDisableGenlockI3D".} 338 | proc wglIsEnabledGenlockI3D*(hDC: HDC, pFlag: PBOOL): BOOL{.dynlib: dllname, 339 | importc: "wglIsEnabledGenlockI3D".} 340 | proc wglGenlockSourceI3D*(hDC: HDC, uSource: TGLuint): BOOL{.dynlib: dllname, 341 | importc: "wglGenlockSourceI3D".} 342 | proc wglGetGenlockSourceI3D*(hDC: HDC, uSource: PGLUINT): BOOL{.dynlib: dllname, 343 | importc: "wglGetGenlockSourceI3D".} 344 | proc wglGenlockSourceEdgeI3D*(hDC: HDC, uEdge: TGLuint): BOOL{.dynlib: dllname, 345 | importc: "wglGenlockSourceEdgeI3D".} 346 | proc wglGetGenlockSourceEdgeI3D*(hDC: HDC, uEdge: PGLUINT): BOOL{. 347 | dynlib: dllname, importc: "wglGetGenlockSourceEdgeI3D".} 348 | proc wglGenlockSampleRateI3D*(hDC: HDC, uRate: TGLuint): BOOL{.dynlib: dllname, 349 | importc: "wglGenlockSampleRateI3D".} 350 | proc wglGetGenlockSampleRateI3D*(hDC: HDC, uRate: PGLUINT): BOOL{. 351 | dynlib: dllname, importc: "wglGetGenlockSampleRateI3D".} 352 | proc wglGenlockSourceDelayI3D*(hDC: HDC, uDelay: TGLuint): BOOL{. 353 | dynlib: dllname, importc: "wglGenlockSourceDelayI3D".} 354 | proc wglGetGenlockSourceDelayI3D*(hDC: HDC, uDelay: PGLUINT): BOOL{. 355 | dynlib: dllname, importc: "wglGetGenlockSourceDelayI3D".} 356 | proc wglQueryGenlockMaxSourceDelayI3D*(hDC: HDC, uMaxLineDelay: PGLUINT, 357 | uMaxPixelDelay: PGLUINT): BOOL{. 358 | dynlib: dllname, importc: "wglQueryGenlockMaxSourceDelayI3D".} 359 | const 360 | WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV* = 0x000020A0 361 | WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV* = 0x000020A1 362 | WGL_TEXTURE_RECTANGLE_NV* = 0x000020A2 363 | 364 | const 365 | WGL_RGBA_FLOAT_MODE_ATI* = 0x00008820 366 | WGL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI* = 0x00008835 367 | WGL_TYPE_RGBA_FLOAT_ATI* = 0x000021A0 368 | 369 | # implementation 370 | --------------------------------------------------------------------------------