View in color | License | Download script | History | Other scripts by: luce80 |
30-Apr 16:12 UTC
[0.187] 147.467k
[0.187] 147.467k
opengl-glu-glut-h.rREBOL [
title: "OpenGL library interface"
file: %opengl-glu-glut-h.r
author: "Marco Antoniazzi"
email: [luce80 AT libero DOT it]
date: 22-04-2013
version: 0.7.2
needs: {
- opengl, glu, glut shared libraries
}
comment: {ONLY A FEW FUNCTIONs TESTED !!!! Use example code to test others.
See REBOL-NOTEs in example code at the end for rebol-specific implementation issues.
Rebol specific functions start with gl- or glut- .
Some functions "inspired" by John Niclasen and Cal Dixon
Example code taken from OpenGL.R Test (c) 2003 Cal Dixon
Example needs Windows or Linux.
}
Purpose: "Code to bind OpenGL, GLU, GLUT shared libraries to Rebol."
History: [
0.0.1 [08-11-2011 "First version"]
0.5.0 [19-11-2011 "Example completed"]
0.6.0 [22-11-2011 "Added some and improved others glut- functions"]
0.6.1 [25-11-2011 "Bug fixed event-func"]
0.6.2 [03-12-2011 "Minor retouches,fixes and additions"]
0.6.3 [08-12-2011 "Minor retouches"]
0.6.4 [13-02-2012 "Bug fixed wait time"]
0.6.5 [05-05-2012 "Fixed double buffer flag"]
0.6.6 [10-06-2012 "Partially fixed full-screen"]
0.6.7 [15-09-2012 "Fixed library names (thanks Kaj)"]
0.7.0 [18-09-2012 "Added custom glut on Linux"]
0.7.1 [21-09-2012 "Various fixes on Linux"]
0.7.2 [22-04-2013 "Fixed GLUT callbacks"]
]
Category: [library graphics]
library: [
level: 'intermediate
platform: 'all
type: 'module
domain: [graphics external-library]
tested-under: [View 2.7.8.3.1 2.7.8.4.3]
support: none
license: none
see-also: none
]
]
;;;
;;;REBOL-NOTE: use this function to access pointers
;;;
int-ptr: does [make struct! [value [integer!]] none]
dbl-ptr: does [make struct! [value [double]] none]
coords-ptr: does [make struct! [x [float] y [float] z [float] w [float]] none]
*int: make struct! [[save] ptr [struct! [value [integer!]]]] none
addr: func [ptr [binary! string!]] [third make struct! [s [string!]] reduce [ptr]]
get&: func [ptr] [change third *int addr ptr *int/ptr/value]
&: func [ptr] [ptr: addr ptr to-integer either 'little = get-modes system:// 'endian [head reverse copy ptr][ptr]]
;;;
;;;REBOL-NOTE: use this function to map data to a struct!
;;;
addr-to-struct: func [
"returns the given struct! initialized with content of given address"
addr [integer! ] struct [struct!] /local int-ptr tstruct
][
int-ptr: make struct! [value [integer!]] reduce [addr]
tstruct: make struct! compose/deep/only [ptr [struct! (first struct)]] none
change third tstruct third int-ptr
change third struct third tstruct/ptr
struct
]
;;;
;;;REBOL-NOTE: use this function to convert a block to an initialized struct! (and use eg. as: probe third block-to-struct/floats [1.5 3])
;;;
block-to-struct: func [
"Construct a struct! and initialize it based on given block"
block [block!] /floats /local spec type n
] [
block: copy block
replace/all block 'none 0
spec: copy []
n: 1
forall block [
append spec compose/deep/only [(to-word join '. n) [(
type: type?/word first block
either all [equal? type 'decimal! floats]['float][type]
)]]
n: n + 1
]
make struct! spec block
]
assign-struct: func [
"Assign src struct data to dst"
dst [struct!] src [struct!]
] [
change third dst third src
]
{************************************************************
************************************************************}
lib: switch/default System/version/4 [
2 [%libGL.dylib] ;OSX
3 [%opengl32.dll] ;Windows
] [%libGL.so.1]
if not attempt [opengl-lib: load/library lib] [alert rejoin ["" lib " library not found. Quit"] quit]
{************************************************************
** gl.h
************************************************************}
GLvoid: integer! ;void
GLchar: char! ;char
GLenum: integer! ;unsigned int
GLboolean: char! ;unsigned char
GLbitfield: integer! ;unsigned int
GLbyte: char! ;khronos_int8_t
;GLshort: short ;short
GLint: integer! ;int
GLsizei: integer! ;int
GLubyte: char! ;khronos_uint8_t
;GLushort; short ;unsigned short
GLuint: integer! ;unsigned int
;GLfloat: float ;khronos_float_t
;GLclampf: float ;khronos_float_t
;GLfixed: integer! ;khronos_int32_t
;GLclampx: integer! ;khronos_int32_t
GLclampd: decimal!
GLdouble: decimal!
{***********************************************************}
{***********************************************************}
{ Version }
GL_VERSION_1_1: 1
{ AccumOp }
GL_ACCUM: 256
GL_LOAD: 257
GL_RETURN: 258
GL_MULT: 259
GL_ADD: 260
{ AlphaFunction }
GL_NEVER: 512
GL_LESS: 513
GL_EQUAL: 514
GL_LEQUAL: 515
GL_GREATER: 516
GL_NOTEQUAL: 517
GL_GEQUAL: 518
GL_ALWAYS: 519
{ AttribMask }
GL_CURRENT_BIT: 1
GL_POINT_BIT: 2
GL_LINE_BIT: 4
GL_POLYGON_BIT: 8
GL_POLYGON_STIPPLE_BIT: 16
GL_PIXEL_MODE_BIT: 32
GL_LIGHTING_BIT: 64
GL_FOG_BIT: 128
GL_DEPTH_BUFFER_BIT: 256
GL_ACCUM_BUFFER_BIT: 512
GL_STENCIL_BUFFER_BIT: 1024
GL_VIEWPORT_BIT: 2048
GL_TRANSFORM_BIT: 4096
GL_ENABLE_BIT: 8192
GL_COLOR_BUFFER_BIT: 16384
GL_HINT_BIT: 32768
GL_EVAL_BIT: 65536
GL_LIST_BIT: 131072
GL_TEXTURE_BIT: 262144
GL_SCISSOR_BIT: 524288
GL_ALL_ATTRIB_BITS: 1048575
{ BeginMode }
GL_POINTS: 0
GL_LINES: 1
GL_LINE_LOOP: 2
GL_LINE_STRIP: 3
GL_TRIANGLES: 4
GL_TRIANGLE_STRIP: 5
GL_TRIANGLE_FAN: 6
GL_QUADS: 7
GL_QUAD_STRIP: 8
GL_POLYGON: 9
{ BlendingFactorDest }
GL_ZERO: 0
GL_ONE: 1
GL_SRC_COLOR: 768
GL_ONE_MINUS_SRC_COLOR: 769
GL_SRC_ALPHA: 770
GL_ONE_MINUS_SRC_ALPHA: 771
GL_DST_ALPHA: 772
GL_ONE_MINUS_DST_ALPHA: 773
{ BlendingFactorSrc }
{ GL_ZERO }
{ GL_ONE }
GL_DST_COLOR: 774
GL_ONE_MINUS_DST_COLOR: 775
GL_SRC_ALPHA_SATURATE: 776
{ GL_SRC_ALPHA }
{ GL_ONE_MINUS_SRC_ALPHA }
{ GL_DST_ALPHA }
{ GL_ONE_MINUS_DST_ALPHA }
{ Boolean }
GL_TRUE: 1
GL_FALSE: 0
{ ClearBufferMask }
{ GL_COLOR_BUFFER_BIT }
{ GL_ACCUM_BUFFER_BIT }
{ GL_STENCIL_BUFFER_BIT }
{ GL_DEPTH_BUFFER_BIT }
{ ClientArrayType }
{ GL_VERTEX_ARRAY }
{ GL_NORMAL_ARRAY }
{ GL_COLOR_ARRAY }
{ GL_INDEX_ARRAY }
{ GL_TEXTURE_COORD_ARRAY }
{ GL_EDGE_FLAG_ARRAY }
{ ClipPlaneName }
GL_CLIP_PLANE0: 12288
GL_CLIP_PLANE1: 12289
GL_CLIP_PLANE2: 12290
GL_CLIP_PLANE3: 12291
GL_CLIP_PLANE4: 12292
GL_CLIP_PLANE5: 12293
{ ColorMaterialFace }
{ GL_FRONT }
{ GL_BACK }
{ GL_FRONT_AND_BACK }
{ ColorMaterialParameter }
{ GL_AMBIENT }
{ GL_DIFFUSE }
{ GL_SPECULAR }
{ GL_EMISSION }
{ GL_AMBIENT_AND_DIFFUSE }
{ ColorPointerType }
{ GL_BYTE }
{ GL_UNSIGNED_BYTE }
{ GL_SHORT }
{ GL_UNSIGNED_SHORT }
{ GL_INT }
{ GL_UNSIGNED_INT }
{ GL_FLOAT }
{ GL_DOUBLE }
{ CullFaceMode }
{ GL_FRONT }
{ GL_BACK }
{ GL_FRONT_AND_BACK }
{ DataType }
GL_BYTE: 5120
GL_UNSIGNED_BYTE: 5121
GL_SHORT: 5122
GL_UNSIGNED_SHORT: 5123
GL_INT: 5124
GL_UNSIGNED_INT: 5125
GL_FLOAT: 5126
GL_2_BYTES: 5127
GL_3_BYTES: 5128
GL_4_BYTES: 5129
GL_DOUBLE: 5130
{ DepthFunction }
{ GL_NEVER }
{ GL_LESS }
{ GL_EQUAL }
{ GL_LEQUAL }
{ GL_GREATER }
{ GL_NOTEQUAL }
{ GL_GEQUAL }
{ GL_ALWAYS }
{ DrawBufferMode }
GL_NONE: 0
GL_FRONT_LEFT: 1024
GL_FRONT_RIGHT: 1025
GL_BACK_LEFT: 1026
GL_BACK_RIGHT: 1027
GL_FRONT: 1028
GL_BACK: 1029
GL_LEFT: 1030
GL_RIGHT: 1031
GL_FRONT_AND_BACK: 1032
GL_AUX0: 1033
GL_AUX1: 1034
GL_AUX2: 1035
GL_AUX3: 1036
{ Enable }
{ GL_FOG }
{ GL_LIGHTING }
{ GL_TEXTURE_1D }
{ GL_TEXTURE_2D }
{ GL_LINE_STIPPLE }
{ GL_POLYGON_STIPPLE }
{ GL_CULL_FACE }
{ GL_ALPHA_TEST }
{ GL_BLEND }
{ GL_INDEX_LOGIC_OP }
{ GL_COLOR_LOGIC_OP }
{ GL_DITHER }
{ GL_STENCIL_TEST }
{ GL_DEPTH_TEST }
{ GL_CLIP_PLANE0 }
{ GL_CLIP_PLANE1 }
{ GL_CLIP_PLANE2 }
{ GL_CLIP_PLANE3 }
{ GL_CLIP_PLANE4 }
{ GL_CLIP_PLANE5 }
{ GL_LIGHT0 }
{ GL_LIGHT1 }
{ GL_LIGHT2 }
{ GL_LIGHT3 }
{ GL_LIGHT4 }
{ GL_LIGHT5 }
{ GL_LIGHT6 }
{ GL_LIGHT7 }
{ GL_TEXTURE_GEN_S }
{ GL_TEXTURE_GEN_T }
{ GL_TEXTURE_GEN_R }
{ GL_TEXTURE_GEN_Q }
{ GL_MAP1_VERTEX_3 }
{ GL_MAP1_VERTEX_4 }
{ GL_MAP1_COLOR_4 }
{ GL_MAP1_INDEX }
{ GL_MAP1_NORMAL }
{ GL_MAP1_TEXTURE_COORD_1 }
{ GL_MAP1_TEXTURE_COORD_2 }
{ GL_MAP1_TEXTURE_COORD_3 }
{ GL_MAP1_TEXTURE_COORD_4 }
{ GL_MAP2_VERTEX_3 }
{ GL_MAP2_VERTEX_4 }
{ GL_MAP2_COLOR_4 }
{ GL_MAP2_INDEX }
{ GL_MAP2_NORMAL }
{ GL_MAP2_TEXTURE_COORD_1 }
{ GL_MAP2_TEXTURE_COORD_2 }
{ GL_MAP2_TEXTURE_COORD_3 }
{ GL_MAP2_TEXTURE_COORD_4 }
{ GL_POINT_SMOOTH }
{ GL_LINE_SMOOTH }
{ GL_POLYGON_SMOOTH }
{ GL_SCISSOR_TEST }
{ GL_COLOR_MATERIAL }
{ GL_NORMALIZE }
{ GL_AUTO_NORMAL }
{ GL_VERTEX_ARRAY }
{ GL_NORMAL_ARRAY }
{ GL_COLOR_ARRAY }
{ GL_INDEX_ARRAY }
{ GL_TEXTURE_COORD_ARRAY }
{ GL_EDGE_FLAG_ARRAY }
{ GL_POLYGON_OFFSET_POINT }
{ GL_POLYGON_OFFSET_LINE }
{ GL_POLYGON_OFFSET_FILL }
{ ErrorCode }
GL_NO_ERROR: 0
GL_INVALID_ENUM: 1280
GL_INVALID_VALUE: 1281
GL_INVALID_OPERATION: 1282
GL_STACK_OVERFLOW: 1283
GL_STACK_UNDERFLOW: 1284
GL_OUT_OF_MEMORY: 1285
{ FeedBackMode }
GL_2D: 1536
GL_3D: 1537
GL_3D_COLOR: 1538
GL_3D_COLOR_TEXTURE: 1539
GL_4D_COLOR_TEXTURE: 1540
{ FeedBackToken }
GL_PASS_THROUGH_TOKEN: 1792
GL_POINT_TOKEN: 1793
GL_LINE_TOKEN: 1794
GL_POLYGON_TOKEN: 1795
GL_BITMAP_TOKEN: 1796
GL_DRAW_PIXEL_TOKEN: 1797
GL_COPY_PIXEL_TOKEN: 1798
GL_LINE_RESET_TOKEN: 1799
{ FogMode }
{ GL_LINEAR }
GL_EXP: 2048
GL_EXP2: 2049
{ FogParameter }
{ GL_FOG_COLOR }
{ GL_FOG_DENSITY }
{ GL_FOG_END }
{ GL_FOG_INDEX }
{ GL_FOG_MODE }
{ GL_FOG_START }
{ FrontFaceDirection }
GL_CW: 2304
GL_CCW: 2305
{ GetMapTarget }
GL_COEFF: 2560
GL_ORDER: 2561
GL_DOMAIN: 2562
{ GetPixelMap }
{ GL_PIXEL_MAP_I_TO_I }
{ GL_PIXEL_MAP_S_TO_S }
{ GL_PIXEL_MAP_I_TO_R }
{ GL_PIXEL_MAP_I_TO_G }
{ GL_PIXEL_MAP_I_TO_B }
{ GL_PIXEL_MAP_I_TO_A }
{ GL_PIXEL_MAP_R_TO_R }
{ GL_PIXEL_MAP_G_TO_G }
{ GL_PIXEL_MAP_B_TO_B }
{ GL_PIXEL_MAP_A_TO_A }
{ GetPointerTarget }
{ GL_VERTEX_ARRAY_POINTER }
{ GL_NORMAL_ARRAY_POINTER }
{ GL_COLOR_ARRAY_POINTER }
{ GL_INDEX_ARRAY_POINTER }
{ GL_TEXTURE_COORD_ARRAY_POINTER }
{ GL_EDGE_FLAG_ARRAY_POINTER }
{ GetTarget }
GL_CURRENT_COLOR: 2816
GL_CURRENT_INDEX: 2817
GL_CURRENT_NORMAL: 2818
GL_CURRENT_TEXTURE_COORDS: 2819
GL_CURRENT_RASTER_COLOR: 2820
GL_CURRENT_RASTER_INDEX: 2821
GL_CURRENT_RASTER_TEXTURE_COORDS: 2822
GL_CURRENT_RASTER_POSITION: 2823
GL_CURRENT_RASTER_POSITION_VALID: 2824
GL_CURRENT_RASTER_DISTANCE: 2825
GL_POINT_SMOOTH: 2832
GL_POINT_SIZE: 2833
GL_POINT_SIZE_RANGE: 2834
GL_POINT_SIZE_GRANULARITY: 2835
GL_LINE_SMOOTH: 2848
GL_LINE_WIDTH: 2849
GL_LINE_WIDTH_RANGE: 2850
GL_LINE_WIDTH_GRANULARITY: 2851
GL_LINE_STIPPLE: 2852
GL_LINE_STIPPLE_PATTERN: 2853
GL_LINE_STIPPLE_REPEAT: 2854
GL_LIST_MODE: 2864
GL_MAX_LIST_NESTING: 2865
GL_LIST_BASE: 2866
GL_LIST_INDEX: 2867
GL_POLYGON_MODE: 2880
GL_POLYGON_SMOOTH: 2881
GL_POLYGON_STIPPLE: 2882
GL_EDGE_FLAG: 2883
GL_CULL_FACE: 2884
GL_CULL_FACE_MODE: 2885
GL_FRONT_FACE: 2886
GL_LIGHTING: 2896
GL_LIGHT_MODEL_LOCAL_VIEWER: 2897
GL_LIGHT_MODEL_TWO_SIDE: 2898
GL_LIGHT_MODEL_AMBIENT: 2899
GL_SHADE_MODEL: 2900
GL_COLOR_MATERIAL_FACE: 2901
GL_COLOR_MATERIAL_PARAMETER: 2902
GL_COLOR_MATERIAL: 2903
GL_FOG: 2912
GL_FOG_INDEX: 2913
GL_FOG_DENSITY: 2914
GL_FOG_START: 2915
GL_FOG_END: 2916
GL_FOG_MODE: 2917
GL_FOG_COLOR: 2918
GL_DEPTH_RANGE: 2928
GL_DEPTH_TEST: 2929
GL_DEPTH_WRITEMASK: 2930
GL_DEPTH_CLEAR_VALUE: 2931
GL_DEPTH_FUNC: 2932
GL_ACCUM_CLEAR_VALUE: 2944
GL_STENCIL_TEST: 2960
GL_STENCIL_CLEAR_VALUE: 2961
GL_STENCIL_FUNC: 2962
GL_STENCIL_VALUE_MASK: 2963
GL_STENCIL_FAIL: 2964
GL_STENCIL_PASS_DEPTH_FAIL: 2965
GL_STENCIL_PASS_DEPTH_PASS: 2966
GL_STENCIL_REF: 2967
GL_STENCIL_WRITEMASK: 2968
GL_MATRIX_MODE: 2976
GL_NORMALIZE: 2977
GL_VIEWPORT: 2978
GL_MODELVIEW_STACK_DEPTH: 2979
GL_PROJECTION_STACK_DEPTH: 2980
GL_TEXTURE_STACK_DEPTH: 2981
GL_MODELVIEW_MATRIX: 2982
GL_PROJECTION_MATRIX: 2983
GL_TEXTURE_MATRIX: 2984
GL_ATTRIB_STACK_DEPTH: 2992
GL_CLIENT_ATTRIB_STACK_DEPTH: 2993
GL_ALPHA_TEST: 3008
GL_ALPHA_TEST_FUNC: 3009
GL_ALPHA_TEST_REF: 3010
GL_DITHER: 3024
GL_BLEND_DST: 3040
GL_BLEND_SRC: 3041
GL_BLEND: 3042
GL_LOGIC_OP_MODE: 3056
GL_INDEX_LOGIC_OP: 3057
GL_COLOR_LOGIC_OP: 3058
GL_AUX_BUFFERS: 3072
GL_DRAW_BUFFER: 3073
GL_READ_BUFFER: 3074
GL_SCISSOR_BOX: 3088
GL_SCISSOR_TEST: 3089
GL_INDEX_CLEAR_VALUE: 3104
GL_INDEX_WRITEMASK: 3105
GL_COLOR_CLEAR_VALUE: 3106
GL_COLOR_WRITEMASK: 3107
GL_INDEX_MODE: 3120
GL_RGBA_MODE: 3121
GL_DOUBLEBUFFER: 3122
GL_STEREO: 3123
GL_RENDER_MODE: 3136
GL_PERSPECTIVE_CORRECTION_HINT: 3152
GL_POINT_SMOOTH_HINT: 3153
GL_LINE_SMOOTH_HINT: 3154
GL_POLYGON_SMOOTH_HINT: 3155
GL_FOG_HINT: 3156
GL_TEXTURE_GEN_S: 3168
GL_TEXTURE_GEN_T: 3169
GL_TEXTURE_GEN_R: 3170
GL_TEXTURE_GEN_Q: 3171
GL_PIXEL_MAP_I_TO_I: 3184
GL_PIXEL_MAP_S_TO_S: 3185
GL_PIXEL_MAP_I_TO_R: 3186
GL_PIXEL_MAP_I_TO_G: 3187
GL_PIXEL_MAP_I_TO_B: 3188
GL_PIXEL_MAP_I_TO_A: 3189
GL_PIXEL_MAP_R_TO_R: 3190
GL_PIXEL_MAP_G_TO_G: 3191
GL_PIXEL_MAP_B_TO_B: 3192
GL_PIXEL_MAP_A_TO_A: 3193
GL_PIXEL_MAP_I_TO_I_SIZE: 3248
GL_PIXEL_MAP_S_TO_S_SIZE: 3249
GL_PIXEL_MAP_I_TO_R_SIZE: 3250
GL_PIXEL_MAP_I_TO_G_SIZE: 3251
GL_PIXEL_MAP_I_TO_B_SIZE: 3252
GL_PIXEL_MAP_I_TO_A_SIZE: 3253
GL_PIXEL_MAP_R_TO_R_SIZE: 3254
GL_PIXEL_MAP_G_TO_G_SIZE: 3255
GL_PIXEL_MAP_B_TO_B_SIZE: 3256
GL_PIXEL_MAP_A_TO_A_SIZE: 3257
GL_UNPACK_SWAP_BYTES: 3312
GL_UNPACK_LSB_FIRST: 3313
GL_UNPACK_ROW_LENGTH: 3314
GL_UNPACK_SKIP_ROWS: 3315
GL_UNPACK_SKIP_PIXELS: 3316
GL_UNPACK_ALIGNMENT: 3317
GL_PACK_SWAP_BYTES: 3328
GL_PACK_LSB_FIRST: 3329
GL_PACK_ROW_LENGTH: 3330
GL_PACK_SKIP_ROWS: 3331
GL_PACK_SKIP_PIXELS: 3332
GL_PACK_ALIGNMENT: 3333
GL_MAP_COLOR: 3344
GL_MAP_STENCIL: 3345
GL_INDEX_SHIFT: 3346
GL_INDEX_OFFSET: 3347
GL_RED_SCALE: 3348
GL_RED_BIAS: 3349
GL_ZOOM_X: 3350
GL_ZOOM_Y: 3351
GL_GREEN_SCALE: 3352
GL_GREEN_BIAS: 3353
GL_BLUE_SCALE: 3354
GL_BLUE_BIAS: 3355
GL_ALPHA_SCALE: 3356
GL_ALPHA_BIAS: 3357
GL_DEPTH_SCALE: 3358
GL_DEPTH_BIAS: 3359
GL_MAX_EVAL_ORDER: 3376
GL_MAX_LIGHTS: 3377
GL_MAX_CLIP_PLANES: 3378
GL_MAX_TEXTURE_SIZE: 3379
GL_MAX_PIXEL_MAP_TABLE: 3380
GL_MAX_ATTRIB_STACK_DEPTH: 3381
GL_MAX_MODELVIEW_STACK_DEPTH: 3382
GL_MAX_NAME_STACK_DEPTH: 3383
GL_MAX_PROJECTION_STACK_DEPTH: 3384
GL_MAX_TEXTURE_STACK_DEPTH: 3385
GL_MAX_VIEWPORT_DIMS: 3386
GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: 3387
GL_SUBPIXEL_BITS: 3408
GL_INDEX_BITS: 3409
GL_RED_BITS: 3410
GL_GREEN_BITS: 3411
GL_BLUE_BITS: 3412
GL_ALPHA_BITS: 3413
GL_DEPTH_BITS: 3414
GL_STENCIL_BITS: 3415
GL_ACCUM_RED_BITS: 3416
GL_ACCUM_GREEN_BITS: 3417
GL_ACCUM_BLUE_BITS: 3418
GL_ACCUM_ALPHA_BITS: 3419
GL_NAME_STACK_DEPTH: 3440
GL_AUTO_NORMAL: 3456
GL_MAP1_COLOR_4: 3472
GL_MAP1_INDEX: 3473
GL_MAP1_NORMAL: 3474
GL_MAP1_TEXTURE_COORD_1: 3475
GL_MAP1_TEXTURE_COORD_2: 3476
GL_MAP1_TEXTURE_COORD_3: 3477
GL_MAP1_TEXTURE_COORD_4: 3478
GL_MAP1_VERTEX_3: 3479
GL_MAP1_VERTEX_4: 3480
GL_MAP2_COLOR_4: 3504
GL_MAP2_INDEX: 3505
GL_MAP2_NORMAL: 3506
GL_MAP2_TEXTURE_COORD_1: 3507
GL_MAP2_TEXTURE_COORD_2: 3508
GL_MAP2_TEXTURE_COORD_3: 3509
GL_MAP2_TEXTURE_COORD_4: 3510
GL_MAP2_VERTEX_3: 3511
GL_MAP2_VERTEX_4: 3512
GL_MAP1_GRID_DOMAIN: 3536
GL_MAP1_GRID_SEGMENTS: 3537
GL_MAP2_GRID_DOMAIN: 3538
GL_MAP2_GRID_SEGMENTS: 3539
GL_TEXTURE_1D: 3552
GL_TEXTURE_2D: 3553
GL_FEEDBACK_BUFFER_POINTER: 3568
GL_FEEDBACK_BUFFER_SIZE: 3569
GL_FEEDBACK_BUFFER_TYPE: 3570
GL_SELECTION_BUFFER_POINTER: 3571
GL_SELECTION_BUFFER_SIZE: 3572
{ GL_TEXTURE_BINDING_1D }
{ GL_TEXTURE_BINDING_2D }
{ GL_VERTEX_ARRAY }
{ GL_NORMAL_ARRAY }
{ GL_COLOR_ARRAY }
{ GL_INDEX_ARRAY }
{ GL_TEXTURE_COORD_ARRAY }
{ GL_EDGE_FLAG_ARRAY }
{ GL_VERTEX_ARRAY_SIZE }
{ GL_VERTEX_ARRAY_TYPE }
{ GL_VERTEX_ARRAY_STRIDE }
{ GL_NORMAL_ARRAY_TYPE }
{ GL_NORMAL_ARRAY_STRIDE }
{ GL_COLOR_ARRAY_SIZE }
{ GL_COLOR_ARRAY_TYPE }
{ GL_COLOR_ARRAY_STRIDE }
{ GL_INDEX_ARRAY_TYPE }
{ GL_INDEX_ARRAY_STRIDE }
{ GL_TEXTURE_COORD_ARRAY_SIZE }
{ GL_TEXTURE_COORD_ARRAY_TYPE }
{ GL_TEXTURE_COORD_ARRAY_STRIDE }
{ GL_EDGE_FLAG_ARRAY_STRIDE }
{ GL_POLYGON_OFFSET_FACTOR }
{ GL_POLYGON_OFFSET_UNITS }
{ GetTextureParameter }
{ GL_TEXTURE_MAG_FILTER }
{ GL_TEXTURE_MIN_FILTER }
{ GL_TEXTURE_WRAP_S }
{ GL_TEXTURE_WRAP_T }
GL_TEXTURE_WIDTH: 4096
GL_TEXTURE_HEIGHT: 4097
GL_TEXTURE_INTERNAL_FORMAT: 4099
GL_TEXTURE_BORDER_COLOR: 4100
GL_TEXTURE_BORDER: 4101
{ GL_TEXTURE_RED_SIZE }
{ GL_TEXTURE_GREEN_SIZE }
{ GL_TEXTURE_BLUE_SIZE }
{ GL_TEXTURE_ALPHA_SIZE }
{ GL_TEXTURE_LUMINANCE_SIZE }
{ GL_TEXTURE_INTENSITY_SIZE }
{ GL_TEXTURE_PRIORITY }
{ GL_TEXTURE_RESIDENT }
{ HintMode }
GL_DONT_CARE: 4352
GL_FASTEST: 4353
GL_NICEST: 4354
{ HintTarget }
{ GL_PERSPECTIVE_CORRECTION_HINT }
{ GL_POINT_SMOOTH_HINT }
{ GL_LINE_SMOOTH_HINT }
{ GL_POLYGON_SMOOTH_HINT }
{ GL_FOG_HINT }
{ GL_PHONG_HINT }
{ IndexPointerType }
{ GL_SHORT }
{ GL_INT }
{ GL_FLOAT }
{ GL_DOUBLE }
{ LightModelParameter }
{ GL_LIGHT_MODEL_AMBIENT }
{ GL_LIGHT_MODEL_LOCAL_VIEWER }
{ GL_LIGHT_MODEL_TWO_SIDE }
{ LightName }
GL_LIGHT0: 16384
GL_LIGHT1: 16385
GL_LIGHT2: 16386
GL_LIGHT3: 16387
GL_LIGHT4: 16388
GL_LIGHT5: 16389
GL_LIGHT6: 16390
GL_LIGHT7: 16391
{ LightParameter }
GL_AMBIENT: 4608
GL_DIFFUSE: 4609
GL_SPECULAR: 4610
GL_POSITION: 4611
GL_SPOT_DIRECTION: 4612
GL_SPOT_EXPONENT: 4613
GL_SPOT_CUTOFF: 4614
GL_CONSTANT_ATTENUATION: 4615
GL_LINEAR_ATTENUATION: 4616
GL_QUADRATIC_ATTENUATION: 4617
{ InterleavedArrays }
{ GL_V2F }
{ GL_V3F }
{ GL_C4UB_V2F }
{ GL_C4UB_V3F }
{ GL_C3F_V3F }
{ GL_N3F_V3F }
{ GL_C4F_N3F_V3F }
{ GL_T2F_V3F }
{ GL_T4F_V4F }
{ GL_T2F_C4UB_V3F }
{ GL_T2F_C3F_V3F }
{ GL_T2F_N3F_V3F }
{ GL_T2F_C4F_N3F_V3F }
{ GL_T4F_C4F_N3F_V4F }
{ ListMode }
GL_COMPILE: 4864
GL_COMPILE_AND_EXECUTE: 4865
{ ListNameType }
{ GL_BYTE }
{ GL_UNSIGNED_BYTE }
{ GL_SHORT }
{ GL_UNSIGNED_SHORT }
{ GL_INT }
{ GL_UNSIGNED_INT }
{ GL_FLOAT }
{ GL_2_BYTES }
{ GL_3_BYTES }
{ GL_4_BYTES }
{ LogicOp }
GL_CLEAR: 5376
GL_AND: 5377
GL_AND_REVERSE: 5378
GL_COPY: 5379
GL_AND_INVERTED: 5380
GL_NOOP: 5381
GL_XOR: 5382
GL_OR: 5383
GL_NOR: 5384
GL_EQUIV: 5385
GL_INVERT: 5386
GL_OR_REVERSE: 5387
GL_COPY_INVERTED: 5388
GL_OR_INVERTED: 5389
GL_NAND: 5390
GL_SET: 5391
{ MapTarget }
{ GL_MAP1_COLOR_4 }
{ GL_MAP1_INDEX }
{ GL_MAP1_NORMAL }
{ GL_MAP1_TEXTURE_COORD_1 }
{ GL_MAP1_TEXTURE_COORD_2 }
{ GL_MAP1_TEXTURE_COORD_3 }
{ GL_MAP1_TEXTURE_COORD_4 }
{ GL_MAP1_VERTEX_3 }
{ GL_MAP1_VERTEX_4 }
{ GL_MAP2_COLOR_4 }
{ GL_MAP2_INDEX }
{ GL_MAP2_NORMAL }
{ GL_MAP2_TEXTURE_COORD_1 }
{ GL_MAP2_TEXTURE_COORD_2 }
{ GL_MAP2_TEXTURE_COORD_3 }
{ GL_MAP2_TEXTURE_COORD_4 }
{ GL_MAP2_VERTEX_3 }
{ GL_MAP2_VERTEX_4 }
{ MaterialFace }
{ GL_FRONT }
{ GL_BACK }
{ GL_FRONT_AND_BACK }
{ MaterialParameter }
GL_EMISSION: 5632
GL_SHININESS: 5633
GL_AMBIENT_AND_DIFFUSE: 5634
GL_COLOR_INDEXES: 5635
{ GL_AMBIENT }
{ GL_DIFFUSE }
{ GL_SPECULAR }
{ MatrixMode }
GL_MODELVIEW: 5888
GL_PROJECTION: 5889
GL_TEXTURE: 5890
{ MeshMode1 }
{ GL_POINT }
{ GL_LINE }
{ MeshMode2 }
{ GL_POINT }
{ GL_LINE }
{ GL_FILL }
{ NormalPointerType }
{ GL_BYTE }
{ GL_SHORT }
{ GL_INT }
{ GL_FLOAT }
{ GL_DOUBLE }
{ PixelCopyType }
GL_COLOR: 6144
GL_DEPTH: 6145
GL_STENCIL: 6146
{ PixelFormat }
GL_COLOR_INDEX: 6400
GL_STENCIL_INDEX: 6401
GL_DEPTH_COMPONENT: 6402
GL_RED: 6403
GL_GREEN: 6404
GL_BLUE: 6405
GL_ALPHA: 6406
GL_RGB: 6407
GL_RGBA: 6408
GL_LUMINANCE: 6409
GL_LUMINANCE_ALPHA: 6410
{ PixelMap }
{ GL_PIXEL_MAP_I_TO_I }
{ GL_PIXEL_MAP_S_TO_S }
{ GL_PIXEL_MAP_I_TO_R }
{ GL_PIXEL_MAP_I_TO_G }
{ GL_PIXEL_MAP_I_TO_B }
{ GL_PIXEL_MAP_I_TO_A }
{ GL_PIXEL_MAP_R_TO_R }
{ GL_PIXEL_MAP_G_TO_G }
{ GL_PIXEL_MAP_B_TO_B }
{ GL_PIXEL_MAP_A_TO_A }
{ PixelStore }
{ GL_UNPACK_SWAP_BYTES }
{ GL_UNPACK_LSB_FIRST }
{ GL_UNPACK_ROW_LENGTH }
{ GL_UNPACK_SKIP_ROWS }
{ GL_UNPACK_SKIP_PIXELS }
{ GL_UNPACK_ALIGNMENT }
{ GL_PACK_SWAP_BYTES }
{ GL_PACK_LSB_FIRST }
{ GL_PACK_ROW_LENGTH }
{ GL_PACK_SKIP_ROWS }
{ GL_PACK_SKIP_PIXELS }
{ GL_PACK_ALIGNMENT }
{ PixelTransfer }
{ GL_MAP_COLOR }
{ GL_MAP_STENCIL }
{ GL_INDEX_SHIFT }
{ GL_INDEX_OFFSET }
{ GL_RED_SCALE }
{ GL_RED_BIAS }
{ GL_GREEN_SCALE }
{ GL_GREEN_BIAS }
{ GL_BLUE_SCALE }
{ GL_BLUE_BIAS }
{ GL_ALPHA_SCALE }
{ GL_ALPHA_BIAS }
{ GL_DEPTH_SCALE }
{ GL_DEPTH_BIAS }
{ PixelType }
GL_BITMAP: 6656
{ GL_BYTE }
{ GL_UNSIGNED_BYTE }
{ GL_SHORT }
{ GL_UNSIGNED_SHORT }
{ GL_INT }
{ GL_UNSIGNED_INT }
{ GL_FLOAT }
{ PolygonMode }
GL_POINT: 6912
GL_LINE: 6913
GL_FILL: 6914
{ ReadBufferMode }
{ GL_FRONT_LEFT }
{ GL_FRONT_RIGHT }
{ GL_BACK_LEFT }
{ GL_BACK_RIGHT }
{ GL_FRONT }
{ GL_BACK }
{ GL_LEFT }
{ GL_RIGHT }
{ GL_AUX0 }
{ GL_AUX1 }
{ GL_AUX2 }
{ GL_AUX3 }
{ RenderingMode }
GL_RENDER: 7168
GL_FEEDBACK: 7169
GL_SELECT: 7170
{ ShadingModel }
GL_FLAT: 7424
GL_SMOOTH: 7425
{ StencilFunction }
{ GL_NEVER }
{ GL_LESS }
{ GL_EQUAL }
{ GL_LEQUAL }
{ GL_GREATER }
{ GL_NOTEQUAL }
{ GL_GEQUAL }
{ GL_ALWAYS }
{ StencilOp }
{ GL_ZERO }
GL_KEEP: 7680
GL_REPLACE: 7681
GL_INCR: 7682
GL_DECR: 7683
{ GL_INVERT }
{ StringName }
GL_VENDOR: 7936
GL_RENDERER: 7937
GL_VERSION: 7938
GL_EXTENSIONS: 7939
{ TextureCoordName }
GL_S: 8192
GL_T: 8193
GL_R: 8194
GL_Q: 8195
{ TexCoordPointerType }
{ GL_SHORT }
{ GL_INT }
{ GL_FLOAT }
{ GL_DOUBLE }
{ TextureEnvMode }
GL_MODULATE: 8448
GL_DECAL: 8449
{ GL_BLEND }
{ GL_REPLACE }
{ TextureEnvParameter }
GL_TEXTURE_ENV_MODE: 8704
GL_TEXTURE_ENV_COLOR: 8705
{ TextureEnvTarget }
GL_TEXTURE_ENV: 8960
{ TextureGenMode }
GL_EYE_LINEAR: 9216
GL_OBJECT_LINEAR: 9217
GL_SPHERE_MAP: 9218
{ TextureGenParameter }
GL_TEXTURE_GEN_MODE: 9472
GL_OBJECT_PLANE: 9473
GL_EYE_PLANE: 9474
{ TextureMagFilter }
GL_NEAREST: 9728
GL_LINEAR: 9729
{ TextureMinFilter }
{ GL_NEAREST }
{ GL_LINEAR }
GL_NEAREST_MIPMAP_NEAREST: 9984
GL_LINEAR_MIPMAP_NEAREST: 9985
GL_NEAREST_MIPMAP_LINEAR: 9986
GL_LINEAR_MIPMAP_LINEAR: 9987
{ TextureParameterName }
GL_TEXTURE_MAG_FILTER: 10240
GL_TEXTURE_MIN_FILTER: 10241
GL_TEXTURE_WRAP_S: 10242
GL_TEXTURE_WRAP_T: 10243
{ GL_TEXTURE_BORDER_COLOR }
{ GL_TEXTURE_PRIORITY }
{ TextureTarget }
{ GL_TEXTURE_1D }
{ GL_TEXTURE_2D }
{ GL_PROXY_TEXTURE_1D }
{ GL_PROXY_TEXTURE_2D }
{ TextureWrapMode }
GL_CLAMP: 10496
GL_REPEAT: 10497
{ VertexPointerType }
{ GL_SHORT }
{ GL_INT }
{ GL_FLOAT }
{ GL_DOUBLE }
{ ClientAttribMask }
GL_CLIENT_PIXEL_STORE_BIT: 1
GL_CLIENT_VERTEX_ARRAY_BIT: 2
GL_CLIENT_ALL_ATTRIB_BITS: -1
{ polygon_offset }
GL_POLYGON_OFFSET_FACTOR: 32824
GL_POLYGON_OFFSET_UNITS: 10752
GL_POLYGON_OFFSET_POINT: 10753
GL_POLYGON_OFFSET_LINE: 10754
GL_POLYGON_OFFSET_FILL: 32823
{ texture }
GL_ALPHA4: 32827
GL_ALPHA8: 32828
GL_ALPHA12: 32829
GL_ALPHA16: 32830
GL_LUMINANCE4: 32831
GL_LUMINANCE8: 32832
GL_LUMINANCE12: 32833
GL_LUMINANCE16: 32834
GL_LUMINANCE4_ALPHA4: 32835
GL_LUMINANCE6_ALPHA2: 32836
GL_LUMINANCE8_ALPHA8: 32837
GL_LUMINANCE12_ALPHA4: 32838
GL_LUMINANCE12_ALPHA12: 32839
GL_LUMINANCE16_ALPHA16: 32840
GL_INTENSITY: 32841
GL_INTENSITY4: 32842
GL_INTENSITY8: 32843
GL_INTENSITY12: 32844
GL_INTENSITY16: 32845
GL_R3_G3_B2: 10768
GL_RGB4: 32847
GL_RGB5: 32848
GL_RGB8: 32849
GL_RGB10: 32850
GL_RGB12: 32851
GL_RGB16: 32852
GL_RGBA2: 32853
GL_RGBA4: 32854
GL_RGB5_A1: 32855
GL_RGBA8: 32856
GL_RGB10_A2: 32857
GL_RGBA12: 32858
GL_RGBA16: 32859
GL_TEXTURE_RED_SIZE: 32860
GL_TEXTURE_GREEN_SIZE: 32861
GL_TEXTURE_BLUE_SIZE: 32862
GL_TEXTURE_ALPHA_SIZE: 32863
GL_TEXTURE_LUMINANCE_SIZE: 32864
GL_TEXTURE_INTENSITY_SIZE: 32865
GL_PROXY_TEXTURE_1D: 32867
GL_PROXY_TEXTURE_2D: 32868
{ texture_object }
GL_TEXTURE_PRIORITY: 32870
GL_TEXTURE_RESIDENT: 32871
GL_TEXTURE_BINDING_1D: 32872
GL_TEXTURE_BINDING_2D: 32873
{ vertex_array }
GL_VERTEX_ARRAY: 32884
GL_NORMAL_ARRAY: 32885
GL_COLOR_ARRAY: 32886
GL_INDEX_ARRAY: 32887
GL_TEXTURE_COORD_ARRAY: 32888
GL_EDGE_FLAG_ARRAY: 32889
GL_VERTEX_ARRAY_SIZE: 32890
GL_VERTEX_ARRAY_TYPE: 32891
GL_VERTEX_ARRAY_STRIDE: 32892
GL_NORMAL_ARRAY_TYPE: 32894
GL_NORMAL_ARRAY_STRIDE: 32895
GL_COLOR_ARRAY_SIZE: 32897
GL_COLOR_ARRAY_TYPE: 32898
GL_COLOR_ARRAY_STRIDE: 32899
GL_INDEX_ARRAY_TYPE: 32901
GL_INDEX_ARRAY_STRIDE: 32902
GL_TEXTURE_COORD_ARRAY_SIZE: 32904
GL_TEXTURE_COORD_ARRAY_TYPE: 32905
GL_TEXTURE_COORD_ARRAY_STRIDE: 32906
GL_EDGE_FLAG_ARRAY_STRIDE: 32908
GL_VERTEX_ARRAY_POINTER: 32910
GL_NORMAL_ARRAY_POINTER: 32911
GL_COLOR_ARRAY_POINTER: 32912
GL_INDEX_ARRAY_POINTER: 32913
GL_TEXTURE_COORD_ARRAY_POINTER: 32914
GL_EDGE_FLAG_ARRAY_POINTER: 32915
GL_V2F: 10784
GL_V3F: 10785
GL_C4UB_V2F: 10786
GL_C4UB_V3F: 10787
GL_C3F_V3F: 10788
GL_N3F_V3F: 10789
GL_C4F_N3F_V3F: 10790
GL_T2F_V3F: 10791
GL_T4F_V4F: 10792
GL_T2F_C4UB_V3F: 10793
GL_T2F_C3F_V3F: 10794
GL_T2F_N3F_V3F: 10795
GL_T2F_C4F_N3F_V3F: 10796
GL_T4F_C4F_N3F_V4F: 10797
{ Extensions }
GL_EXT_vertex_array: 1
GL_EXT_bgra: 1
GL_EXT_paletted_texture: 1
GL_WIN_swap_hint: 1
GL_WIN_draw_range_elements: 1
; GL_WIN_phong_shading: 1
; GL_WIN_specular_fog: 1
{ EXT_vertex_array }
GL_VERTEX_ARRAY_EXT: 32884
GL_NORMAL_ARRAY_EXT: 32885
GL_COLOR_ARRAY_EXT: 32886
GL_INDEX_ARRAY_EXT: 32887
GL_TEXTURE_COORD_ARRAY_EXT: 32888
GL_EDGE_FLAG_ARRAY_EXT: 32889
GL_VERTEX_ARRAY_SIZE_EXT: 32890
GL_VERTEX_ARRAY_TYPE_EXT: 32891
GL_VERTEX_ARRAY_STRIDE_EXT: 32892
GL_VERTEX_ARRAY_COUNT_EXT: 32893
GL_NORMAL_ARRAY_TYPE_EXT: 32894
GL_NORMAL_ARRAY_STRIDE_EXT: 32895
GL_NORMAL_ARRAY_COUNT_EXT: 32896
GL_COLOR_ARRAY_SIZE_EXT: 32897
GL_COLOR_ARRAY_TYPE_EXT: 32898
GL_COLOR_ARRAY_STRIDE_EXT: 32899
GL_COLOR_ARRAY_COUNT_EXT: 32900
GL_INDEX_ARRAY_TYPE_EXT: 32901
GL_INDEX_ARRAY_STRIDE_EXT: 32902
GL_INDEX_ARRAY_COUNT_EXT: 32903
GL_TEXTURE_COORD_ARRAY_SIZE_EXT: 32904
GL_TEXTURE_COORD_ARRAY_TYPE_EXT: 32905
GL_TEXTURE_COORD_ARRAY_STRIDE_EXT: 32906
GL_TEXTURE_COORD_ARRAY_COUNT_EXT: 32907
GL_EDGE_FLAG_ARRAY_STRIDE_EXT: 32908
GL_EDGE_FLAG_ARRAY_COUNT_EXT: 32909
GL_VERTEX_ARRAY_POINTER_EXT: 32910
GL_NORMAL_ARRAY_POINTER_EXT: 32911
GL_COLOR_ARRAY_POINTER_EXT: 32912
GL_INDEX_ARRAY_POINTER_EXT: 32913
GL_TEXTURE_COORD_ARRAY_POINTER_EXT: 32914
GL_EDGE_FLAG_ARRAY_POINTER_EXT: 32915
GL_DOUBLE_EXT: GL_DOUBLE
{ EXT_bgra }
GL_BGR_EXT: 32992
GL_BGRA_EXT: 32993
{ EXT_paletted_texture }
{ These must match the GL_COLOR_TABLE_*_SGI enumerants }
GL_COLOR_TABLE_FORMAT_EXT: 32984
GL_COLOR_TABLE_WIDTH_EXT: 32985
GL_COLOR_TABLE_RED_SIZE_EXT: 32986
GL_COLOR_TABLE_GREEN_SIZE_EXT: 32987
GL_COLOR_TABLE_BLUE_SIZE_EXT: 32988
GL_COLOR_TABLE_ALPHA_SIZE_EXT: 32989
GL_COLOR_TABLE_LUMINANCE_SIZE_EXT: 32990
GL_COLOR_TABLE_INTENSITY_SIZE_EXT: 32991
GL_COLOR_INDEX1_EXT: 32994
GL_COLOR_INDEX2_EXT: 32995
GL_COLOR_INDEX4_EXT: 32996
GL_COLOR_INDEX8_EXT: 32997
GL_COLOR_INDEX12_EXT: 32998
GL_COLOR_INDEX16_EXT: 32999
{ WIN_draw_range_elements }
GL_MAX_ELEMENTS_VERTICES_WIN: 33000
GL_MAX_ELEMENTS_INDICES_WIN: 33001
{ WIN_phong_shading }
GL_PHONG_WIN: 33002
GL_PHONG_HINT_WIN: 33003
{ WIN_specular_fog }
GL_FOG_SPECULAR_TEXTURE_WIN: 33004
{ For compatibility with OpenGL v1.0 }
GL_LOGIC_OP: GL_INDEX_LOGIC_OP
GL_TEXTURE_COMPONENTS: GL_TEXTURE_INTERNAL_FORMAT
{***********************************************************}
glAccum: make routine! [ op [GLenum] value [float] ] opengl-lib "glAccum"
glAlphaFunc: make routine! [ func [GLenum] ref [float] ] opengl-lib "glAlphaFunc"
glAreTexturesResident: make routine! [ n [GLsizei] textures [integer!] residences [integer!] return: [GLboolean] ] opengl-lib "glAreTexturesResident"
glArrayElement: make routine! [ i [GLint] ] opengl-lib "glArrayElement"
glBegin: make routine! [ mode [GLenum] ] opengl-lib "glBegin"
glBindTexture: make routine! [ target [GLenum] texture [binary!] ] opengl-lib "glBindTexture"
glBitmap: make routine! [ width [GLsizei] height [GLsizei] xorig [float] yorig [float] xmove [float] ymove [float] bitmap [binary!] ] opengl-lib "glBitmap"
glBlendFunc: make routine! [ sfactor [GLenum] dfactor [GLenum] ] opengl-lib "glBlendFunc"
glCallList: make routine! [ list [GLuint] ] opengl-lib "glCallList"
glCallLists: make routine! [ n [GLsizei] type [GLenum] lists [integer!] ] opengl-lib "glCallLists"
glClear: make routine! [ mask [GLbitfield] ] opengl-lib "glClear"
glClearAccum: make routine! [ red [float] green [float] blue [float] alpha [float] ] opengl-lib "glClearAccum"
glClearColor: make routine! [ red [float] green [float] blue [float] alpha [float] ] opengl-lib "glClearColor"
glClearDepth: make routine! [ depth [GLclampd] ] opengl-lib "glClearDepth"
glClearIndex: make routine! [ c [float] ] opengl-lib "glClearIndex"
glClearStencil: make routine! [ s [GLint] ] opengl-lib "glClearStencil"
glClipPlane: make routine! [ plane [GLenum] equation [binary!] ] opengl-lib "glClipPlane"
gl-ClipPlane: func [ plane [GLenum] equation [block!] /local bin] [
bin: third block-to-struct equation ;MUST assing to a local variable on Linux (!?)
glClipPlane plane bin
]
;gl-Color: func [color [tuple!]] [either color/4 [glColor4ub to-char color/1 to-char color/2 to-char color/3 to-char color/4] [glColor3ub to-char color/1 to-char color/2 to-char color/3]]
gl-Color: func [color [tuple!]] [either color/4 [glColor4ubv to-binary color] [glColor3ubv to-binary color]]
glColor3: glColor3d: make routine! [ red [GLdouble] green [GLdouble] blue [GLdouble] ] opengl-lib "glColor3d"
glColor3f: make routine! [ red [float] green [float] blue [float] ] opengl-lib "glColor3f"
glColor3ub: make routine! [ red [GLubyte] green [GLubyte] blue [GLubyte] ] opengl-lib "glColor3ub"
glColor3ubv: make routine! [ v [binary!] ] opengl-lib "glColor3ubv"
glColor4: glColor4d: make routine! [ red [GLdouble] green [GLdouble] blue [GLdouble] alpha [GLdouble] ] opengl-lib "glColor4d"
glColor4f: make routine! [ red [float] green [float] blue [float] alpha [float] ] opengl-lib "glColor4f"
glColor4ub: make routine! [ red [GLubyte] green [GLubyte] blue [GLubyte] alpha [GLubyte] ] opengl-lib "glColor4ub"
glColor4ubv: make routine! [ v [binary!] ] opengl-lib "glColor4ubv"
{
glColor3b: make routine! [ red [GLbyte] green [GLbyte] blue [GLbyte] ] opengl-lib "glColor3b"
glColor3bv: make routine! [ v [binary!] ] opengl-lib "glColor3bv"
glColor3dv: make routine! [ v [integer!] ] opengl-lib "glColor3dv"
glColor3fv: make routine! [ v [integer!] ] opengl-lib "glColor3fv"
glColor3i: make routine! [ red [GLint] green [GLint] blue [GLint] ] opengl-lib "glColor3i"
glColor3iv: make routine! [ v [integer!] ] opengl-lib "glColor3iv"
glColor3s: make routine! [ red [short] green [short] blue [short] ] opengl-lib "glColor3s"
glColor3sv: make routine! [ v [integer!] ] opengl-lib "glColor3sv"
glColor3ui: make routine! [ red [GLuint] green [GLuint] blue [GLuint] ] opengl-lib "glColor3ui"
glColor3uiv: make routine! [ v [integer!] ] opengl-lib "glColor3uiv"
glColor3us: make routine! [ red [short] green [short] blue [short] ] opengl-lib "glColor3us"
glColor3usv: make routine! [ v [integer!] ] opengl-lib "glColor3usv"
glColor4b: make routine! [ red [GLbyte] green [GLbyte] blue [GLbyte] alpha [GLbyte] ] opengl-lib "glColor4b"
glColor4bv: make routine! [ v [integer!] ] opengl-lib "glColor4bv"
glColor4dv: make routine! [ v [integer!] ] opengl-lib "glColor4dv"
glColor4fv: make routine! [ v [integer!] ] opengl-lib "glColor4fv"
glColor4i: make routine! [ red [GLint] green [GLint] blue [GLint] alpha [GLint] ] opengl-lib "glColor4i"
glColor4iv: make routine! [ v [integer!] ] opengl-lib "glColor4iv"
glColor4s: make routine! [ red [short] green [short] blue [short] alpha [short] ] opengl-lib "glColor4s"
glColor4sv: make routine! [ v [integer!] ] opengl-lib "glColor4sv"
glColor4ui: make routine! [ red [GLuint] green [GLuint] blue [GLuint] alpha [GLuint] ] opengl-lib "glColor4ui"
glColor4uiv: make routine! [ v [integer!] ] opengl-lib "glColor4uiv"
glColor4us: make routine! [ red [short] green [short] blue [short] alpha [short] ] opengl-lib "glColor4us"
glColor4usv: make routine! [ v [integer!] ] opengl-lib "glColor4usv"
}
glColorMask: make routine! [ red [GLboolean] green [GLboolean] blue [GLboolean] alpha [GLboolean] ] opengl-lib "glColorMask"
glColorMaterial: make routine! [ face [GLenum] mode [GLenum] ] opengl-lib "glColorMaterial"
glColorPointer: make routine! [ size [GLint] type [GLenum] stride [GLsizei] pointer [integer!] ] opengl-lib "glColorPointer"
glCopyPixels: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] type [GLenum] ] opengl-lib "glCopyPixels"
glCopyTexImage1D: make routine! [ target [GLenum] level [GLint] internalFormat [GLenum] x [GLint] y [GLint] width [GLsizei] border [GLint] ] opengl-lib "glCopyTexImage1D"
glCopyTexImage2D: make routine! [ target [GLenum] level [GLint] internalFormat [GLenum] x [GLint] y [GLint] width [GLsizei] height [GLsizei] border [GLint] ] opengl-lib "glCopyTexImage2D"
glCopyTexSubImage1D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] x [GLint] y [GLint] width [GLsizei] ] opengl-lib "glCopyTexSubImage1D"
glCopyTexSubImage2D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] opengl-lib "glCopyTexSubImage2D"
glCullFace: make routine! [ mode [GLenum] ] opengl-lib "glCullFace"
glDeleteLists: make routine! [ list [GLuint] range [GLsizei] ] opengl-lib "glDeleteLists"
glDeleteTextures: make routine! [ n [GLsizei] textures [integer!] ] opengl-lib "glDeleteTextures"
glDepthFunc: make routine! [ func [GLenum] ] opengl-lib "glDepthFunc"
glDepthMask: make routine! [ flag [GLboolean] ] opengl-lib "glDepthMask"
glDepthRange: make routine! [ zNear [GLclampd] zFar [GLclampd] ] opengl-lib "glDepthRange"
glDisable: make routine! [ cap [GLenum] ] opengl-lib "glDisable"
gl-Disable: func [/cull_face /fog /lighting /alpha_test /depth_test /blend] [
case/all [
cull_face [glDisable GL_CULL_FACE]
fog [glDisable GL_FOG]
lighting [glDisable GL_LIGHTING]
alpha_test [glDisable GL_ALPHA_TEST]
depth_test [glDisable GL_DEPTH_TEST]
blend [glDisable GL_BLEND]
]
]
glDisableClientState: make routine! [ array [GLenum] ] opengl-lib "glDisableClientState"
glDrawArrays: make routine! [ mode [GLenum] first [GLint] count [GLsizei] ] opengl-lib "glDrawArrays"
glDrawBuffer: make routine! [ mode [GLenum] ] opengl-lib "glDrawBuffer"
glDrawElements: make routine! [ mode [GLenum] count [GLsizei] type [GLenum] indices [binary!] ] opengl-lib "glDrawElements"
gl-DrawElements: func [ mode [GLenum] count [GLsizei] indices [block!] /local bin] [
bin: third block-to-struct/floats indices ;MUST assing to a local variable in Linux (!?)
glDrawElements mode count GL_UNSIGNED_INT bin
]
glDrawPixels: make routine! [ width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] pixels [binary!] ] opengl-lib "glDrawPixels"
glEdgeFlag: make routine! [ flag [GLboolean] ] opengl-lib "glEdgeFlag"
glEdgeFlagPointer: make routine! [ stride [GLsizei] pointer [integer!] ] opengl-lib "glEdgeFlagPointer"
glEdgeFlagv: make routine! [ flag [integer!] ] opengl-lib "glEdgeFlagv"
glEnable: make routine! [ cap [GLenum] ] opengl-lib "glEnable"
gl-Enable: func [/cull_face /fog /lighting /alpha_test /depth_test /blend] [
case/all [
cull_face [glEnable GL_CULL_FACE]
fog [glEnable GL_FOG]
lighting [glEnable GL_LIGHTING]
alpha_test [glEnable GL_ALPHA_TEST]
depth_test [glEnable GL_DEPTH_TEST]
blend [glEnable GL_BLEND]
]
]
glEnableClientState: make routine! [ array [GLenum] ] opengl-lib "glEnableClientState"
glEnd: make routine! [ ] opengl-lib "glEnd"
glEndList: make routine! [ ] opengl-lib "glEndList"
glEvalCoord1d: make routine! [ u [GLdouble] ] opengl-lib "glEvalCoord1d"
glEvalCoord1dv: make routine! [ u [integer!] ] opengl-lib "glEvalCoord1dv"
glEvalCoord1f: make routine! [ u [float] ] opengl-lib "glEvalCoord1f"
glEvalCoord1fv: make routine! [ u [integer!] ] opengl-lib "glEvalCoord1fv"
glEvalCoord2d: make routine! [ u [GLdouble] v [GLdouble] ] opengl-lib "glEvalCoord2d"
glEvalCoord2dv: make routine! [ u [integer!] ] opengl-lib "glEvalCoord2dv"
glEvalCoord2f: make routine! [ u [float] v [float] ] opengl-lib "glEvalCoord2f"
glEvalCoord2fv: make routine! [ u [integer!] ] opengl-lib "glEvalCoord2fv"
glEvalMesh1: make routine! [ mode [GLenum] i1 [GLint] i2 [GLint] ] opengl-lib "glEvalMesh1"
glEvalMesh2: make routine! [ mode [GLenum] i1 [GLint] i2 [GLint] j1 [GLint] j2 [GLint] ] opengl-lib "glEvalMesh2"
glEvalPoint1: make routine! [ i [GLint] ] opengl-lib "glEvalPoint1"
glEvalPoint2: make routine! [ i [GLint] j [GLint] ] opengl-lib "glEvalPoint2"
glFeedbackBuffer: make routine! [ size [GLsizei] type [GLenum] buffer [integer!] ] opengl-lib "glFeedbackBuffer"
glFinish: make routine! [ ] opengl-lib "glFinish"
glFlush: make routine! [ ] opengl-lib "glFlush"
glFogf: make routine! [ pname [GLenum] param [float] ] opengl-lib "glFogf"
glFogfv: make routine! [ pname [GLenum] params [integer!] ] opengl-lib "glFogfv"
glFogi: make routine! [ pname [GLenum] param [GLint] ] opengl-lib "glFogi"
glFogiv: make routine! [ pname [GLenum] params [integer!] ] opengl-lib "glFogiv"
glFrontFace: make routine! [ mode [GLenum] ] opengl-lib "glFrontFace"
glFrustum: make routine! [ left [GLdouble] right [GLdouble] bottom [GLdouble] top [GLdouble] zNear [GLdouble] zFar [GLdouble] ] opengl-lib "glFrustum"
glGenLists: make routine! [ range [GLsizei] return: [GLuint] ] opengl-lib "glGenLists"
glGenTextures: make routine! [ n [GLsizei] textures [binary!] ] opengl-lib "glGenTextures"
glGetBooleanv: make routine! [ pname [GLenum] params [integer!] ] opengl-lib "glGetBooleanv"
glGetClipPlane: make routine! [ plane [GLenum] equation [integer!] ] opengl-lib "glGetClipPlane"
glGetDoublev: make routine! [ pname [GLenum] params [struct! []] ] opengl-lib "glGetDoublev"
glGetError: make routine! [ return: [GLenum] ] opengl-lib "glGetError"
glGetFloatv: make routine! [ pname [GLenum] params [struct! []] ] opengl-lib "glGetFloatv"
glGetIntegerv: make routine! [ pname [GLenum] params [struct! []] ] opengl-lib "glGetIntegerv"
glGetLightfv: make routine! [ light [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetLightfv"
glGetLightiv: make routine! [ light [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetLightiv"
glGetMapdv: make routine! [ target [GLenum] query [GLenum] v [integer!] ] opengl-lib "glGetMapdv"
glGetMapfv: make routine! [ target [GLenum] query [GLenum] v [integer!] ] opengl-lib "glGetMapfv"
glGetMapiv: make routine! [ target [GLenum] query [GLenum] v [integer!] ] opengl-lib "glGetMapiv"
glGetMaterialfv: make routine! [ face [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetMaterialfv"
glGetMaterialiv: make routine! [ face [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetMaterialiv"
glGetPixelMapfv: make routine! [ map [GLenum] values [integer!] ] opengl-lib "glGetPixelMapfv"
glGetPixelMapuiv: make routine! [ map [GLenum] values [integer!] ] opengl-lib "glGetPixelMapuiv"
glGetPixelMapusv: make routine! [ map [GLenum] values [integer!] ] opengl-lib "glGetPixelMapusv"
glGetPointerv: make routine! [ pname [GLenum] params [struct! []] ] opengl-lib "glGetPointerv"
glGetPolygonStipple: make routine! [ mask [integer!] ] opengl-lib "glGetPolygonStipple"
glGetString: make routine! [ name [GLenum] return: [string!] ] opengl-lib "glGetString"
glGetTexEnvfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexEnvfv"
glGetTexEnviv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexEnviv"
glGetTexGendv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexGendv"
glGetTexGenfv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexGenfv"
glGetTexGeniv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexGeniv"
glGetTexImage: make routine! [ target [GLenum] level [GLint] format [GLenum] type [GLenum] pixels [integer!] ] opengl-lib "glGetTexImage"
glGetTexLevelParameterfv: make routine! [ target [GLenum] level [GLint] pname [GLenum] params [integer!] ] opengl-lib "glGetTexLevelParameterfv"
glGetTexLevelParameteriv: make routine! [ target [GLenum] level [GLint] pname [GLenum] params [integer!] ] opengl-lib "glGetTexLevelParameteriv"
glGetTexParameterfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexParameterfv"
glGetTexParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glGetTexParameteriv"
glHint: make routine! [ target [GLenum] mode [GLenum] ] opengl-lib "glHint"
glIndexMask: make routine! [ mask [GLuint] ] opengl-lib "glIndexMask"
glIndexPointer: make routine! [ type [GLenum] stride [GLsizei] pointer [integer!] ] opengl-lib "glIndexPointer"
glIndexd: make routine! [ c [GLdouble] ] opengl-lib "glIndexd"
glIndexdv: make routine! [ c [integer!] ] opengl-lib "glIndexdv"
glIndexf: make routine! [ c [float] ] opengl-lib "glIndexf"
glIndexfv: make routine! [ c [integer!] ] opengl-lib "glIndexfv"
glIndexi: make routine! [ c [GLint] ] opengl-lib "glIndexi"
glIndexiv: make routine! [ c [integer!] ] opengl-lib "glIndexiv"
glIndexs: make routine! [ c [short] ] opengl-lib "glIndexs"
glIndexsv: make routine! [ c [integer!] ] opengl-lib "glIndexsv"
glIndexub: make routine! [ c [GLubyte] ] opengl-lib "glIndexub"
glIndexubv: make routine! [ c [integer!] ] opengl-lib "glIndexubv"
glInitNames: make routine! [ ] opengl-lib "glInitNames"
glInterleavedArrays: make routine! [ format [GLenum] stride [GLsizei] pointer [integer!] ] opengl-lib "glInterleavedArrays"
glIsEnabled: make routine! [ cap [GLenum] return: [GLboolean] ] opengl-lib "glIsEnabled"
glIsList: make routine! [ list [GLuint] return: [GLboolean] ] opengl-lib "glIsList"
glIsTexture: make routine! [ texture [GLuint] return: [GLboolean] ] opengl-lib "glIsTexture"
glLightModelf: make routine! [ pname [GLenum] param [float] ] opengl-lib "glLightModelf"
glLightModelfv: make routine! [ pname [GLenum] params [integer!] ] opengl-lib "glLightModelfv"
glLightModeli: make routine! [ pname [GLenum] param [GLint] ] opengl-lib "glLightModeli"
glLightModeliv: make routine! [ pname [GLenum] params [integer!] ] opengl-lib "glLightModeliv"
glLightf: make routine! [ light [GLenum] pname [GLenum] param [float] ] opengl-lib "glLightf"
glLightfv: make routine! [ light [integer!] pname [integer!] params [binary!] ] opengl-lib "glLightfv"
gl-Lightfv: func [ light [integer!] pname [integer!] params [block!] /local bin] [
bin: third block-to-struct/floats params ;MUST assing to a local variable in Linux (!?)
glLightfv light pname bin
]
glLighti: make routine! [ light [GLenum] pname [GLenum] param [GLint] ] opengl-lib "glLighti"
glLightiv: make routine! [ light [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glLightiv"
glLineStipple: make routine! [ factor [GLint] pattern [short] ] opengl-lib "glLineStipple"
glLineWidth: make routine! [ width [float] ] opengl-lib "glLineWidth"
glListBase: make routine! [ base [GLuint] ] opengl-lib "glListBase"
glLoadIdentity: make routine! [ ] opengl-lib "glLoadIdentity"
glLoadMatrixd: make routine! [ m [integer!] ] opengl-lib "glLoadMatrixd"
glLoadMatrixf: make routine! [ m [integer!] ] opengl-lib "glLoadMatrixf"
glLoadName: make routine! [ name [GLuint] ] opengl-lib "glLoadName"
glLogicOp: make routine! [ opcode [GLenum] ] opengl-lib "glLogicOp"
glMap1d: make routine! [ target [GLenum] u1 [GLdouble] u2 [GLdouble] stride [GLint] order [GLint] points [integer!] ] opengl-lib "glMap1d"
glMap1f: make routine! [ target [GLenum] u1 [float] u2 [float] stride [GLint] order [GLint] points [integer!] ] opengl-lib "glMap1f"
glMap2d: make routine! [ target [GLenum] u1 [GLdouble] u2 [GLdouble] ustride [GLint] uorder [GLint] v1 [GLdouble] v2 [GLdouble] vstride [GLint] vorder [GLint] points [integer!] ] opengl-lib "glMap2d"
glMap2f: make routine! [ target [GLenum] u1 [float] u2 [float] ustride [GLint] uorder [GLint] v1 [float] v2 [float] vstride [GLint] vorder [GLint] points [integer!] ] opengl-lib "glMap2f"
glMapGrid1d: make routine! [ un [GLint] u1 [GLdouble] u2 [GLdouble] ] opengl-lib "glMapGrid1d"
glMapGrid1f: make routine! [ un [GLint] u1 [float] u2 [float] ] opengl-lib "glMapGrid1f"
glMapGrid2d: make routine! [ un [GLint] u1 [GLdouble] u2 [GLdouble] vn [GLint] v1 [GLdouble] v2 [GLdouble] ] opengl-lib "glMapGrid2d"
glMapGrid2f: make routine! [ un [GLint] u1 [float] u2 [float] vn [GLint] v1 [float] v2 [float] ] opengl-lib "glMapGrid2f"
glMaterialf: make routine! [ face [GLenum] pname [GLenum] param [float] ] opengl-lib "glMaterialf"
glMaterialfv: make routine! [ face [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glMaterialfv"
glMateriali: make routine! [ face [GLenum] pname [GLenum] param [GLint] ] opengl-lib "glMateriali"
glMaterialiv: make routine! [ face [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glMaterialiv"
glMatrixMode: make routine! [ mode [GLenum] ] opengl-lib "glMatrixMode"
glMultMatrixd: make routine! [ m [integer!] ] opengl-lib "glMultMatrixd"
glMultMatrixf: make routine! [ m [integer!] ] opengl-lib "glMultMatrixf"
glNewList: make routine! [ list [GLuint] mode [GLenum] ] opengl-lib "glNewList"
glNormal3b: make routine! [ nx [GLbyte] ny [GLbyte] nz [GLbyte] ] opengl-lib "glNormal3b"
glNormal3bv: make routine! [ v [integer!] ] opengl-lib "glNormal3bv"
glNormal3d: make routine! [ nx [GLdouble] ny [GLdouble] nz [GLdouble] ] opengl-lib "glNormal3d"
glNormal3dv: make routine! [ v [integer!] ] opengl-lib "glNormal3dv"
glNormal3f: make routine! [ nx [float] ny [float] nz [float] ] opengl-lib "glNormal3f"
glNormal3fv: make routine! [ v [integer!] ] opengl-lib "glNormal3fv"
glNormal3i: make routine! [ nx [GLint] ny [GLint] nz [GLint] ] opengl-lib "glNormal3i"
glNormal3iv: make routine! [ v [integer!] ] opengl-lib "glNormal3iv"
glNormal3s: make routine! [ nx [short] ny [short] nz [short] ] opengl-lib "glNormal3s"
glNormal3sv: make routine! [ v [integer!] ] opengl-lib "glNormal3sv"
glNormalPointer: make routine! [ type [GLenum] stride [GLsizei] pointer [integer!] ] opengl-lib "glNormalPointer"
glOrtho: make routine! [ left [GLdouble] right [GLdouble] bottom [GLdouble] top [GLdouble] zNear [GLdouble] zFar [GLdouble] ] opengl-lib "glOrtho"
glPassThrough: make routine! [ token [float] ] opengl-lib "glPassThrough"
glPixelMapfv: make routine! [ map [GLenum] mapsize [GLsizei] values [integer!] ] opengl-lib "glPixelMapfv"
glPixelMapuiv: make routine! [ map [GLenum] mapsize [GLsizei] values [integer!] ] opengl-lib "glPixelMapuiv"
glPixelMapusv: make routine! [ map [GLenum] mapsize [GLsizei] values [integer!] ] opengl-lib "glPixelMapusv"
glPixelStoref: make routine! [ pname [GLenum] param [float] ] opengl-lib "glPixelStoref"
glPixelStorei: make routine! [ pname [GLenum] param [GLint] ] opengl-lib "glPixelStorei"
glPixelTransferf: make routine! [ pname [GLenum] param [float] ] opengl-lib "glPixelTransferf"
glPixelTransferi: make routine! [ pname [GLenum] param [GLint] ] opengl-lib "glPixelTransferi"
glPixelZoom: make routine! [ xfactor [float] yfactor [float] ] opengl-lib "glPixelZoom"
glPointSize: make routine! [ size [float] ] opengl-lib "glPointSize"
glPolygonMode: make routine! [ face [GLenum] mode [GLenum] ] opengl-lib "glPolygonMode"
glPolygonOffset: make routine! [ factor [float] units [float] ] opengl-lib "glPolygonOffset"
glPolygonStipple: make routine! [ mask [integer!] ] opengl-lib "glPolygonStipple"
glPopAttrib: make routine! [ ] opengl-lib "glPopAttrib"
glPopClientAttrib: make routine! [ ] opengl-lib "glPopClientAttrib"
glPopMatrix: make routine! [ ] opengl-lib "glPopMatrix"
glPopName: make routine! [ ] opengl-lib "glPopName"
glPrioritizeTextures: make routine! [ n [GLsizei] textures [integer!] priorities [integer!] ] opengl-lib "glPrioritizeTextures"
glPushAttrib: make routine! [ mask [GLbitfield] ] opengl-lib "glPushAttrib"
glPushClientAttrib: make routine! [ mask [GLbitfield] ] opengl-lib "glPushClientAttrib"
glPushMatrix: make routine! [ ] opengl-lib "glPushMatrix"
glPushName: make routine! [ name [GLuint] ] opengl-lib "glPushName"
glRasterPos2d: make routine! [ x [GLdouble] y [GLdouble] ] opengl-lib "glRasterPos2d"
glRasterPos2dv: make routine! [ v [integer!] ] opengl-lib "glRasterPos2dv"
glRasterPos2f: make routine! [ x [float] y [float] ] opengl-lib "glRasterPos2f"
glRasterPos2fv: make routine! [ v [integer!] ] opengl-lib "glRasterPos2fv"
glRasterPos2i: make routine! [ x [GLint] y [GLint] ] opengl-lib "glRasterPos2i"
glRasterPos2iv: make routine! [ v [integer!] ] opengl-lib "glRasterPos2iv"
glRasterPos2s: make routine! [ x [short] y [short] ] opengl-lib "glRasterPos2s"
glRasterPos2sv: make routine! [ v [integer!] ] opengl-lib "glRasterPos2sv"
glRasterPos3d: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] ] opengl-lib "glRasterPos3d"
glRasterPos3dv: make routine! [ v [integer!] ] opengl-lib "glRasterPos3dv"
glRasterPos3f: make routine! [ x [float] y [float] z [float] ] opengl-lib "glRasterPos3f"
glRasterPos3fv: make routine! [ v [integer!] ] opengl-lib "glRasterPos3fv"
glRasterPos3i: make routine! [ x [GLint] y [GLint] z [GLint] ] opengl-lib "glRasterPos3i"
glRasterPos3iv: make routine! [ v [integer!] ] opengl-lib "glRasterPos3iv"
glRasterPos3s: make routine! [ x [short] y [short] z [short] ] opengl-lib "glRasterPos3s"
glRasterPos3sv: make routine! [ v [integer!] ] opengl-lib "glRasterPos3sv"
glRasterPos4d: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] w [GLdouble] ] opengl-lib "glRasterPos4d"
glRasterPos4dv: make routine! [ v [integer!] ] opengl-lib "glRasterPos4dv"
glRasterPos4f: make routine! [ x [float] y [float] z [float] w [float] ] opengl-lib "glRasterPos4f"
glRasterPos4fv: make routine! [ v [integer!] ] opengl-lib "glRasterPos4fv"
glRasterPos4i: make routine! [ x [GLint] y [GLint] z [GLint] w [GLint] ] opengl-lib "glRasterPos4i"
glRasterPos4iv: make routine! [ v [integer!] ] opengl-lib "glRasterPos4iv"
glRasterPos4s: make routine! [ x [short] y [short] z [short] w [short] ] opengl-lib "glRasterPos4s"
glRasterPos4sv: make routine! [ v [integer!] ] opengl-lib "glRasterPos4sv"
glReadBuffer: make routine! [ mode [GLenum] ] opengl-lib "glReadBuffer"
glReadPixels: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] pixels [binary!] ] opengl-lib "glReadPixels"
glRect: glRectd: make routine! [ x1 [GLdouble] y1 [GLdouble] x2 [GLdouble] y2 [GLdouble] ] opengl-lib "glRectd"
glRectdv: make routine! [ v1 [integer!] v2 [integer!] ] opengl-lib "glRectdv"
glRectf: make routine! [ x1 [float] y1 [float] x2 [float] y2 [float] ] opengl-lib "glRectf"
glRectfv: make routine! [ v1 [integer!] v2 [integer!] ] opengl-lib "glRectfv"
glRecti: make routine! [ x1 [GLint] y1 [GLint] x2 [GLint] y2 [GLint] ] opengl-lib "glRecti"
glRectiv: make routine! [ v1 [integer!] v2 [integer!] ] opengl-lib "glRectiv"
glRects: make routine! [ x1 [short] y1 [short] x2 [short] y2 [short] ] opengl-lib "glRects"
glRectsv: make routine! [ v1 [integer!] v2 [integer!] ] opengl-lib "glRectsv"
glRenderMode: make routine! [ mode [GLenum] return: [GLint] ] opengl-lib "glRenderMode"
glRotate: glRotated: make routine! [ angle [GLdouble] x [GLdouble] y [GLdouble] z [GLdouble] ] opengl-lib "glRotated"
glRotatef: make routine! [ angle [float] x [float] y [float] z [float] ] opengl-lib "glRotatef"
glScale: glScaled: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] ] opengl-lib "glScaled"
glScalef: make routine! [ x [float] y [float] z [float] ] opengl-lib "glScalef"
glScissor: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] opengl-lib "glScissor"
glSelectBuffer: make routine! [ size [GLsizei] buffer [integer!] ] opengl-lib "glSelectBuffer"
glShadeModel: make routine! [ mode [GLenum] ] opengl-lib "glShadeModel"
glStencilFunc: make routine! [ func [GLenum] ref [GLint] mask [GLuint] ] opengl-lib "glStencilFunc"
glStencilMask: make routine! [ mask [GLuint] ] opengl-lib "glStencilMask"
glStencilOp: make routine! [ fail [GLenum] zfail [GLenum] zpass [GLenum] ] opengl-lib "glStencilOp"
glTexCoord1d: make routine! [ s [GLdouble] ] opengl-lib "glTexCoord1d"
glTexCoord1dv: make routine! [ v [integer!] ] opengl-lib "glTexCoord1dv"
glTexCoord1f: make routine! [ s [float] ] opengl-lib "glTexCoord1f"
glTexCoord1fv: make routine! [ v [integer!] ] opengl-lib "glTexCoord1fv"
glTexCoord1i: make routine! [ s [GLint] ] opengl-lib "glTexCoord1i"
glTexCoord1iv: make routine! [ v [integer!] ] opengl-lib "glTexCoord1iv"
glTexCoord1s: make routine! [ s [short] ] opengl-lib "glTexCoord1s"
glTexCoord1sv: make routine! [ v [integer!] ] opengl-lib "glTexCoord1sv"
glTexCoord2d: make routine! [ s [GLdouble] t [GLdouble] ] opengl-lib "glTexCoord2d"
glTexCoord2dv: make routine! [ v [integer!] ] opengl-lib "glTexCoord2dv"
glTexCoord2f: make routine! [ s [float] t [float] ] opengl-lib "glTexCoord2f"
glTexCoord2fv: make routine! [ v [integer!] ] opengl-lib "glTexCoord2fv"
glTexCoord2i: make routine! [ s [GLint] t [GLint] ] opengl-lib "glTexCoord2i"
glTexCoord2iv: make routine! [ v [integer!] ] opengl-lib "glTexCoord2iv"
glTexCoord2s: make routine! [ s [short] t [short] ] opengl-lib "glTexCoord2s"
glTexCoord2sv: make routine! [ v [integer!] ] opengl-lib "glTexCoord2sv"
glTexCoord3d: make routine! [ s [GLdouble] t [GLdouble] r [GLdouble] ] opengl-lib "glTexCoord3d"
glTexCoord3dv: make routine! [ v [integer!] ] opengl-lib "glTexCoord3dv"
glTexCoord3f: make routine! [ s [float] t [float] r [float] ] opengl-lib "glTexCoord3f"
glTexCoord3fv: make routine! [ v [integer!] ] opengl-lib "glTexCoord3fv"
glTexCoord3i: make routine! [ s [GLint] t [GLint] r [GLint] ] opengl-lib "glTexCoord3i"
glTexCoord3iv: make routine! [ v [integer!] ] opengl-lib "glTexCoord3iv"
glTexCoord3s: make routine! [ s [short] t [short] r [short] ] opengl-lib "glTexCoord3s"
glTexCoord3sv: make routine! [ v [integer!] ] opengl-lib "glTexCoord3sv"
glTexCoord4d: make routine! [ s [GLdouble] t [GLdouble] r [GLdouble] q [GLdouble] ] opengl-lib "glTexCoord4d"
glTexCoord4dv: make routine! [ v [integer!] ] opengl-lib "glTexCoord4dv"
glTexCoord4f: make routine! [ s [float] t [float] r [float] q [float] ] opengl-lib "glTexCoord4f"
glTexCoord4fv: make routine! [ v [integer!] ] opengl-lib "glTexCoord4fv"
glTexCoord4i: make routine! [ s [GLint] t [GLint] r [GLint] q [GLint] ] opengl-lib "glTexCoord4i"
glTexCoord4iv: make routine! [ v [integer!] ] opengl-lib "glTexCoord4iv"
glTexCoord4s: make routine! [ s [short] t [short] r [short] q [short] ] opengl-lib "glTexCoord4s"
glTexCoord4sv: make routine! [ v [integer!] ] opengl-lib "glTexCoord4sv"
glTexCoordPointer: make routine! [ size [GLint] type [GLenum] stride [GLsizei] pointer [integer!] ] opengl-lib "glTexCoordPointer"
glTexEnvf: make routine! [ target [GLenum] pname [GLenum] param [float] ] opengl-lib "glTexEnvf"
glTexEnvfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexEnvfv"
glTexEnvi: make routine! [ target [GLenum] pname [GLenum] param [GLint] ] opengl-lib "glTexEnvi"
glTexEnviv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexEnviv"
glTexGend: make routine! [ coord [GLenum] pname [GLenum] param [GLdouble] ] opengl-lib "glTexGend"
glTexGendv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexGendv"
glTexGenf: make routine! [ coord [GLenum] pname [GLenum] param [float] ] opengl-lib "glTexGenf"
glTexGenfv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexGenfv"
glTexGeni: make routine! [ coord [GLenum] pname [GLenum] param [GLint] ] opengl-lib "glTexGeni"
glTexGeniv: make routine! [ coord [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexGeniv"
glTexImage1D: make routine! [ target [GLenum] level [GLint] internalformat [GLint] width [GLsizei] border [GLint] format [GLenum] type [GLenum] pixels [binary!] ] opengl-lib "glTexImage1D"
glTexImage2D: make routine! [ target [GLenum] level [GLint] internalformat [GLint] width [GLsizei] height [GLsizei] border [GLint] format [GLenum] type [GLenum] pixels [binary!] ] opengl-lib "glTexImage2D"
glTexParameterf: make routine! [ target [GLenum] pname [GLenum] param [float] ] opengl-lib "glTexParameterf"
glTexParameterfv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexParameterfv"
glTexParameteri: make routine! [ target [GLenum] pname [GLenum] param [GLint] ] opengl-lib "glTexParameteri"
glTexParameteriv: make routine! [ target [GLenum] pname [GLenum] params [integer!] ] opengl-lib "glTexParameteriv"
glTexSubImage1D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] width [GLsizei] format [GLenum] type [GLenum] pixels [integer!] ] opengl-lib "glTexSubImage1D"
glTexSubImage2D: make routine! [ target [GLenum] level [GLint] xoffset [GLint] yoffset [GLint] width [GLsizei] height [GLsizei] format [GLenum] type [GLenum] pixels [integer!] ] opengl-lib "glTexSubImage2D"
glTranslate: glTranslated: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] ] opengl-lib "glTranslated"
glTranslatef: make routine! [ x [float] y [float] z [float] ] opengl-lib "glTranslatef"
glVertex2d: make routine! [ x [GLdouble] y [GLdouble] ] opengl-lib "glVertex2d"
glVertex2dv: make routine! [ v [integer!] ] opengl-lib "glVertex2dv"
glVertex2f: make routine! [ x [float] y [float] ] opengl-lib "glVertex2f"
glVertex2fv: make routine! [ v [integer!] ] opengl-lib "glVertex2fv"
glVertex2i: make routine! [ x [GLint] y [GLint] ] opengl-lib "glVertex2i"
glVertex2iv: make routine! [ v [integer!] ] opengl-lib "glVertex2iv"
glVertex2s: make routine! [ x [short] y [short] ] opengl-lib "glVertex2s"
glVertex2sv: make routine! [ v [integer!] ] opengl-lib "glVertex2sv"
glVertex3: glVertex3d: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] ] opengl-lib "glVertex3d"
glVertex3dv: make routine! [ v [integer!] ] opengl-lib "glVertex3dv"
glVertex3f: make routine! [ x [float] y [float] z [float] ] opengl-lib "glVertex3f"
glVertex3fv: make routine! [ v [integer!] ] opengl-lib "glVertex3fv"
glVertex3i: make routine! [ x [GLint] y [GLint] z [GLint] ] opengl-lib "glVertex3i"
glVertex3iv: make routine! [ v [integer!] ] opengl-lib "glVertex3iv"
glVertex3s: make routine! [ x [short] y [short] z [short] ] opengl-lib "glVertex3s"
glVertex3sv: make routine! [ v [integer!] ] opengl-lib "glVertex3sv"
glVertex4d: make routine! [ x [GLdouble] y [GLdouble] z [GLdouble] w [GLdouble] ] opengl-lib "glVertex4d"
glVertex4dv: make routine! [ v [integer!] ] opengl-lib "glVertex4dv"
glVertex4f: make routine! [ x [float] y [float] z [float] w [float] ] opengl-lib "glVertex4f"
glVertex4fv: make routine! [ v [integer!] ] opengl-lib "glVertex4fv"
glVertex4i: make routine! [ x [GLint] y [GLint] z [GLint] w [GLint] ] opengl-lib "glVertex4i"
glVertex4iv: make routine! [ v [integer!] ] opengl-lib "glVertex4iv"
glVertex4s: make routine! [ x [short] y [short] z [short] w [short] ] opengl-lib "glVertex4s"
glVertex4sv: make routine! [ v [integer!] ] opengl-lib "glVertex4sv"
glVertexPointer: make routine! [ size [GLint] type [GLenum] stride [GLsizei] pointer [binary!] ] opengl-lib "glVertexPointer"
gl-VertexPointer: func [ size [GLint] stride [GLsizei] pointer [block!] /local bin] [
bin: third block-to-struct pointer
glVertexPointer size GL_DOUBLE stride bin
]
glViewport: make routine! [ x [GLint] y [GLint] width [GLsizei] height [GLsizei] ] opengl-lib "glViewport"
{************************************************************
************************************************************}
lib: switch/default System/version/4 [
2 [%libGLU.dylib] ;OSX
3 [%glu32.dll] ;Windows
] [%libGLU.so.1]
if not attempt [glu-lib: load/library lib] [alert rejoin ["" lib " library not found. Quit"] quit]
{************************************************************
** glu.h
************************************************************}
{
** Return the error string associated with a particular error code.
** This will return 0 for an invalid error code.
**
** The generic function prototype that can be compiled for ANSI or Unicode
** is defined as follows:
**
** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode);
#ifdef UNICODE
#define gluErrorStringWIN(errCode) ((LPCSTR) gluErrorUnicodeStringEXT(errCode))
#else
}
gluErrorStringWIN: func [errCode] [gluErrorString errCode ]
;#endif
gluErrorString: make routine! [ errCode [GLenum] return: [string!] ] glu-lib "gluErrorString"
;gluErrorUnicodeStringEXT: make routine! [ errCode [GLenum] return: [integer!] ] glu-lib "gluErrorUnicodeStringEXT"
gluGetString: make routine! [
name [GLenum] return: [string!] ] glu-lib "gluGetString"
gluOrtho2D: make routine! [
left [GLdouble]
right [GLdouble]
bottom [GLdouble]
top [GLdouble] ] glu-lib "gluOrtho2D"
gluPerspective: make routine! [
fovy [GLdouble]
aspect [GLdouble]
zNear [GLdouble]
zFar [GLdouble] ] glu-lib "gluPerspective"
gluPickMatrix: make routine! [
x [GLdouble]
y [GLdouble]
width [GLdouble]
height [GLdouble]
viewport [GLint] ] glu-lib "gluPickMatrix" {[4]);}
gluLookAt: make routine! [
eyex [GLdouble]
eyey [GLdouble]
eyez [GLdouble]
centerx [GLdouble]
centery [GLdouble]
centerz [GLdouble]
upx [GLdouble]
upy [GLdouble]
upz [GLdouble] ] glu-lib "gluLookAt"
gluProject: make routine! [
objx [GLdouble]
objy [GLdouble]
objz [GLdouble]
modelMatrix [GLdouble] {[16],}
projMatrix [GLdouble] {[16],}
viewport [GLint] {[4],}
winx [integer!]
winy [integer!]
winz [integer!] return: [integer!] ] glu-lib "gluProject"
gluUnProject: make routine! [
winx [GLdouble]
winy [GLdouble]
winz [GLdouble]
modelMatrix [struct! []] {[16],}
projMatrix [struct! []] {[16],}
viewport [struct! []] {[4],}
objx [struct! []]
objy [struct! []]
objz [struct! []] return: [integer!] ] glu-lib "gluUnProject"
gluScaleImage: make routine! [
format [GLenum]
widthin [GLint]
heightin [GLint]
typein [GLenum]
datain [integer!]
widthout [GLint]
heightout [GLint]
typeout [GLenum]
dataout [integer!] return: [integer!] ] glu-lib "gluScaleImage"
gluBuild1DMipmaps: make routine! [
target [GLenum]
components [GLint]
width [GLint]
format [GLenum]
type [GLenum]
data [integer!] return: [integer!] ] glu-lib "gluBuild1DMipmaps"
gluBuild2DMipmaps: make routine! [
target [GLenum]
components [GLint]
width [GLint]
height [GLint]
format [GLenum]
type [GLenum]
data [integer!] return: [integer!] ] glu-lib "gluBuild2DMipmaps"
{
typedef struct GLUnurbs GLUnurbs;
typedef struct GLUquadric GLUquadric;
typedef struct GLUtesselator GLUtesselator;
}
{ backwards compatibility: }
{
typedef struct GLUnurbs GLUnurbsObj;
typedef struct GLUquadric GLUquadricObj;
typedef struct GLUtesselator GLUtesselatorObj;
typedef struct GLUtesselator GLUtriangulatorObj;
}
gluNewQuadric: make routine! [ return: [integer!] ] glu-lib "gluNewQuadric"
gluDeleteQuadric: make routine! [ state [integer!] ] glu-lib "gluDeleteQuadric"
gluQuadricNormals: make routine! [
quadObject [integer!]
normals [GLenum] ] glu-lib "gluQuadricNormals"
gluQuadricTexture: make routine! [
quadObject [integer!]
textureCoords [GLboolean] ] glu-lib "gluQuadricTexture"
gluQuadricOrientation: make routine! [
quadObject [integer!]
orientation [GLenum] ] glu-lib "gluQuadricOrientation"
gluQuadricDrawStyle: make routine! [
quadObject [integer!]
drawStyle [GLenum] ] glu-lib "gluQuadricDrawStyle"
gluCylinder: make routine! [
qobj [integer!]
baseRadius [GLdouble]
topRadius [GLdouble]
height [GLdouble]
slices [GLint]
stacks [GLint] ] glu-lib "gluCylinder"
gluDisk: make routine! [
qobj [integer!]
innerRadius [GLdouble]
outerRadius [GLdouble]
slices [GLint]
loops [GLint] ] glu-lib "gluDisk"
gluPartialDisk: make routine! [
qobj [integer!]
innerRadius [GLdouble]
outerRadius [GLdouble]
slices [GLint]
loops [GLint]
startAngle [GLdouble]
sweepAngle [GLdouble] ] glu-lib "gluPartialDisk"
gluSphere: make routine! [
qobj [integer!]
radius [GLdouble]
slices [GLint]
stacks [GLint] ] glu-lib "gluSphere"
gluQuadricCallback: make routine! [
qobj [integer!]
which [GLenum]
fn [integer!] ] glu-lib "gluQuadricCallback" {(CALLBACK *fn)());}
gluNewTess: make routine! [ ] glu-lib "gluNewTess"
gluDeleteTess: make routine! [ tess [integer!] ] glu-lib "gluDeleteTess"
gluTessBeginPolygon: make routine! [
tess [integer!]
polygon_data [integer!] ] glu-lib "gluTessBeginPolygon"
gluTessBeginContour: make routine! [ tess [integer!] ] glu-lib "gluTessBeginContour"
gluTessVertex: make routine! [
tess [integer!]
coords [GLdouble] {[3],}
data [integer!] ] glu-lib "gluTessVertex"
gluTessEndContour: make routine! [ tess [integer!] ] glu-lib "gluTessEndContour"
gluTessEndPolygon: make routine! [ tess [integer!] ] glu-lib "gluTessEndPolygon"
gluTessProperty: make routine! [
tess [integer!]
which [GLenum]
value [GLdouble] ] glu-lib "gluTessProperty"
gluTessNormal: make routine! [
tess [integer!]
x [GLdouble]
y [GLdouble]
z [GLdouble] ] glu-lib "gluTessNormal"
gluTessCallback: make routine! [
tess [integer!]
which [GLenum]
fn [integer!] ] glu-lib "gluTessCallback" {(CALLBACK *fn)());}
gluGetTessProperty: make routine! [
tess [integer!]
which [GLenum]
value [integer!] ] glu-lib "gluGetTessProperty"
gluNewNurbsRenderer: make routine! [ return: [integer!] ] glu-lib "gluNewNurbsRenderer"
gluDeleteNurbsRenderer: make routine! [ nobj [integer!] ] glu-lib "gluDeleteNurbsRenderer"
gluBeginSurface: make routine! [ nobj [integer!] ] glu-lib "gluBeginSurface"
gluBeginCurve: make routine! [ nobj [integer!] ] glu-lib "gluBeginCurve"
gluEndCurve: make routine! [ nobj [integer!] ] glu-lib "gluEndCurve"
gluEndSurface: make routine! [ nobj [integer!] ] glu-lib "gluEndSurface"
gluBeginTrim: make routine! [ nobj [integer!] ] glu-lib "gluBeginTrim"
gluEndTrim: make routine! [ nobj [integer!] ] glu-lib "gluEndTrim"
gluPwlCurve: make routine! [
nobj [integer!]
count [GLint]
array [integer!]
stride [GLint]
type [GLenum] ] glu-lib "gluPwlCurve"
gluNurbsCurve: make routine! [
nobj [integer!]
nknots [GLint]
knot [integer!]
stride [GLint]
ctlarray [integer!]
order [GLint]
type [GLenum] ] glu-lib "gluNurbsCurve"
gluNurbsSurface: make routine! [
nobj [integer!]
sknot_count [GLint]
sknot [integer!]
tknot_count [GLint]
tknot [integer!]
s_stride [GLint]
t_stride [GLint]
ctlarray [integer!]
sorder [GLint]
torder [GLint]
type [GLenum] ] glu-lib "gluNurbsSurface"
gluLoadSamplingMatrices: make routine! [
nobj [integer!]
modelMatrix [float] {[16],}
projMatrix [float] {[16],}
viewport [GLint] ] glu-lib "gluLoadSamplingMatrices" {[4] );}
gluNurbsProperty: make routine! [
nobj [integer!]
property [GLenum]
value [float] ] glu-lib "gluNurbsProperty"
gluGetNurbsProperty: make routine! [
nobj [integer!]
property [GLenum]
value [integer!] ] glu-lib "gluGetNurbsProperty"
gluNurbsCallback: make routine! [
nobj [integer!]
which [GLenum]
fn [integer!] ] glu-lib "gluNurbsCallback" {(CALLBACK *fn)());}
{** * Callback function prototypes ***}
{gluQuadricCallback }
{
typedef void (CALLBACK *GLUquadricErrorProc) (GLenum);
}
{gluTessCallback }
{
typedef void (CALLBACK *GLUtessBeginProc) (GLenum);
typedef void (CALLBACK *GLUtessEdgeFlagProc) (GLboolean);
typedef void (CALLBACK *GLUtessVertexProc) (void *);
typedef void (CALLBACK *GLUtessEndProc) (void);
typedef void (CALLBACK *GLUtessErrorProc) (GLenum);
typedef void (CALLBACK *GLUtessCombineProc) (GLdouble[3],
void*[4],
float[4],
void* *);
typedef void (CALLBACK *GLUtessBeginDataProc) (GLenum, void *);
typedef void (CALLBACK *GLUtessEdgeFlagDataProc) (GLboolean, void *);
typedef void (CALLBACK *GLUtessVertexDataProc) (void *, void *);
typedef void (CALLBACK *GLUtessEndDataProc) (void *);
typedef void (CALLBACK *GLUtessErrorDataProc) (GLenum, void *);
typedef void (CALLBACK *GLUtessCombineDataProc) (GLdouble[3],
void*[4],
float[4],
void**,
void *);
}
{gluNurbsCallback }
{
typedef void (CALLBACK *GLUnurbsErrorProc) (GLenum);
}
{*** Generic constants ***}
{ Version }
GLU_VERSION_1_1: 1
GLU_VERSION_1_2: 1
{ Errors: (return value 0 = no error) }
GLU_INVALID_ENUM: 100900
GLU_INVALID_VALUE: 100901
GLU_OUT_OF_MEMORY: 100902
GLU_INCOMPATIBLE_GL_VERSION: 100903
{ StringName }
GLU_VERSION: 100800
GLU_EXTENSIONS: 100801
{ Boolean }
GLU_TRUE: GL_TRUE
GLU_FALSE: GL_FALSE
{*** Quadric constants ***}
{ QuadricNormal }
GLU_SMOOTH: 100000
GLU_FLAT: 100001
GLU_NONE: 100002
{ QuadricDrawStyle }
GLU_POINT: 100010
GLU_LINE: 100011
GLU_FILL: 100012
GLU_SILHOUETTE: 100013
{ QuadricOrientation }
GLU_OUTSIDE: 100020
GLU_INSIDE: 100021
{ Callback types: }
{ GLU_ERROR 100103 }
{*** Tesselation constants ***}
{
#define GLU_TESS_MAX_COORD 1.0e150
}
{ TessProperty }
GLU_TESS_WINDING_RULE: 100140
GLU_TESS_BOUNDARY_ONLY: 100141
GLU_TESS_TOLERANCE: 100142
{ TessWinding }
GLU_TESS_WINDING_ODD: 100130
GLU_TESS_WINDING_NONZERO: 100131
GLU_TESS_WINDING_POSITIVE: 100132
GLU_TESS_WINDING_NEGATIVE: 100133
GLU_TESS_WINDING_ABS_GEQ_TWO: 100134
{ TessCallback }
GLU_TESS_BEGIN: 100100 { void (CALLBACK*)(GLenum type) }
GLU_TESS_VERTEX: 100101 { void (CALLBACK*)(void *data) }
GLU_TESS_END: 100102 { void (CALLBACK*)(void) }
GLU_TESS_ERROR: 100103 { void (CALLBACK*)(GLenum errno) }
GLU_TESS_EDGE_FLAG: 100104 { void (CALLBACK*)(GLboolean boundaryEdge) }
GLU_TESS_COMBINE: 100105 { void (CALLBACK*)(GLdouble coords[3],
void *data[4],
float weight[4],
void **dataOut) }
GLU_TESS_BEGIN_DATA: 100106 { void (CALLBACK*)(GLenum type,
void *polygon_data) }
GLU_TESS_VERTEX_DATA: 100107 { void (CALLBACK*)(void *data,
void *polygon_data) }
GLU_TESS_END_DATA: 100108 { void (CALLBACK*)(void *polygon_data) }
GLU_TESS_ERROR_DATA: 100109 { void (CALLBACK*)(GLenum errno,
void *polygon_data) }
GLU_TESS_EDGE_FLAG_DATA: 100110 { void (CALLBACK*)(GLboolean boundaryEdge,
void *polygon_data) }
GLU_TESS_COMBINE_DATA: 100111 { void (CALLBACK*)(GLdouble coords[3],
void *data[4],
float weight[4],
void **dataOut,
void *polygon_data) }
{ TessError }
GLU_TESS_ERROR1: 100151
GLU_TESS_ERROR2: 100152
GLU_TESS_ERROR3: 100153
GLU_TESS_ERROR4: 100154
GLU_TESS_ERROR5: 100155
GLU_TESS_ERROR6: 100156
GLU_TESS_ERROR7: 100157
GLU_TESS_ERROR8: 100158
GLU_TESS_MISSING_BEGIN_POLYGON: GLU_TESS_ERROR1
GLU_TESS_MISSING_BEGIN_CONTOUR: GLU_TESS_ERROR2
GLU_TESS_MISSING_END_POLYGON: GLU_TESS_ERROR3
GLU_TESS_MISSING_END_CONTOUR: GLU_TESS_ERROR4
GLU_TESS_COORD_TOO_LARGE: GLU_TESS_ERROR5
GLU_TESS_NEED_COMBINE_CALLBACK: GLU_TESS_ERROR6
{*** NURBS constants ***}
{ NurbsProperty }
GLU_AUTO_LOAD_MATRIX: 100200
GLU_CULLING: 100201
GLU_SAMPLING_TOLERANCE: 100203
GLU_DISPLAY_MODE: 100204
GLU_PARAMETRIC_TOLERANCE: 100202
GLU_SAMPLING_METHOD: 100205
GLU_U_STEP: 100206
GLU_V_STEP: 100207
{ NurbsSampling }
GLU_PATH_LENGTH: 100215
GLU_PARAMETRIC_ERROR: 100216
GLU_DOMAIN_DISTANCE: 100217
{ NurbsTrim }
GLU_MAP1_TRIM_2: 100210
GLU_MAP1_TRIM_3: 100211
{ NurbsDisplay }
{ GLU_FILL 100012 }
GLU_OUTLINE_POLYGON: 100240
GLU_OUTLINE_PATCH: 100241
{ NurbsCallback }
{ GLU_ERROR 100103 }
{ NurbsErrors }
GLU_NURBS_ERROR1: 100251
GLU_NURBS_ERROR2: 100252
GLU_NURBS_ERROR3: 100253
GLU_NURBS_ERROR4: 100254
GLU_NURBS_ERROR5: 100255
GLU_NURBS_ERROR6: 100256
GLU_NURBS_ERROR7: 100257
GLU_NURBS_ERROR8: 100258
GLU_NURBS_ERROR9: 100259
GLU_NURBS_ERROR10: 100260
GLU_NURBS_ERROR11: 100261
GLU_NURBS_ERROR12: 100262
GLU_NURBS_ERROR13: 100263
GLU_NURBS_ERROR14: 100264
GLU_NURBS_ERROR15: 100265
GLU_NURBS_ERROR16: 100266
GLU_NURBS_ERROR17: 100267
GLU_NURBS_ERROR18: 100268
GLU_NURBS_ERROR19: 100269
GLU_NURBS_ERROR20: 100270
GLU_NURBS_ERROR21: 100271
GLU_NURBS_ERROR22: 100272
GLU_NURBS_ERROR23: 100273
GLU_NURBS_ERROR24: 100274
GLU_NURBS_ERROR25: 100275
GLU_NURBS_ERROR26: 100276
GLU_NURBS_ERROR27: 100277
GLU_NURBS_ERROR28: 100278
GLU_NURBS_ERROR29: 100279
GLU_NURBS_ERROR30: 100280
GLU_NURBS_ERROR31: 100281
GLU_NURBS_ERROR32: 100282
GLU_NURBS_ERROR33: 100283
GLU_NURBS_ERROR34: 100284
GLU_NURBS_ERROR35: 100285
GLU_NURBS_ERROR36: 100286
GLU_NURBS_ERROR37: 100287
{*** Backwards compatibility for old tesselator ***}
gluBeginPolygon: make routine! [ tess [integer!] ] glu-lib "gluBeginPolygon"
gluNextContour: make routine! [ tess [integer!] type [GLenum] ] glu-lib "gluNextContour"
gluEndPolygon: make routine! [ tess [integer!] ] glu-lib "gluEndPolygon"
{ Contours types -- obsolete! }
GLU_CW: 100120
GLU_CCW: 100121
GLU_INTERIOR: 100122
GLU_EXTERIOR: 100123
GLU_UNKNOWN: 100124
{ Names without "TESS_" prefix }
GLU_BEGIN: GLU_TESS_BEGIN
GLU_VERTEX: GLU_TESS_VERTEX
GLU_END: GLU_TESS_END
GLU_ERROR: GLU_TESS_ERROR
GLU_EDGE_FLAG: GLU_TESS_EDGE_FLAG
{************************************************************
************************************************************}
lib: switch/default System/version/4 [
2 [%libGLUT.dylib] ;OSX
3 [%glut32.dll] ;Windows
] [%libGLUT.so.1]
if not attempt [glut-lib: load/library lib] [glut-lib: none];alert rejoin ["" lib " library not found. Quit"]]
{************************************************************
** glut.h
************************************************************}
{ Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998. }
{*
GLUT API revision history:
GLUT_API_VERSION is updated to reflect incompatible GLUT
API changes (interface changes, semantic changes, deletions,
or additions).
GLUT_API_VERSION=1 First public release of GLUT. 11/29/94
GLUT_API_VERSION=2 Added support for OpenGL/GLX multisampling,
extension. Supports new input devices like tablet, dial and button
box, and Spaceball. Easy to query OpenGL extensions.
GLUT_API_VERSION=3 glutMenuStatus added.
GLUT_API_VERSION=4 glutInitDisplayString, glutWarpPointer,
glutBitmapLength, glutStrokeLength, glutWindowStatusFunc, dynamic
video resize subAPI, glutPostWindowRedisplay, glutKeyboardUpFunc,
glutSpecialUpFunc, glutIgnoreKeyRepeat, glutSetKeyRepeat,
glutJoystickFunc, glutForceJoystickFunc (NOT FINALIZED!).
*}
GLUT_API_VERSION: 3
{*
GLUT implementation revision history:
GLUT_XLIB_IMPLEMENTATION is updated to reflect both GLUT
API revisions and implementation revisions (ie, bug fixes).
GLUT_XLIB_IMPLEMENTATION=1 mjk's first public release of
GLUT Xlib-based implementation. 11/29/94
GLUT_XLIB_IMPLEMENTATION=2 mjk's second public release of
GLUT Xlib-based implementation providing GLUT version 2
interfaces.
GLUT_XLIB_IMPLEMENTATION=3 mjk's GLUT 2.2 images. 4/17/95
GLUT_XLIB_IMPLEMENTATION=4 mjk's GLUT 2.3 images. 6/?/95
GLUT_XLIB_IMPLEMENTATION=5 mjk's GLUT 3.0 images. 10/?/95
GLUT_XLIB_IMPLEMENTATION=7 mjk's GLUT 3.1+ with glutWarpPoitner. 7/24/96
GLUT_XLIB_IMPLEMENTATION=8 mjk's GLUT 3.1+ with glutWarpPoitner
and video resize. 1/3/97
GLUT_XLIB_IMPLEMENTATION=9 mjk's GLUT 3.4 release with early GLUT 4 routines.
GLUT_XLIB_IMPLEMENTATION=11 Mesa 2.5's GLUT 3.6 release.
GLUT_XLIB_IMPLEMENTATION=12 mjk's GLUT 3.6 release with early GLUT 4 routines + signal handling.
GLUT_XLIB_IMPLEMENTATION=13 mjk's GLUT 3.7 beta with GameGLUT support.
GLUT_XLIB_IMPLEMENTATION=14 mjk's GLUT 3.7 beta with f90gl friend interface.
GLUT_XLIB_IMPLEMENTATION=15 mjk's GLUT 3.7 beta sync'ed with Mesa <GL/glut.h>
*}
GLUT_XLIB_IMPLEMENTATION: 15
{ Display mode bit masks. }
GLUT_RGB: 0
GLUT_RGBA: GLUT_RGB
GLUT_INDEX: 1
GLUT_SINGLE: 0
GLUT_DOUBLE: 2
GLUT_ACCUM: 4
GLUT_ALPHA: 8
GLUT_DEPTH: 16
GLUT_STENCIL: 32
GLUT_MULTISAMPLE: 128
GLUT_STEREO: 256
GLUT_LUMINANCE: 512
{ Mouse buttons. }
GLUT_LEFT_BUTTON: 0
GLUT_MIDDLE_BUTTON: 1
GLUT_RIGHT_BUTTON: 2
{ Mouse button state. }
GLUT_DOWN: 0
GLUT_UP: 1
{ function keys }
GLUT_KEY_F1: 1
GLUT_KEY_F2: 2
GLUT_KEY_F3: 3
GLUT_KEY_F4: 4
GLUT_KEY_F5: 5
GLUT_KEY_F6: 6
GLUT_KEY_F7: 7
GLUT_KEY_F8: 8
GLUT_KEY_F9: 9
GLUT_KEY_F10: 10
GLUT_KEY_F11: 11
GLUT_KEY_F12: 12
{ directional keys }
GLUT_KEY_LEFT: 100
GLUT_KEY_UP: 101
GLUT_KEY_RIGHT: 102
GLUT_KEY_DOWN: 103
GLUT_KEY_PAGE_UP: 104
GLUT_KEY_PAGE_DOWN: 105
GLUT_KEY_HOME: 106
GLUT_KEY_END: 107
GLUT_KEY_INSERT: 108
{ Entry/exit state. }
GLUT_LEFT: 0
GLUT_ENTERED: 1
{ Menu usage state. }
GLUT_MENU_NOT_IN_USE: 0
GLUT_MENU_IN_USE: 1
{ Visibility state. }
GLUT_NOT_VISIBLE: 0
GLUT_VISIBLE: 1
{ Window status state. }
GLUT_HIDDEN: 0
GLUT_FULLY_RETAINED: 1
GLUT_PARTIALLY_RETAINED: 2
GLUT_FULLY_COVERED: 3
{ Color index component selection values. }
GLUT_RED: 0
GLUT_GREEN: 1
GLUT_BLUE: 2
{#if defined(_WIN32)}
{ Stroke font constants (use these in GLUT program). }
GLUT_STROKE_ROMAN: 0
GLUT_STROKE_MONO_ROMAN: 1
{ Bitmap font constants (use these in GLUT program). }
GLUT_BITMAP_9_BY_15: 2
GLUT_BITMAP_8_BY_13: 3
GLUT_BITMAP_TIMES_ROMAN_10: 4
GLUT_BITMAP_TIMES_ROMAN_24: 5
GLUT_BITMAP_HELVETICA_10: 6
GLUT_BITMAP_HELVETICA_12: 7
GLUT_BITMAP_HELVETICA_18: 8
{#else}
{ Stroke font opaque addresses (use constants instead in source code). }
{
GLUTAPI void *glutStrokeRoman;
GLUTAPI void *glutStrokeMonoRoman;
}
{ Stroke font constants (use these in GLUT program). }
{
#define GLUT_STROKE_ROMAN (&glutStrokeRoman)
#define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman)
}
{ Bitmap font opaque addresses (use constants instead in source code). }
{
GLUTAPI void *glutBitmap9By15;
GLUTAPI void *glutBitmap8By13;
GLUTAPI void *glutBitmapTimesRoman10;
GLUTAPI void *glutBitmapTimesRoman24;
GLUTAPI void *glutBitmapHelvetica10;
GLUTAPI void *glutBitmapHelvetica12;
GLUTAPI void *glutBitmapHelvetica18;
}
{ Bitmap font constants (use these in GLUT program). }
{
#define GLUT_BITMAP_9_BY_15 (&glutBitmap9By15)
#define GLUT_BITMAP_8_BY_13 (&glutBitmap8By13)
#define GLUT_BITMAP_TIMES_ROMAN_10 (&glutBitmapTimesRoman10)
#define GLUT_BITMAP_TIMES_ROMAN_24 (&glutBitmapTimesRoman24)
#define GLUT_BITMAP_HELVETICA_10 (&glutBitmapHelvetica10)
#define GLUT_BITMAP_HELVETICA_12 (&glutBitmapHelvetica12)
#define GLUT_BITMAP_HELVETICA_18 (&glutBitmapHelvetica18)
}
{#endif}
{ glutGet parameters. }
GLUT_WINDOW_X: 100
GLUT_WINDOW_Y: 101
GLUT_WINDOW_WIDTH: 102
GLUT_WINDOW_HEIGHT: 103
GLUT_WINDOW_BUFFER_SIZE: 104
GLUT_WINDOW_STENCIL_SIZE: 105
GLUT_WINDOW_DEPTH_SIZE: 106
GLUT_WINDOW_RED_SIZE: 107
GLUT_WINDOW_GREEN_SIZE: 108
GLUT_WINDOW_BLUE_SIZE: 109
GLUT_WINDOW_ALPHA_SIZE: 110
GLUT_WINDOW_ACCUM_RED_SIZE: 111
GLUT_WINDOW_ACCUM_GREEN_SIZE: 112
GLUT_WINDOW_ACCUM_BLUE_SIZE: 113
GLUT_WINDOW_ACCUM_ALPHA_SIZE: 114
GLUT_WINDOW_DOUBLEBUFFER: 115
GLUT_WINDOW_RGBA: 116
GLUT_WINDOW_PARENT: 117
GLUT_WINDOW_NUM_CHILDREN: 118
GLUT_WINDOW_COLORMAP_SIZE: 119
GLUT_WINDOW_NUM_SAMPLES: 120
GLUT_WINDOW_STEREO: 121
GLUT_WINDOW_CURSOR: 122
GLUT_SCREEN_WIDTH: 200
GLUT_SCREEN_HEIGHT: 201
GLUT_SCREEN_WIDTH_MM: 202
GLUT_SCREEN_HEIGHT_MM: 203
GLUT_MENU_NUM_ITEMS: 300
GLUT_DISPLAY_MODE_POSSIBLE: 400
GLUT_INIT_WINDOW_X: 500
GLUT_INIT_WINDOW_Y: 501
GLUT_INIT_WINDOW_WIDTH: 502
GLUT_INIT_WINDOW_HEIGHT: 503
GLUT_INIT_DISPLAY_MODE: 504
GLUT_ELAPSED_TIME: 700
GLUT_WINDOW_FORMAT_ID: 123
{ glutDeviceGet parameters. }
GLUT_HAS_KEYBOARD: 600
GLUT_HAS_MOUSE: 601
GLUT_HAS_SPACEBALL: 602
GLUT_HAS_DIAL_AND_BUTTON_BOX: 603
GLUT_HAS_TABLET: 604
GLUT_NUM_MOUSE_BUTTONS: 605
GLUT_NUM_SPACEBALL_BUTTONS: 606
GLUT_NUM_BUTTON_BOX_BUTTONS: 607
GLUT_NUM_DIALS: 608
GLUT_NUM_TABLET_BUTTONS: 609
GLUT_DEVICE_IGNORE_KEY_REPEAT: 610
GLUT_DEVICE_KEY_REPEAT: 611
GLUT_HAS_JOYSTICK: 612
GLUT_OWNS_JOYSTICK: 613
GLUT_JOYSTICK_BUTTONS: 614
GLUT_JOYSTICK_AXES: 615
GLUT_JOYSTICK_POLL_RATE: 616
{ glutLayerGet parameters. }
GLUT_OVERLAY_POSSIBLE: 800
GLUT_LAYER_IN_USE: 801
GLUT_HAS_OVERLAY: 802
GLUT_TRANSPARENT_INDEX: 803
GLUT_NORMAL_DAMAGED: 804
GLUT_OVERLAY_DAMAGED: 805
{ glutVideoResizeGet parameters. }
GLUT_VIDEO_RESIZE_POSSIBLE: 900
GLUT_VIDEO_RESIZE_IN_USE: 901
GLUT_VIDEO_RESIZE_X_DELTA: 902
GLUT_VIDEO_RESIZE_Y_DELTA: 903
GLUT_VIDEO_RESIZE_WIDTH_DELTA: 904
GLUT_VIDEO_RESIZE_HEIGHT_DELTA: 905
GLUT_VIDEO_RESIZE_X: 906
GLUT_VIDEO_RESIZE_Y: 907
GLUT_VIDEO_RESIZE_WIDTH: 908
GLUT_VIDEO_RESIZE_HEIGHT: 909
{ glutUseLayer parameters. }
GLUT_NORMAL: 0
GLUT_OVERLAY: 1
{ glutGetModifiers return mask. }
GLUT_ACTIVE_SHIFT: 1
GLUT_ACTIVE_CTRL: 2
GLUT_ACTIVE_ALT: 4
{ glutSetCursor parameters. }
{ Basic arrows. }
GLUT_CURSOR_RIGHT_ARROW: 0
GLUT_CURSOR_LEFT_ARROW: 1
{ Symbolic cursor shapes. }
GLUT_CURSOR_INFO: 2
GLUT_CURSOR_DESTROY: 3
GLUT_CURSOR_HELP: 4
GLUT_CURSOR_CYCLE: 5
GLUT_CURSOR_SPRAY: 6
GLUT_CURSOR_WAIT: 7
GLUT_CURSOR_TEXT: 8
GLUT_CURSOR_CROSSHAIR: 9
{ Directional cursors. }
GLUT_CURSOR_UP_DOWN: 10
GLUT_CURSOR_LEFT_RIGHT: 11
{ Sizing cursors. }
GLUT_CURSOR_TOP_SIDE: 12
GLUT_CURSOR_BOTTOM_SIDE: 13
GLUT_CURSOR_LEFT_SIDE: 14
GLUT_CURSOR_RIGHT_SIDE: 15
GLUT_CURSOR_TOP_LEFT_CORNER: 16
GLUT_CURSOR_TOP_RIGHT_CORNER: 17
GLUT_CURSOR_BOTTOM_RIGHT_CORNER: 18
GLUT_CURSOR_BOTTOM_LEFT_CORNER: 19
{ Inherit from parent window. }
GLUT_CURSOR_INHERIT: 100
{ Blank cursor. }
GLUT_CURSOR_NONE: 101
{ Fullscreen crosshair (if available). }
GLUT_CURSOR_FULL_CROSSHAIR: 102
{ GLUT device control sub-API. }
{ glutSetKeyRepeat modes. }
GLUT_KEY_REPEAT_OFF: 0
GLUT_KEY_REPEAT_ON: 1
GLUT_KEY_REPEAT_DEFAULT: 2
{ Joystick button masks. }
GLUT_JOYSTICK_BUTTON_A: 1
GLUT_JOYSTICK_BUTTON_B: 2
GLUT_JOYSTICK_BUTTON_C: 4
GLUT_JOYSTICK_BUTTON_D: 8
{ GLUT game mode sub-API. }
{ glutGameModeGet. }
GLUT_GAME_MODE_ACTIVE: 0
GLUT_GAME_MODE_POSSIBLE: 1
GLUT_GAME_MODE_WIDTH: 2
GLUT_GAME_MODE_HEIGHT: 3
GLUT_GAME_MODE_PIXEL_DEPTH: 4
GLUT_GAME_MODE_REFRESH_RATE: 5
GLUT_GAME_MODE_DISPLAY_CHANGED: 6
if glut-lib [
{ GLUT initialization sub-API. }
glutInit: make routine! [ argcp [integer!] argv [string!] ] glut-lib "glutInit"
{
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
extern void APIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
;static void APIENTRY glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
;#define glutInit glutInit_ATEXIT_HACK
#endif
#endif
}
glutInitDisplayMode: make routine! [ mode [integer!] ] glut-lib "glutInitDisplayMode"
glutInitDisplayString: make routine! [ string [string!] ] glut-lib "glutInitDisplayString"
glutInitWindowPosition: make routine! [ x [integer!] y [integer!] ] glut-lib "glutInitWindowPosition"
glutInitWindowSize: make routine! [ width [integer!] height [integer!] ] glut-lib "glutInitWindowSize"
glutMainLoop: make routine! [ ] glut-lib "glutMainLoop"
{ GLUT window sub-API. }
glutCreateWindow: make routine! [ title [string!] return: [integer!] ] glut-lib "glutCreateWindow"
{
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
extern int APIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int APIENTRY glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
#endif
#endif
}
glutCreateSubWindow: make routine! [ win [integer!] x [integer!] y [integer!] width [integer!] height [integer!] return: [integer!] ] glut-lib "glutCreateSubWindow"
glutDestroyWindow: make routine! [ win [integer!] ] glut-lib "glutDestroyWindow"
glutPostRedisplay: make routine! [ ] glut-lib "glutPostRedisplay"
glutPostWindowRedisplay: make routine! [ win [integer!] ] glut-lib "glutPostWindowRedisplay"
glutSwapBuffers: make routine! [ ] glut-lib "glutSwapBuffers"
glutGetWindow: make routine! [ return: [integer!] ] glut-lib "glutGetWindow"
glutSetWindow: make routine! [ win [integer!] ] glut-lib "glutSetWindow"
glutSetWindowTitle: make routine! [ title [string!] ] glut-lib "glutSetWindowTitle"
glutSetIconTitle: make routine! [ title [string!] ] glut-lib "glutSetIconTitle"
glutPositionWindow: make routine! [ x [integer!] y [integer!] ] glut-lib "glutPositionWindow"
glutReshapeWindow: make routine! [ width [integer!] height [integer!] ] glut-lib "glutReshapeWindow"
glutPopWindow: make routine! [ ] glut-lib "glutPopWindow"
glutPushWindow: make routine! [ ] glut-lib "glutPushWindow"
glutIconifyWindow: make routine! [ ] glut-lib "glutIconifyWindow"
glutShowWindow: make routine! [ ] glut-lib "glutShowWindow"
glutHideWindow: make routine! [ ] glut-lib "glutHideWindow"
glutFullScreen: make routine! [ ] glut-lib "glutFullScreen"
glutSetCursor: make routine! [ cursor [integer!] ] glut-lib "glutSetCursor"
glutWarpPointer: make routine! [ x [integer!] y [integer!] ] glut-lib "glutWarpPointer"
{ GLUT overlay sub-API. }
glutEstablishOverlay: make routine! [ ] glut-lib "glutEstablishOverlay"
glutRemoveOverlay: make routine! [ ] glut-lib "glutRemoveOverlay"
glutUseLayer: make routine! [ layer [GLenum] ] glut-lib "glutUseLayer"
glutPostOverlayRedisplay: make routine! [ ] glut-lib "glutPostOverlayRedisplay"
glutPostWindowOverlayRedisplay: make routine! [ win [integer!] ] glut-lib "glutPostWindowOverlayRedisplay"
glutShowOverlay: make routine! [ ] glut-lib "glutShowOverlay"
glutHideOverlay: make routine! [ ] glut-lib "glutHideOverlay"
{ GLUT menu sub-API. }
glutCreateMenu: make routine! [ func [integer!] return: [integer!] ] glut-lib "glutCreateMenu" {(GLUTCALLBACK *func)(int));}
{
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
extern int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
#endif
#endif
}
glutDestroyMenu: make routine! [ menu [integer!] ] glut-lib "glutDestroyMenu"
glutGetMenu: make routine! [ return: [integer!] ] glut-lib "glutGetMenu"
glutSetMenu: make routine! [ menu [integer!] ] glut-lib "glutSetMenu"
glutAddMenuEntry: make routine! [ label [string!] value [integer!] ] glut-lib "glutAddMenuEntry"
glutAddSubMenu: make routine! [ label [string!] submenu [integer!] ] glut-lib "glutAddSubMenu"
glutChangeToMenuEntry: make routine! [ item [integer!] label [string!] value [integer!] ] glut-lib "glutChangeToMenuEntry"
glutChangeToSubMenu: make routine! [ item [integer!] label [string!] submenu [integer!] ] glut-lib "glutChangeToSubMenu"
glutRemoveMenuItem: make routine! [ item [integer!] ] glut-lib "glutRemoveMenuItem"
glutAttachMenu: make routine! [ button [integer!] ] glut-lib "glutAttachMenu"
glutDetachMenu: make routine! [ button [integer!] ] glut-lib "glutDetachMenu"
{ GLUT window callback sub-API. }
;REBOL-NOTE: some routines commented only because otherwise REBOL gives "too many callbacks" error (if you use them you have to comment some others)
glutDisplayFunc: make routine! [f [callback []]] glut-lib "glutDisplayFunc"
glutReshapeFunc: make routine! [f [callback [int int]]] glut-lib "glutReshapeFunc"
glutKeyboardFunc: make routine! [f [callback [char int int ]]] glut-lib "glutKeyboardFunc"
glutMouseFunc: make routine! [f [callback [int int int int ]]] glut-lib "glutMouseFunc"
glutMotionFunc: make routine! [f [callback [int int ]]] glut-lib "glutMotionFunc"
;glutPassiveMotionFunc: make routine! [f [callback [int int y]]] glut-lib "glutPassiveMotionFunc"
;glutEntryFunc: make routine! [f [callback [int]]] glut-lib "glutEntryFunc"
glutVisibilityFunc: make routine! [f [callback [int]]] glut-lib "glutVisibilityFunc"
glutIdleFunc: make routine! [f [callback []]] glut-lib "glutIdleFunc"
glutTimerFunc: make routine! [millis [integer!] f [callback [int]] value [integer!]] glut-lib "glutReshapeFunc"
glutMenuStateFunc: make routine! [f [callback [int]]] glut-lib "glutMenuStateFunc"
glutSpecialFunc: make routine! [f [callback [int int int]]] glut-lib "glutSpecialFunc"
;glutSpaceballMotionFunc: make routine! [f [callback [int int int]]] glut-lib "glutSpaceballMotionFunc"
;glutSpaceballRotateFunc: make routine! [f [callback [int int int]]] glut-lib "glutSpaceballRotateFunc"
;glutSpaceballButtonFunc: make routine! [f [callback [int int]]] glut-lib "glutSpaceballButtonFunc"
;glutButtonBoxFunc: make routine! [f [callback [int int]]] glut-lib "glutButtonBoxFunc"
;glutDialsFunc: make routine! [f [callback [int int]]] glut-lib "glutDialsFunc"
;glutTabletMotionFunc: make routine! [f [callback [int int]]] glut-lib "glutTabletMotionFunc"
;glutTabletButtonFunc: make routine! [f [callback [int int int int]]] glut-lib "glutTabletButtonFunc"
glutMenuStatusFunc: make routine! [f [callback [int int int]]] glut-lib "glutMenuStatusFunc"
;glutOverlayDisplayFunc: make routine! [f [callback []]] glut-lib "glutOverlayDisplayFunc"
glutWindowStatusFunc: make routine! [f [callback [int]]] glut-lib "glutWindowStatusFunc"
glutKeyboardUpFunc: make routine! [f [callback [char int int]]] glut-lib "glutKeyboardUpFunc"
glutSpecialUpFunc: make routine! [f [callback [int int int]]] glut-lib "glutSpecialUpFunc"
glutJoystickFunc: make routine! [f [callback [int int int int]] pollInterval [integer!]] glut-lib "glutJoystickFunc"
{ GLUT color index sub-API. }
glutSetColor: make routine! [ a [integer!] red [float] green [float] blue [float] ] glut-lib "glutSetColor"
glutGetColor: make routine! [ ndx [integer!] component [integer!] return: [float] ] glut-lib "glutGetColor"
glutCopyColormap: make routine! [ win [integer!] ] glut-lib "glutCopyColormap"
{ GLUT state retrieval sub-API. }
glutGet: make routine! [ type [GLenum] return: [integer!] ] glut-lib "glutGet"
glutDeviceGet: make routine! [ type [GLenum] return: [integer!] ] glut-lib "glutDeviceGet"
{ GLUT extension support sub-API }
glutExtensionSupported: make routine! [ name [string!] return: [integer!] ] glut-lib "glutExtensionSupported"
glutGetModifiers: make routine! [ return: [integer!] ] glut-lib "glutGetModifiers"
glutLayerGet: make routine! [ type [GLenum] return: [integer!] ] glut-lib "glutLayerGet"
{ GLUT font sub-API }
glutBitmapCharacter: make routine! [ font [integer!] character [char!] ] glut-lib "glutBitmapCharacter"
glutBitmapWidth: make routine! [ font [integer!] character [char!] return: [integer!] ] glut-lib "glutBitmapWidth"
glutStrokeCharacter: make routine! [ font [integer!] character [char!] return: [integer!] ] glut-lib "glutStrokeCharacter"
glutStrokeWidth: make routine! [ font [integer!] character [integer!] return: [integer!] ] glut-lib "glutStrokeWidth"
glutBitmapLength: make routine! [ font [integer!] string [string!] return: [integer!] ] glut-lib "glutBitmapLength"
glutStrokeLength: make routine! [ font [integer!] string [string!] return: [integer!] ] glut-lib "glutStrokeLength"
{ GLUT pre-built models sub-API }
glutWireSphere: make routine! [ radius [GLdouble] slices [GLint] stacks [GLint] ] glut-lib "glutWireSphere"
glutSolidSphere: make routine! [ radius [GLdouble] slices [GLint] stacks [GLint] ] glut-lib "glutSolidSphere"
glutWireCone: make routine! [ base [GLdouble] height [GLdouble] slices [GLint] stacks [GLint] ] glut-lib "glutWireCone"
glutSolidCone: make routine! [ base [GLdouble] height [GLdouble] slices [GLint] stacks [GLint] ] glut-lib "glutSolidCone"
glutWireCube: make routine! [ size [GLdouble] ] glut-lib "glutWireCube"
glutSolidCube: make routine! [ size [GLdouble] ] glut-lib "glutSolidCube"
glutWireTorus: make routine! [ innerRadius [GLdouble] outerRadius [GLdouble] sides [GLint] rings [GLint] ] glut-lib "glutWireTorus"
glutSolidTorus: make routine! [ innerRadius [GLdouble] outerRadius [GLdouble] sides [GLint] rings [GLint] ] glut-lib "glutSolidTorus"
glutWireDodecahedron: make routine! [ ] glut-lib "glutWireDodecahedron"
glutSolidDodecahedron: make routine! [ ] glut-lib "glutSolidDodecahedron"
glutWireTeapot: make routine! [ size [GLdouble] ] glut-lib "glutWireTeapot"
glutSolidTeapot: make routine! [ size [GLdouble] ] glut-lib "glutSolidTeapot"
glutWireOctahedron: make routine! [ ] glut-lib "glutWireOctahedron"
glutSolidOctahedron: make routine! [ ] glut-lib "glutSolidOctahedron"
glutWireTetrahedron: make routine! [ ] glut-lib "glutWireTetrahedron"
glutSolidTetrahedron: make routine! [ ] glut-lib "glutSolidTetrahedron"
glutWireIcosahedron: make routine! [ ] glut-lib "glutWireIcosahedron"
glutSolidIcosahedron: make routine! [ ] glut-lib "glutSolidIcosahedron"
{ GLUT video resize sub-API. }
glutVideoResizeGet: make routine! [ param [GLenum] return: [integer!] ] glut-lib "glutVideoResizeGet"
glutSetupVideoResizing: make routine! [ ] glut-lib "glutSetupVideoResizing"
glutStopVideoResizing: make routine! [ ] glut-lib "glutStopVideoResizing"
glutVideoResize: make routine! [ x [integer!] y [integer!] width [integer!] height [integer!] ] glut-lib "glutVideoResize"
glutVideoPan: make routine! [ x [integer!] y [integer!] width [integer!] height [integer!] ] glut-lib "glutVideoPan"
{ GLUT debugging sub-API. }
glutReportErrors: make routine! [ ] glut-lib "glutReportErrors"
glutIgnoreKeyRepeat: make routine! [ ignore [integer!] ] glut-lib "glutIgnoreKeyRepeat"
glutSetKeyRepeat: make routine! [ repeatMode [integer!] ] glut-lib "glutSetKeyRepeat"
glutForceJoystickFunc: make routine! [ ] glut-lib "glutForceJoystickFunc"
glutGameModeString: make routine! [ string [string!] ] glut-lib "glutGameModeString"
glutEnterGameMode: make routine! [ return: [integer!] ] glut-lib "glutEnterGameMode"
glutLeaveGameMode: make routine! [ ] glut-lib "glutLeaveGameMode"
glutGameModeGet: make routine! [ mode [GLenum] return: [integer!] ] glut-lib "glutGameModeGet"
]; if glut-lib
{************************************************************
** Rebol specific re-implemented glut functions
************************************************************}
opengl-lib-obj: make object! [
loop: true
moved:
fullscreen: false
title: ""
mode: GLUT_RGB or GLUT_DEPTH
posx:
posy: none
width: 200
height: 200
old-pos: none
old-size: none
window-num: 0
face:
window:
windows:
event-func:
displayFunc:
reshapeFunc:
keyboardFunc:
keyboardUpFunc:
specialFunc:
specialUpFunc:
motionFunc:
mouseFunc:
passiveMotionFunc:
idleFunc:
timerFunc:
visibilityFunc: none
menuFunc: [none none none none none none none none]
scrollFunc: none
special-keys: reduce [
'f1 GLUT_KEY_F1
'f2 GLUT_KEY_F2
'f3 GLUT_KEY_F3
'f4 GLUT_KEY_F4
'f5 GLUT_KEY_F5
'f6 GLUT_KEY_F6
'f7 GLUT_KEY_F7
'f8 GLUT_KEY_F8
'f9 GLUT_KEY_F9
'f10 GLUT_KEY_F10
'f11 GLUT_KEY_F11
'f12 GLUT_KEY_F12
'left GLUT_KEY_LEFT
'up GLUT_KEY_UP
'right GLUT_KEY_RIGHT
'down GLUT_KEY_DOWN
'page-up GLUT_KEY_PAGE_UP
'page-down GLUT_KEY_PAGE_DOWN
'home GLUT_KEY_HOME
'end GLUT_KEY_END
'insert GLUT_KEY_INSERT
]
]
glut-DisplayFunc: func [name [word! none!]] [opengl-lib-obj/displayFunc: get name]
glut-keyboardFunc: func [name [word! none!]] [opengl-lib-obj/keyboardFunc: get name]
glut-keyboardUpFunc: func [name [word! none!]] [opengl-lib-obj/keyboardUpFunc: get name]
glut-motionFunc: func [name [word! none!]] [opengl-lib-obj/motionFunc: get name]
glut-mouseFunc: func [name [word! none!]] [opengl-lib-obj/mouseFunc: get name]
glut-passiveMotionFunc: func [name [word! none!]] [opengl-lib-obj/passiveMotionFunc: get name]
glut-reshapeFunc: func [name [word! none!]] [opengl-lib-obj/reshapeFunc: get name]
glut-specialFunc: func [name [word! none!]] [opengl-lib-obj/specialFunc: get name]
glut-specialUpFunc: func [name [word! none!]] [opengl-lib-obj/specialUpFunc: get name]
glut-idleFunc: func [name [word! none!]] [opengl-lib-obj/idleFunc: get name]
glut-timerFunc: func [name [word! none!]] [opengl-lib-obj/timerFunc: get name]
glut-visibilityFunc: func [name [word! none!]] [opengl-lib-obj/visibilityFunc: get name]
glut-menuFunc: func [name [word! none!]] [opengl-lib-obj/menuFunc: get name]
glut-scrollFunc: func [name [word! none!]] [opengl-lib-obj/scrollFunc: get name]
glut-MainLoop: does [
if get in opengl-lib-obj 'ReshapeFunc [opengl-lib-obj/ReshapeFunc opengl-lib-obj/window/size/x opengl-lib-obj/window/size/y]
opengl-lib-obj/displayFunc
while [any [opengl-lib-obj/loop not empty? system/view/screen-face/pane]] [
if get in opengl-lib-obj 'idleFunc [opengl-lib-obj/idleFunc]
wait 0.001; REBOL-NOTE: let listen events
]
glut-CleanUp
]
glut-CleanUp: does [
glut-unview/quit
free opengl-lib
free glu-lib
attempt [free glut-lib]
;quit
]
glut-DestroyWindow: does [glut-unview/quit]
glut-IconifyWindow: does [opengl-lib-obj/window/changes: [minimize] show opengl-lib-obj/window]
glut-SetWindowTitle: func [title [string!]] [opengl-lib-obj/window/text: title opengl-lib-obj/window/changes: [text] show opengl-lib-obj/window]
glut-PositionWindow: func [ x [integer!] y [integer!] ] [opengl-lib-obj/window/offset: as-pair x y show opengl-lib-obj/window]
glut-FullScreen: does [
if not opengl-lib-obj/fullscreen [
alter opengl-lib-obj/window/options 'no-title ; REBOL-NOTE: with this findwindow does not work :(
alter opengl-lib-obj/window/options 'no-border
alter opengl-lib-obj/window/options 'resize
unview/only opengl-lib-obj/window
opengl-lib-obj/old-pos: opengl-lib-obj/window/offset
opengl-lib-obj/old-size: opengl-lib-obj/window/size
opengl-lib-obj/window/offset: 0x0
opengl-lib-obj/window/size: system/view/screen-face/size
view/new opengl-lib-obj/window
if get in opengl-lib-obj 'ReshapeFunc [opengl-lib-obj/ReshapeFunc system/view/screen-face/size/x system/view/screen-face/size/y]
opengl-lib-obj/fullscreen: true
glut-MainLoop
]
]
glut-ReshapeWindow: func [Width Height] [
if opengl-lib-obj/fullscreen [
alter opengl-lib-obj/window/options 'no-title
alter opengl-lib-obj/window/options 'no-border
alter opengl-lib-obj/window/options 'resize
opengl-lib-obj/window/offset: opengl-lib-obj/old-pos
opengl-lib-obj/window/size: opengl-lib-obj/old-size
opengl-lib-obj/fullscreen: false
]
opengl-lib-obj/window/size/x: Width
opengl-lib-obj/window/size/y: Height
unview/only opengl-lib-obj/window
view/new opengl-lib-obj/window
glut-MainLoop
]
glut-PostRedisplay: does [opengl-lib-obj/displayFunc]
glut-InitDisplayMode: func [mode [integer!]] [opengl-lib-obj/mode: mode or GLUT_RGB or GLUT_DEPTH]
glut-InitWindowSize: func [w [integer!] h [integer!]] [opengl-lib-obj/width: w opengl-lib-obj/height: h]
glut-InitWindowPosition: func [x [integer!] y [integer!]] [opengl-lib-obj/posx: x opengl-lib-obj/posy: y]
glut-CreateWindow: func [title [string!]] [
opengl-lib-obj/window-num: opengl-lib-obj/window-num + 1
glut-view title layout [ size as-pair opengl-lib-obj/width opengl-lib-obj/height]
]
glut-BitmapString: func [ font [integer!] string [string!] ] [
foreach char string [glutBitmapCharacter font char]
]
{************************************************************
** Rebol specific functions
************************************************************}
glut-view: func [; taken from OpenGL.R Test (c) 2003 Cal Dixon
title [string!] face [object!] /options opts [block!]
/local
PIXELFORMATDESCRIPTOR-def PIXELFORMATDESCRIPTOR pfd user32 gdi32 opengl oldhDC oldhRC hdc hRC
display attrList-def attrList defs vinfo util_glctx winFocus
] [
opengl-lib-obj/title: title
opengl-lib-obj/face: face
opengl-lib-obj/posx: any [opengl-lib-obj/posx opengl-lib-obj/face/offset/x]
opengl-lib-obj/posy: any [opengl-lib-obj/posy opengl-lib-obj/face/offset/y]
face: view/new/title/offset/options make face [hDC: wdat: none] title as-pair opengl-lib-obj/posx opengl-lib-obj/posy any [opts [resize]]
opengl-lib-obj/window: face
;face/user-data: reduce ['size face/size]
if not get in opengl-lib-obj 'event-func [
opengl-lib-obj/event-func: insert-event-func func [face event] [
if event/face = opengl-lib-obj/window [
switch event/type [
move [if get in opengl-lib-obj 'MotionFunc [opengl-lib-obj/MotionFunc event/offset/x event/offset/y]]
key [
either found? find opengl-lib-obj/special-keys event/key [
if get in opengl-lib-obj 'specialFunc [opengl-lib-obj/specialFunc select opengl-lib-obj/special-keys event/key event/offset/x event/offset/y]
] [
if get in opengl-lib-obj 'keyboardFunc [opengl-lib-obj/keyboardFunc event/key event/offset/x event/offset/y]
]
]
down [if get in opengl-lib-obj 'MouseFunc [opengl-lib-obj/MouseFunc GLUT_LEFT_BUTTON GLUT_DOWN event/offset/x event/offset/y]]
up [if get in opengl-lib-obj 'MouseFunc [opengl-lib-obj/MouseFunc GLUT_LEFT_BUTTON GLUT_UP event/offset/x event/offset/y]]
alt-down [if get in opengl-lib-obj 'MouseFunc [opengl-lib-obj/MouseFunc GLUT_RIGHT_BUTTON GLUT_DOWN event/offset/x event/offset/y]]
alt-up [if get in opengl-lib-obj 'MouseFunc [opengl-lib-obj/MouseFunc GLUT_RIGHT_BUTTON GLUT_up event/offset/x event/offset/y]]
resize [
face: opengl-lib-obj/window
;face/user-data/size: face/size ; store new size
if get in opengl-lib-obj 'ReshapeFunc [opengl-lib-obj/ReshapeFunc face/size/x face/size/y]
opengl-lib-obj/displayFunc
]
offset [opengl-lib-obj/moved: true return event]
active [
if opengl-lib-obj/moved [ ; unminimized
if get in opengl-lib-obj 'visibilityFunc [opengl-lib-obj/visibilityFunc GLUT_VISIBLE]
]
opengl-lib-obj/displayFunc
]
inactive [opengl-lib-obj/displayFunc]
minimize [if get in opengl-lib-obj 'visibilityFunc [opengl-lib-obj/visibilityFunc GLUT_NOT_VISIBLE]]
close [opengl-lib-obj/loop: false];glut-CleanUp] ; better let user handle this (or add closeFunc?)
scroll-line [if get in opengl-lib-obj 'scrollFunc [opengl-lib-obj/scrollFunc event/offset/y]]
]
]
opengl-lib-obj/moved: false
event
]
]
opengl-lib-obj/loop: true
switch/default System/version/4 [
3 [
PIXELFORMATDESCRIPTOR-def: [
nSize [short]
nVersion [short]
dwFlags [integer!]
iPixelType [char!]
cColorBits [char!]
cRedBits [char!]
cRedShift [char!]
cGreenBits [char!]
cGreenShift [char!]
cBlueBits [char!]
cBlueShift [char!]
cAlphaBits [char!]
cAlphaShift [char!]
cAccumBits [char!]
cAccumRedBits [char!]
cAccumGreenBits [char!]
cAccumBlueBits [char!]
cAccumAlphaBits [char!]
cDepthBits [char!]
cStencilBits [char!]
cAuxBuffers [char!]
iLayerType [char!]
bReserved [char!]
dwLayerMask [integer!]
dwVisibleMask [integer!]
dwDamageMask [integer!]
]
{pfd constants}
PFD_DOUBLEBUFFER: 1
PFD_STEREO: 2
PFD_DRAW_TO_WINDOW: 4
PFD_DRAW_TO_BITMAP: 8
PFD_SUPPORT_GDI: 16
PFD_SUPPORT_OPENGL: 32
PFD_GENERIC_FORMAT: 64
PFD_NEED_PALETTE: 128
PFD_NEED_SYSTEM_PALETTE: 256
PFD_SWAP_EXCHANGE: 512
PFD_SWAP_COPY: 1024
PFD_SWAP_LAYER_BUFFERS: 2048
PFD_GENERIC_ACCELERATED: 4096
PFD_SUPPORT_DIRECTDRAW: 8192
PFD_TYPE_RGBA: to-char 0
PFD_TYPE_COLORINDEX: to-char 1
PFD_MAIN_PLANE: to-char 0
PFD_OVERLAY_PLANE: to-char 1
PFD_UNDERLAY_PLANE: to-char 255
pfd: make struct! PIXELFORMATDESCRIPTOR-def none
pfd/nSize: length? third pfd
pfd/nVersion: 1
pfd/dwFlags: PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL
if (opengl-lib-obj/mode and GLUT_DOUBLE) <> 0 [pfd/dwFlags: pfd/dwFlags or PFD_DOUBLEBUFFER]
pfd/iPixelType: PFD_TYPE_RGBA
pfd/cColorBits: to-char 24
pfd/cDepthBits: to-char 32
pfd/iLayerType: PFD_MAIN_PLANE
user32: load/library %user32.dll
gdi32: load/library %gdi32.dll
;opengl: load/library %Opengl32.dll
FindWindow: make routine! [class [string!] name [int] return: [int]] user32 "FindWindowA"
GetDC: make routine! [hWnd [integer!] return: [integer!]] user32 "GetDC"
ReleaseDC: make routine! [hWnd [integer!] hDC [integer!]] user32 "ReleaseDC"
ChoosePixelFormat: make routine! compose/deep/only [hdc [integer!] ppfd [struct! (PIXELFORMATDESCRIPTOR-def)] return: [integer!]] gdi32 "ChoosePixelFormat"
SetPixelFormat: make routine! compose/deep/only [hdc [integer!] iPixelFormat [integer!] ppfd [struct! (PIXELFORMATDESCRIPTOR-def)] return: [integer!]] gdi32 "SetPixelFormat"
SwapBuffers: make routine! [hDC [integer!] return: [integer!]] gdi32 "SwapBuffers"
wglCreateContext: make routine! [hDC [integer!] return: [integer!]] opengl-lib "wglCreateContext"
wglMakeCurrent: make routine! [hDC [integer!] hRC [integer!]] opengl-lib "wglMakeCurrent"
wglGetCurrentContext: make routine! [return: [integer!]] opengl-lib "wglGetCurrentContext"
wglGetCurrentDC: make routine! [return: [integer!]] opengl-lib "wglGetCurrentDC"
wglDeleteContext: make routine! [hRC [integer!]] opengl-lib "wglDeleteContext"
face/hDC: hDC: GetDC FindWindow "REBOLWind" 0
SetPixelFormat hDC ChoosePixelFormat hDC pfd pfd
hRC: wglCreateContext hDC
oldhRC: wglGetCurrentContext
oldhDC: wglGetCurrentDC
wglMakeCurrent hDC hRC
face/wdat: reduce [user32 gdi32 opengl oldhDC oldhRC hDC hRC]
]
4 [
{GLX constants}
GLX_USE_GL: 1
GLX_BUFFER_SIZE: 2
GLX_LEVEL: 3
GLX_RGBA: 4
GLX_DOUBLEBUFFER: 5
GLX_STEREO: 6
GLX_AUX_BUFFERS: 7
GLX_RED_SIZE: 8
GLX_GREEN_SIZE: 9
GLX_BLUE_SIZE: 10
GLX_ALPHA_SIZE: 11
GLX_DEPTH_SIZE: 12
GLX_STENCIL_SIZE: 13
GLX_ACCUM_RED_SIZE: 14
GLX_ACCUM_GREEN_SIZE: 15
GLX_ACCUM_BLUE_SIZE: 16
GLX_ACCUM_ALPHA_SIZE: 17
lib: %libX11.so.6
if not attempt [libx11-lib: load/library lib] [alert rejoin ["" lib " library not found. Quit"] quit]
XDefaultScreen: make routine! [ display [integer!] return: [integer!] ] libx11-lib "XDefaultScreen"
XOpenDisplay: make routine! [ display_name [string!] return: [integer!] ] libx11-lib "XOpenDisplay"
XCloseDisplay: make routine! [ display [integer!] return: [integer!] ] libx11-lib "XCloseDisplay"
XGetInputFocus: make routine! [ display [integer!] winFocus [struct! []] revert [struct! []] return: [integer!] ] libx11-lib "XGetInputFocus"
glXChooseVisual: make routine! [ dpy [integer!] screen [integer!] attribList [binary!] return: [integer!] ] opengl-lib "glXChooseVisual"
glXCreateContext: make routine! [ dpy [integer!] vis [integer!] shareList [integer!] direct [integer!] return: [integer!] ] opengl-lib "glXCreateContext"
glXDestroyContext: make routine! [ dpy [integer!] ctx [integer!] return: [integer!] ] opengl-lib "glXDestroyContext"
glXMakeCurrent: make routine! [ dpy [integer!] drawable [integer!] ctx [integer!] return: [integer!] ] opengl-lib "glXMakeCurrent"
glXSwapBuffers: make routine! [ dpy [integer!] drawable [integer!] return: [integer!] ] opengl-lib "glXSwapBuffers"
catch [
if 0 = (display: XOpenDisplay "") [throw]
attrList-def: reduce [GLX_USE_GL GLX_RGBA GLX_DEPTH_SIZE 16 GLX_RED_SIZE 1 GLX_GREEN_SIZE 1 GLX_BLUE_SIZE 1 0]
if (opengl-lib-obj/mode and GLUT_DOUBLE) <> 0 [insert attrList-def GLX_DOUBLEBUFFER]
attrList: block-to-struct head attrList-def
defs: XDefaultScreen display
if 0 = vinfo: glXChooseVisual display defs third attrList [throw]
if 0 = util_glctx: glXCreateContext display vinfo 0 GL_TRUE [throw]
; Find the window which has the current keyboard focus.
winFocus: int-ptr
XGetInputFocus display winFocus int-ptr
if (0 = glXMakeCurrent display winFocus/value util_glctx) [throw]
face/wdat: reduce [0 libx11-lib opengl-lib display util_glctx winFocus/value 0]
]
]
][exit];switch
face
]
glut-unview: func [/quit /local face [object!]] [
if face: opengl-lib-obj/window [
switch System/version/4 [
3 [
wglMakeCurrent face/wdat/4 face/wdat/5
wglDeleteContext face/wdat/7
releasedc 0 face/wdat/6
if quit [
free face/wdat/1
free face/wdat/2
;free face/wdat/3
]
]
4 [
if face/wdat/5 [glXMakeCurrent face/wdat/4 0 0]
glXDestroyContext face/wdat/4 face/wdat/5
XCloseDisplay face/wdat/4
if quit [
free face/wdat/2
]
]
]
remove-event-func get in opengl-lib-obj 'event-func
unview/only face
opengl-lib-obj/loop: false
opengl-lib-obj/event-func: none
opengl-lib-obj/window: none
]
]
switch System/version/4 [
3 [glut-SwapBuffers: does [SwapBuffers opengl-lib-obj/window/hDC]]
4 [glut-SwapBuffers: does [glXSwapBuffers opengl-lib-obj/window/wdat/4 opengl-lib-obj/window/wdat/6]]
]
{************************************************************
*** example
************************************************************}
;comment [ ;uncomment this and comment next line to comment example code
context [ ; taken from OpenGL.R Test (c) 2003 Cal Dixon
if any [(System/version/4 = 3) (System/version/4 = 4)] [
print "Press any key while in the 3D window to quit. Click and drag to move the cube."
glut-InitDisplayMode GLUT_DOUBLE or GLUT_RGB or GLUT_DEPTH ; eneable double buffering since default is single
glut-view "Test" layout [ size 512x512 origin 0x0
control: box 512x512 feel [
engage: func [f a e][
if a = 'over [ transx: e/offset/x transy: 512.0 - e/offset/y ]
if a = 'key [
glut-unview
quit
]
if a = 'alt-down [ thetabump: negate thetabump ]
if a = 'alt-up [ thetabump: negate thetabump]
]
]
]
focus control ; REBOL-NOTE: necessary to hear key presses (if we do not use glut-keybordFunc)
glEnable GL_DEPTH_TEST
glEnable GL_CULL_FACE
glEnable GL_TEXTURE_2D
texturebin: to-binary to-image layout/size [at 0x0 image 128x128 logo.gif effect [fit flip 0x1] ] 128x128
texptr: make binary! 4 * 1 ; REBOL-NOTE: allocate 4 bytes of memory (for 1 pointer)
glGenTextures 1 texptr
glBindTexture GL_TEXTURE_2D texptr
glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT
glTexParameteri GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT
glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR
glTexParameteri GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR
glTexEnvf GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_MODULATE
glTexImage2d GL_TEXTURE_2D 0 4 128 128 0 GL_BGRA_EXT GL_UNSIGNED_BYTE texturebin
theta: 0.0
thetabump: .10
transx: 0.0
transy: 0.0
n: 0 t: now/time/precise
display: does [
glClearColor 0.0 0.0 0.0 0.0
glClear GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT
glPushMatrix
glTranslated -1.0 + (transx / 256) -1.0 + (transy / 256) 0.0
glRotate theta 1.0 1.0 1.0
glBindTexture GL_TEXTURE_2D texptr
glBegin GL_TRIANGLES
; front / blue
gl-color blue
glTexCoord2d 0.0 0.0
glVertex3d 0.0 0.0 0.0
glTexCoord2d 1.0 0.0
glVertex3d 0.5 0.0 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.5 0.0
glTexCoord2d 1.0 1.0
glVertex3d 0.5 0.5 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.5 0.0
glTexCoord2d 1.0 0.0
glVertex3d 0.5 0.0 0.0
;left / red
gl-Color red
glTexCoord2d 0.0 0.0
glVertex3d 0.0 0.0 0.0
glTexCoord2d 1.0 0.0
glVertex3d 0.0 0.5 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.0 0.5
glTexCoord2d 1.0 1.0
glVertex3d 0.0 0.5 0.5
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.0 0.5
glTexCoord2d 1.0 0.0
glVertex3d 0.0 0.5 0.0
;right / yellow
gl-Color yellow
glTexCoord2d 1.0 0.0
glVertex3d 0.5 0.0 0.0
glTexCoord2d 1.0 1.0
glVertex3d 0.5 0.0 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.5 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.5 0.5 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.5 0.0
glTexCoord2d 1.0 1.0
glVertex3d 0.5 0.0 0.5
; back / green
gl-Color green
glTexCoord2d 1.0 0.0
glVertex3d 0.0 0.0 0.5
glTexCoord2d 1.0 1.0
glVertex3d 0.0 0.5 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.0 0.5
glTexCoord2d 0.0 1.0
glVertex3d 0.5 0.5 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.0 0.5
glTexCoord2d 1.0 1.0
glVertex3d 0.0 0.5 0.5
; bottom / cyan
gl-Color cyan
glTexCoord2d 1.0 0.0
glVertex3d 0.0 0.0 0.0
glTexCoord2d 1.0 1.0
glVertex3d 0.0 0.0 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.0 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.5 0.0 0.5
glTexCoord2d 0.0 0.0
glVertex3d 0.5 0.0 0.0
glTexCoord2d 1.0 1.0
glVertex3d 0.0 0.0 0.5
; top / purple
gl-Color purple
glTexCoord2d 0.0 0.0
glVertex3d 0.0 0.5 0.0
glTexCoord2d 1.0 0.0
glVertex3d 0.5 0.5 0.0
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.5 0.5
glTexCoord2d 1.0 1.0
glVertex3d 0.5 0.5 0.5
glTexCoord2d 0.0 1.0
glVertex3d 0.0 0.5 0.5
glTexCoord2d 1.0 0.0
glVertex3d 0.5 0.5 0.0
glEnd
glPopMatrix
glut-SwapBuffers
theta: theta + thetabump
n: n + 1
if n > 50 [
t1: now/time/precise
if t1 = t [t1: t1 + 0.1]
print rejoin ["" fps: to-integer n / to-decimal (t1 - t) " fps "] prin "^(1B)[1A"
n: 0 t: now/time/precise
thetabump: 100 / fps * sign? thetabump
]
]
glut-DisplayFunc 'display ;REBOL-NOTE: assign callbacks
glut-IdleFunc 'display ;REBOL-NOTE: assign callbacks { Even if there are no events redraw our gl scene. }
glut-MainLoop ; The Main Loop
halt
]
] |