12b8c71998-11-03Marcus Comstedt /*
b76b9a1999-08-17Marcus Comstedt  * $Id: top.c,v 1.11 1999/08/17 20:59:14 marcus Exp $
12b8c71998-11-03Marcus Comstedt  * */
83cc051999-08-07Marcus Comstedt #include "config.h"
2951e61999-08-07Marcus Comstedt #ifdef HAVE_GL
b76b9a1999-08-17Marcus Comstedt #ifdef HAVE_WINDEF_H #include <windef.h> #endif /* HAVE_WINDEF_H */ #ifdef HAVE_WINGDI_H #include <wingdi.h> #endif /* HAVE_WINGDI_H */ #ifdef HAVE_GL_GL_H
0e23941998-11-03Marcus Comstedt #include <GL/gl.h>
b76b9a1999-08-17Marcus Comstedt #endif /* HAVE_GL_GL_H */ #ifdef HAVE_GL_GLX_H
0e23941998-11-03Marcus Comstedt #include <GL/glx.h>
b76b9a1999-08-17Marcus Comstedt #endif /* HAVE_GL_GLX_H */
0e23941998-11-03Marcus Comstedt 
2951e61999-08-07Marcus Comstedt #endif /* HAVE_GL */
12b8c71998-11-03Marcus Comstedt #include "global.h"
b76b9a1999-08-17Marcus Comstedt RCSID("$Id: top.c,v 1.11 1999/08/17 20:59:14 marcus Exp $");
12b8c71998-11-03Marcus Comstedt #include "stralloc.h" #include "pike_macros.h" #include "object.h" #include "program.h" #include "interpret.h" #include "builtin_functions.h"
f0e4a01999-07-24Marcus Comstedt #include "module_support.h"
12b8c71998-11-03Marcus Comstedt #include "error.h"
2951e61999-08-07Marcus Comstedt #ifdef HAVE_GL
12b8c71998-11-03Marcus Comstedt 
f5621a1999-07-24Marcus Comstedt static void f_glGet(INT32 args) { INT32 arg1;
326c031999-07-24Marcus Comstedt  GLint i, i2[4];
f5621a1999-07-24Marcus Comstedt  GLboolean b[4]; GLfloat f[16]; check_all_args("glGet", args, BIT_INT, 0); arg1=sp[0-args].u.integer; pop_n_elems(args); switch(arg1) { case GL_ACCUM_ALPHA_BITS: case GL_ACCUM_BLUE_BITS: case GL_ACCUM_GREEN_BITS: case GL_ACCUM_RED_BITS: case GL_ALPHA_BITS: case GL_ALPHA_TEST_FUNC: case GL_ATTRIB_STACK_DEPTH: case GL_AUX_BUFFERS: case GL_BLEND_DST: case GL_BLEND_SRC: case GL_BLUE_BITS: case GL_CLIENT_ATTRIB_STACK_DEPTH: case GL_COLOR_ARRAY_SIZE: case GL_COLOR_ARRAY_STRIDE: case GL_COLOR_ARRAY_TYPE: case GL_COLOR_MATERIAL_FACE: case GL_COLOR_MATERIAL_PARAMETER: case GL_CULL_FACE_MODE: case GL_DEPTH_BITS:
326c031999-07-24Marcus Comstedt  case GL_DEPTH_FUNC: case GL_DRAW_BUFFER: case GL_EDGE_FLAG_ARRAY_STRIDE: case GL_FOG_HINT: case GL_FOG_MODE: case GL_FRONT_FACE: case GL_GREEN_BITS: case GL_INDEX_ARRAY_STRIDE: case GL_INDEX_ARRAY_TYPE: case GL_INDEX_BITS: case GL_INDEX_OFFSET: case GL_INDEX_SHIFT: case GL_INDEX_WRITEMASK: case GL_LINE_SMOOTH_HINT: case GL_LINE_STIPPLE_PATTERN: case GL_LINE_STIPPLE_REPEAT: case GL_LIST_BASE: case GL_LIST_INDEX: case GL_LIST_MODE: case GL_LOGIC_OP_MODE: case GL_MAP1_GRID_SEGMENTS: case GL_MATRIX_MODE: case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH: case GL_MAX_ATTRIB_STACK_DEPTH: case GL_MAX_CLIP_PLANES: case GL_MAX_EVAL_ORDER: case GL_MAX_LIGHTS: case GL_MAX_LIST_NESTING: case GL_MAX_MODELVIEW_STACK_DEPTH: case GL_MAX_NAME_STACK_DEPTH: case GL_MAX_PIXEL_MAP_TABLE: case GL_MAX_PROJECTION_STACK_DEPTH: case GL_MAX_TEXTURE_SIZE: case GL_MAX_TEXTURE_STACK_DEPTH: case GL_MODELVIEW_STACK_DEPTH: case GL_NAME_STACK_DEPTH: case GL_NORMAL_ARRAY_STRIDE: case GL_NORMAL_ARRAY_TYPE: case GL_PACK_ALIGNMENT: case GL_PACK_ROW_LENGTH: case GL_PACK_SKIP_PIXELS: case GL_PACK_SKIP_ROWS: case GL_PERSPECTIVE_CORRECTION_HINT: case GL_PIXEL_MAP_A_TO_A_SIZE: case GL_PIXEL_MAP_B_TO_B_SIZE: case GL_PIXEL_MAP_G_TO_G_SIZE: case GL_PIXEL_MAP_I_TO_A_SIZE: case GL_PIXEL_MAP_I_TO_B_SIZE: case GL_PIXEL_MAP_I_TO_G_SIZE: case GL_PIXEL_MAP_I_TO_I_SIZE: case GL_PIXEL_MAP_I_TO_R_SIZE: case GL_PIXEL_MAP_R_TO_R_SIZE: case GL_PIXEL_MAP_S_TO_S_SIZE: case GL_POINT_SMOOTH_HINT: case GL_POLYGON_MODE: case GL_POLYGON_SMOOTH_HINT: case GL_PROJECTION_STACK_DEPTH: case GL_READ_BUFFER: case GL_RED_BITS: case GL_RENDER_MODE: case GL_SHADE_MODEL: case GL_STENCIL_BITS: case GL_STENCIL_CLEAR_VALUE: case GL_STENCIL_FAIL: case GL_STENCIL_FUNC: case GL_STENCIL_PASS_DEPTH_FAIL: case GL_STENCIL_PASS_DEPTH_PASS: case GL_STENCIL_REF: case GL_STENCIL_VALUE_MASK: case GL_STENCIL_WRITEMASK: case GL_SUBPIXEL_BITS: case GL_TEXTURE_BINDING_1D: case GL_TEXTURE_BINDING_2D: case GL_TEXTURE_COORD_ARRAY_SIZE: case GL_TEXTURE_COORD_ARRAY_STRIDE: case GL_TEXTURE_COORD_ARRAY_TYPE: case GL_TEXTURE_STACK_DEPTH: case GL_UNPACK_ALIGNMENT: case GL_UNPACK_ROW_LENGTH: case GL_UNPACK_SKIP_PIXELS: case GL_UNPACK_SKIP_ROWS: case GL_VERTEX_ARRAY_SIZE: case GL_VERTEX_ARRAY_STRIDE: case GL_VERTEX_ARRAY_TYPE:
f5621a1999-07-24Marcus Comstedt  glGetIntegerv(arg1, &i); push_int(i); break;
326c031999-07-24Marcus Comstedt  case GL_MAP2_GRID_SEGMENTS: case GL_MAX_VIEWPORT_DIMS: glGetIntegerv(arg1, i2); push_int(i2[0]); push_int(i2[1]); f_aggregate(2); break; case GL_SCISSOR_BOX: case GL_VIEWPORT: glGetIntegerv(arg1, i2); push_int(i2[0]); push_int(i2[1]); push_int(i2[2]); push_int(i2[3]); f_aggregate(4); break;
f5621a1999-07-24Marcus Comstedt  case GL_ALPHA_TEST: case GL_AUTO_NORMAL: case GL_BLEND: case GL_CLIP_PLANE0: case GL_CLIP_PLANE1: case GL_CLIP_PLANE2: case GL_CLIP_PLANE3: case GL_CLIP_PLANE4: case GL_CLIP_PLANE5: case GL_COLOR_ARRAY: case GL_COLOR_LOGIC_OP: case GL_COLOR_MATERIAL: case GL_CULL_FACE: case GL_CURRENT_RASTER_POSITION_VALID: case GL_DEPTH_TEST: case GL_DEPTH_WRITEMASK: case GL_DITHER: case GL_DOUBLEBUFFER: case GL_EDGE_FLAG: case GL_EDGE_FLAG_ARRAY: case GL_FOG: case GL_INDEX_ARRAY: case GL_INDEX_LOGIC_OP: case GL_INDEX_MODE: case GL_LIGHT0: case GL_LIGHT1: case GL_LIGHT2: case GL_LIGHT3: case GL_LIGHT4: case GL_LIGHT5: case GL_LIGHT6: case GL_LIGHT7: case GL_LIGHTING: case GL_LIGHT_MODEL_LOCAL_VIEWER: case GL_LIGHT_MODEL_TWO_SIDE: case GL_LINE_SMOOTH: case GL_LINE_STIPPLE: case GL_MAP1_COLOR_4: case GL_MAP1_INDEX: case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_1: case GL_MAP1_TEXTURE_COORD_2: case GL_MAP1_TEXTURE_COORD_3: case GL_MAP1_TEXTURE_COORD_4: case GL_MAP1_VERTEX_3: case GL_MAP1_VERTEX_4: case GL_MAP2_COLOR_4: case GL_MAP2_INDEX: case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_1: case GL_MAP2_TEXTURE_COORD_2: case GL_MAP2_TEXTURE_COORD_3: case GL_MAP2_TEXTURE_COORD_4: case GL_MAP2_VERTEX_3: case GL_MAP2_VERTEX_4: case GL_MAP_COLOR: case GL_MAP_STENCIL: case GL_NORMAL_ARRAY: case GL_NORMALIZE: case GL_PACK_LSB_FIRST: case GL_PACK_SWAP_BYTES: case GL_POINT_SMOOTH: case GL_POLYGON_OFFSET_FILL: case GL_POLYGON_OFFSET_LINE: case GL_POLYGON_OFFSET_POINT: case GL_POLYGON_SMOOTH: case GL_POLYGON_STIPPLE: case GL_RGBA_MODE: case GL_SCISSOR_TEST: case GL_STENCIL_TEST: case GL_STEREO: case GL_TEXTURE_1D: case GL_TEXTURE_2D: case GL_TEXTURE_COORD_ARRAY: case GL_TEXTURE_GEN_Q: case GL_TEXTURE_GEN_R: case GL_TEXTURE_GEN_S: case GL_TEXTURE_GEN_T: case GL_UNPACK_LSB_FIRST: case GL_UNPACK_SWAP_BYTES: case GL_VERTEX_ARRAY:
326c031999-07-24Marcus Comstedt  glGetBooleanv(arg1, b); push_int(b[0]); break; case GL_ALPHA_BIAS: case GL_ALPHA_SCALE: case GL_ALPHA_TEST_REF: case GL_BLUE_BIAS: case GL_BLUE_SCALE: case GL_CURRENT_INDEX: case GL_CURRENT_RASTER_DISTANCE: case GL_CURRENT_RASTER_INDEX: case GL_DEPTH_BIAS: case GL_DEPTH_CLEAR_VALUE: case GL_DEPTH_SCALE: case GL_FOG_DENSITY: case GL_FOG_END: case GL_FOG_INDEX: case GL_FOG_START: case GL_GREEN_BIAS: case GL_GREEN_SCALE: case GL_INDEX_CLEAR_VALUE: case GL_LINE_WIDTH: case GL_LINE_WIDTH_GRANULARITY: case GL_POINT_SIZE: case GL_POINT_SIZE_GRANULARITY: case GL_POLYGON_OFFSET_FACTOR: case GL_POLYGON_OFFSET_UNITS: case GL_RED_BIAS: case GL_RED_SCALE:
f5621a1999-07-24Marcus Comstedt  case GL_ZOOM_X: case GL_ZOOM_Y:
326c031999-07-24Marcus Comstedt  glGetFloatv(arg1, f); push_float(f[0]); break; case GL_DEPTH_RANGE: case GL_LINE_WIDTH_RANGE: case GL_MAP1_GRID_DOMAIN: case GL_POINT_SIZE_RANGE: glGetFloatv(arg1, f); push_float(f[0]); push_float(f[1]); f_aggregate(2); break; case GL_CURRENT_NORMAL: glGetFloatv(arg1, f); push_float(f[0]); push_float(f[1]); push_float(f[2]); f_aggregate(3); break; case GL_ACCUM_CLEAR_VALUE: case GL_COLOR_CLEAR_VALUE: case GL_CURRENT_COLOR: case GL_CURRENT_RASTER_COLOR: case GL_CURRENT_RASTER_POSITION: case GL_CURRENT_RASTER_TEXTURE_COORDS: case GL_CURRENT_TEXTURE_COORDS: case GL_FOG_COLOR: case GL_LIGHT_MODEL_AMBIENT: case GL_MAP2_GRID_DOMAIN: glGetFloatv(arg1, f); push_float(f[0]); push_float(f[1]); push_float(f[2]); push_float(f[3]); f_aggregate(4); break; case GL_COLOR_WRITEMASK: glGetBooleanv(arg1, b); push_int(b[0]); push_int(b[1]); push_int(b[2]); push_int(b[3]); f_aggregate(4); break; case GL_MODELVIEW_MATRIX: case GL_PROJECTION_MATRIX: case GL_TEXTURE_MATRIX: glGetFloatv(arg1, f); push_float(f[0]); push_float(f[1]); push_float(f[2]); push_float(f[3]); push_float(f[4]); push_float(f[5]); push_float(f[6]); push_float(f[7]); push_float(f[8]); push_float(f[9]); push_float(f[10]); push_float(f[11]); push_float(f[12]); push_float(f[13]); push_float(f[14]); push_float(f[15]); f_aggregate(16); break; default: error("glGet: Unsupported parameter name\n");
f5621a1999-07-24Marcus Comstedt  } }
2951e61999-08-07Marcus Comstedt #endif /* HAVE_GL */
f5621a1999-07-24Marcus Comstedt 
12b8c71998-11-03Marcus Comstedt void pike_module_init( void ) {
2951e61999-08-07Marcus Comstedt #ifdef HAVE_GL
1cdf801999-07-25Marcus Comstedt  extern void GL_add_auto_funcs(void);
12b8c71998-11-03Marcus Comstedt 
f5621a1999-07-24Marcus Comstedt  add_function_constant("glGet", f_glGet, "function(int:int|float|array(int)|array(float))", OPT_SIDE_EFFECT);
1cdf801999-07-25Marcus Comstedt  GL_add_auto_funcs();
2951e61999-08-07Marcus Comstedt #endif /* HAVE_GL */
12b8c71998-11-03Marcus Comstedt } void pike_module_exit( void ) { }