libopengl-perl-0.6704+dfsg.orig/0000755000175000017500000000000012521223650015673 5ustar gregoagregoalibopengl-perl-0.6704+dfsg.orig/pogl_rpn.xs0000644000175000017500000012240512334201222020064 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:10:28 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL::Array */ #define IN_POGL_ARRAY_XS /* OpenGL RPN code */ #define IN_POGL_RPN_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" #endif #ifdef HAVE_GLX #include "glx_util.h" #endif #ifdef HAVE_GLU #include "glu_util.h" #endif #ifdef IN_POGL_RPN_XS #ifndef M_PI #ifdef PI #define M_PI PI #else #define M_PI 3.1415926535897932384626433832795 #endif #endif #endif /* End IN_POGL_RPN_XS */ /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #ifdef HAVE_GL #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else #define loadProc(proc,name) #define testProc(proc,name) 1 #endif #endif #ifdef IN_POGL_RPN_XS /********************/ /* RPN Processor */ /********************/ /* RPN Ops */ enum { RPN_NOP = 0, RPN_PSH, RPN_POP, RPN_CNT, RPN_IDX, RPN_CLS, RPN_COL, RPN_RWS, RPN_ROW, RPN_SET, RPN_GET, RPN_STO, RPN_LOD, RPN_TST, RPN_NOT, RPN_EQU, RPN_GRE, RPN_LES, RPN_END, RPN_EIF, RPN_ERW, RPN_ERI, RPN_RET, RPN_RIF, RPN_RRW, RPN_RRI, RPN_SUM, RPN_AVG, RPN_RND, RPN_DUP, RPN_SWP, RPN_ABS, RPN_NEG, RPN_INC, RPN_DEC, RPN_ADD, // Also OR RPN_MUL, // ALSO AND RPN_DIV, RPN_POW, RPN_MOD, RPN_MIN, RPN_MAX, RPN_SIN, RPN_COS, RPN_TAN, RPN_AT2, RPN_DMP, RPN_FLR, RPN_CGT, RPN_CST, RPN_RGT, RPN_RST }; /* RPN breaks */ enum { RPNF_CONTINUE = 0, RPNF_END, RPNF_ENDROW, RPNF_RETURN, RPNF_RETURNROW }; /* RPN OP link-list */ struct tag_rpn_op { int op; GLfloat value; struct tag_rpn_op * next; }; typedef struct tag_rpn_op rpn_op; /* RPN OP stack for a given column */ struct tag_rpn_stack { int count; int max_count; GLfloat * data; rpn_op * ops; }; typedef struct tag_rpn_stack rpn_stack; /* RPN Object */ struct tag_rpn_context { int rows; int cols; int oga_count; oga_struct ** oga_list; GLfloat * store; rpn_stack ** stacks; }; typedef struct tag_rpn_context rpn_context; /* RPN Parser */ rpn_stack * rpn_parse(int size,char * string) { rpn_stack * stack = malloc(sizeof(rpn_stack)); rpn_op * op = NULL; rpn_op * last = NULL; char * data = NULL; /* Will destroy string, so make a copy */ memset(stack,0,sizeof(rpn_stack)); if (string && *string) { /* Assumes ASCII */ data = malloc(strlen(string)+1); strcpy(data,string); string = data; } /* OPs are comma-separated */ while (string && *string) { rpn_op * cur = NULL; char * pos = string; char * end = strchr(pos,','); int len; /* Grab op */ if (end) { *end = 0; string = end+1; len = end - pos; } else { len = strlen(string); string += len; } /* Empty op is a NOP */ if (!len) continue; /* Update linklist */ cur = malloc(sizeof(rpn_op)); memset(cur,0,sizeof(rpn_op)); if (last) { last->next = cur; } else { op = cur; } last = cur; /* Check for primitive OPs */ if (len == 1) { switch (*pos) { case '!': { cur->op = RPN_NOT; continue; } case '-': { cur->op = RPN_NEG; continue; } case '+': { cur->op = RPN_ADD; continue; } case '*': { cur->op = RPN_MUL; continue; } case '/': { cur->op = RPN_DIV; continue; } case '%': { cur->op = RPN_MOD; continue; } case '=': { cur->op = RPN_EQU; size++; continue; } case '>': { cur->op = RPN_GRE; size++; continue; } case '<': { cur->op = RPN_LES; size++; continue; } case '?': { cur->op = RPN_TST; continue; } } } /* Check for textual OPs */ if (!strcmp(pos,"pop")) { cur->op = RPN_POP; } else if (!strcmp(pos,"rand")) { cur->op = RPN_RND; size++; } else if (!strcmp(pos,"dup")) { cur->op = RPN_DUP; size++; } else if (!strcmp(pos,"swap")) { cur->op = RPN_SWP; } else if (!strcmp(pos,"set")) { cur->op = RPN_SET; } else if (!strcmp(pos,"get")) { cur->op = RPN_GET; size++; } else if (!strcmp(pos,"store")) { cur->op = RPN_STO; } else if (!strcmp(pos,"load")) { cur->op = RPN_LOD; } else if (!strcmp(pos,"end")) { cur->op = RPN_END; } else if (!strcmp(pos,"endif")) { cur->op = RPN_EIF; } else if (!strcmp(pos,"endrow")) { cur->op = RPN_ERW; } else if (!strcmp(pos,"endrowif")) { cur->op = RPN_ERI; } else if (!strcmp(pos,"return")) { cur->op = RPN_RET; } else if (!strcmp(pos,"returnif")) { cur->op = RPN_RIF; } else if (!strcmp(pos,"returnrow")) { cur->op = RPN_RRW; } else if (!strcmp(pos,"returnrowif")) { cur->op = RPN_RRI; } else if (!strcmp(pos,"if")) { cur->op = RPN_TST; } else if (!strcmp(pos,"or")) { cur->op = RPN_ADD; } else if (!strcmp(pos,"and")) { cur->op = RPN_MUL; } else if (!strcmp(pos,"inc")) { cur->op = RPN_INC; } else if (!strcmp(pos,"dec")) { cur->op = RPN_DEC; } else if (!strcmp(pos,"sum")) { cur->op = RPN_SUM; } else if (!strcmp(pos,"avg")) { cur->op = RPN_AVG; } else if (!strcmp(pos,"abs")) { cur->op = RPN_ABS; } else if (!strcmp(pos,"power")) { cur->op = RPN_POW; } else if (!strcmp(pos,"min")) { cur->op = RPN_MIN; } else if (!strcmp(pos,"max")) { cur->op = RPN_MAX; } else if (!strcmp(pos,"sin")) { cur->op = RPN_SIN; } else if (!strcmp(pos,"cos")) { cur->op = RPN_COS; } else if (!strcmp(pos,"tan")) { cur->op = RPN_TAN; } else if (!strcmp(pos,"atan2")) { cur->op = RPN_AT2; } else if (!strcmp(pos,"count")) { cur->op = RPN_CNT; size++; } else if (!strcmp(pos,"index")) { cur->op = RPN_IDX; size++; } else if (!strcmp(pos,"columns")) { cur->op = RPN_CLS; size++; } else if (!strcmp(pos,"column")) { cur->op = RPN_COL; size++; } else if (!strcmp(pos,"rows")) { cur->op = RPN_RWS; size++; } else if (!strcmp(pos,"row")) { cur->op = RPN_ROW; size++; } else if (!strcmp(pos,"pi")) { cur->op = RPN_PSH; cur->value = (float)M_PI; size++; } else if (!strcmp(pos,"dump")) { cur->op = RPN_DMP; } else if (!strcmp(pos,"floor")) { cur->op = RPN_FLR; } else if (!strcmp(pos,"colget")) { cur->op = RPN_CGT; } else if (!strcmp(pos,"colset")) { cur->op = RPN_CST; } else if (!strcmp(pos,"rowget")) { cur->op = RPN_RGT; } else if (!strcmp(pos,"rowset")) { cur->op = RPN_RST; } /* Default to a numeric push */ else { cur->op = RPN_PSH; cur->value = (float)atof(pos); size++; } } /* release string copy */ if (data) free(data); stack->data = malloc(sizeof(GLfloat)*size); stack->max_count = size; stack->ops = op; return(stack); } /* Instantiate an RPN Object */ rpn_context * rpn_init(int oga_count,oga_struct ** oga_list,int col_count,char ** col_ops) { rpn_context * ctx = NULL; int elements = 0; int i,j; if (!oga_count) croak("Missing OGA count"); if (!oga_list) croak("Missing OGA list"); if (!col_count) croak("Missing column count"); /* Validate OGAs */ for (i=0; iitem_count) croak("Empty OGA %d",i); /* Check that all OGAs have the same dimension */ if (!i) { elements = oga_list[i]->item_count; if (elements % col_count) croak("Invalid OGA size for %d columns",col_count); } else if (elements != oga_list[i]->item_count) { croak("Invalid length in OGA %d",i); } /* Only supporting GLfloat for now */ for (j=0; jtype_count; j++) { if (oga_list[i]->types[j] != GL_FLOAT) croak("Unsupported type in OGA %d",i); } } /* Alloc Object data */ ctx = malloc(sizeof(rpn_context)); if (!ctx) croak("Unable to alloc rpn context"); /* Alloc current row store */ ctx->store = malloc(sizeof(GLfloat) * col_count); if (!ctx->store) croak("Unable to alloc rpn store"); /* Alloc column stack array */ ctx->stacks = malloc(sizeof(rpn_stack *) * col_count); if (!ctx->stacks) croak("Unable to alloc rpn stacks"); ctx->cols =col_count; ctx->rows = elements / col_count; ctx->oga_count = oga_count; ctx->oga_list = oga_list; /* Parse and populate column stacks */ for (i=0; istacks[i] = rpn_parse(oga_count,col_ops[i]); return(ctx); } /* Release OP link-list */ void rpn_delete_ops(rpn_op * ops) { if (!ops) return; rpn_delete_ops(ops->next); free(ops); } /* Release OPS stack */ void rpn_delete_stack(rpn_stack * stack) { if (!stack) return; rpn_delete_ops(stack->ops); free(stack->data); free(stack); } /* Release RPN Object */ void rpn_term(rpn_context * ctx) { if (ctx) { int i; for (i=0; icols; i++) rpn_delete_stack(ctx->stacks[i]); free(ctx->stacks); free(ctx->store); free(ctx); } } /* Push an RPN value on the stack */ void rpn_push(rpn_stack * stack, GLfloat value) { if (stack){ if(stack->count == stack->max_count) croak("Trying to push past allocated rpn stack size: %d", stack->count); stack->data[stack->count++] = value; } } /* Pop an RPN value from the stack */ GLfloat rpn_pop(rpn_stack * stack) { GLfloat value = 0.0; if (stack && stack->count) { value = stack->data[--stack->count]; if (!stack->count) rpn_push(stack,0.0); } return(value); } /* Dump out the current stack */ void rpn_dump(rpn_stack * stack, int row, int col, float reg) { if (stack && stack->count) { int i; warn("-----------------(row: %d, col: %d)----\n", row, col); warn("Register: %.7f\n", reg); for (i = stack->count - 1; i >= 0 ; i--) warn("Stack %2d: %.7f\n", i, stack->data[stack->count - i - 1]); } else { warn("Empty Stack\n"); } } /* Execute RPN OPs stack */ void rpn_exec(rpn_context * ctx) { int elements = ctx->rows * ctx->cols; int i,j,k,r = 0; GLfloat v1,v2; for (i=0;irows;i++) { for (j=0;jcols;j++) { rpn_stack * stack = ctx->stacks[j]; int flow = RPNF_CONTINUE; /* or 0 */ rpn_op * ops; /* Skip for NOP columns */ if (!stack || !stack->ops) continue; stack->count = 0; /* Push oga data on stack - reverse order */ for (k=ctx->oga_count-1;k>=0;k--) rpn_push(stack,((GLfloat *)ctx->oga_list[k]->data)[r+j]); /* Process RPN ops */ ops = stack->ops; while (ops) { int pos = stack->count - 1; switch(ops->op) { case RPN_PSH: { //printf("RPN_PSH: %f\n",ops->value); rpn_push(stack,ops->value); break; } case RPN_POP: { //printf("RPN_POP\n"); rpn_pop(stack); break; } case RPN_CNT: { //printf("RPN_CNT: %f\n",elements); rpn_push(stack,(float)elements); break; } case RPN_IDX: { //printf("RPN_IDX: %f\n",r+j); rpn_push(stack,(float)r+j); break; } case RPN_CLS: { //printf("RPN_CLS: %f\n",ctx->cols); rpn_push(stack,(float)ctx->cols); break; } case RPN_COL: { //printf("RPN_COL: %f\n",j); rpn_push(stack,(float)j); break; } case RPN_RWS: { //printf("RPN_RWS: %f\n",ctx->rows); rpn_push(stack,(float)ctx->rows); break; } case RPN_ROW: { //printf("RPN_ROW: %f\n",i); rpn_push(stack,(float)i); break; } case RPN_SET: { //printf("RPN_SET %d: %f\n",j,stack->data[pos]); ctx->store[j] = stack->data[pos]; break; } case RPN_GET: { //printf("RPN_Get %d: %f\n",j,ctx->store[j]); rpn_push(stack,ctx->store[j]); break; } case RPN_STO: { //printf("RPN_STO row %d\n",r); v1 = rpn_pop(stack); k = ((int)v1) % ctx->oga_count; if (k < 0) k += ctx->oga_count; memcpy(ctx->store,&((GLfloat *)ctx->oga_list[k]->data)[r], ctx->cols*sizeof(GLfloat)); break; } case RPN_CGT: { //printf("RPN_CGT row %d\n",r); int _col = (int)rpn_pop(stack); if (_col < 0) _col = 0; if (_col > ctx->cols-1) _col = ctx->cols-1; rpn_push(stack,(float)((GLfloat *)ctx->oga_list[0]->data)[r+_col]); break; } case RPN_CST: { //printf("RPN_CST row %d\n",r); int _col = (int)rpn_pop(stack); if (_col < 0) _col = 0; if (_col > ctx->cols-1) _col = ctx->cols-1; ((GLfloat *)ctx->oga_list[0]->data)[r+_col] = stack->data[pos > 0 ? pos-1 : 0]; break; } case RPN_RGT: { //printf("RPN_RGT row %d\n",r); int _col = (int)rpn_pop(stack); int _row = (int)rpn_pop(stack); if (_row < 0) _row = 0; if (_row > ctx->rows-1) _row = ctx->rows-1; if (_col < 0) _col = 0; if (_col > ctx->cols-1) _col = ctx->cols-1; rpn_push(stack,(float)((GLfloat *)ctx->oga_list[0]->data)[_row*ctx->cols+_col]); break; } case RPN_RST: { //printf("RPN_RST row %d\n",r); int _col = (int)rpn_pop(stack); int _row = (int)rpn_pop(stack); if (_row < 0) _row = 0; if (_row > ctx->rows-1) _row = ctx->rows-1; if (_col < 0) _col = 0; if (_col > ctx->cols-1) _col = ctx->cols-1; ((GLfloat *)ctx->oga_list[0]->data)[_row*ctx->cols+_col] = stack->data[pos > 1 ? pos-2 : 0]; break; } case RPN_FLR: { //printf("RPN_FLR %d: %f\n",j,ctx->store[j]); int flr = (int)stack->data[pos]; stack->data[pos] = (float)flr; break; } case RPN_LOD: { //printf("RPN_LOD rwo %d\n",r); v1 = rpn_pop(stack); k = ((int)v1) % ctx->oga_count; if (k < 0) k += ctx->oga_count; memcpy(&((GLfloat *)ctx->oga_list[k]->data)[r],ctx->store, ctx->cols*sizeof(GLfloat)); break; } case RPN_TST: { //printf("RPN_TST\n"); v1 = rpn_pop(stack); if (v1 != 0.0) { rpn_pop(stack); } else { v1 = rpn_pop(stack); rpn_pop(stack); rpn_push(stack,v1); } break; } case RPN_NOT: { //printf("RPN_NOT\n"); if (!stack->count) { rpn_push(stack,1.0); } else if (stack->data[pos] == 0.0) { stack->data[pos] = 1.0; } else { stack->data[pos] = 0.0; } break; } case RPN_EQU: { //printf("RPN_EQU\n"); v1 = (stack->count) ? rpn_pop(stack) : (float)0.0; v2 = (stack->count) ? rpn_pop(stack) : (float)0.0; rpn_push(stack,(float)((v1 == v2) ? 1.0 : 0.0)); break; } case RPN_GRE: { //printf("RPN_GRE\n"); v1 = (stack->count) ? rpn_pop(stack) : (float)0.0; v2 = (stack->count) ? rpn_pop(stack) : (float)0.0; rpn_push(stack,(float)((v1 > v2) ? 1.0 : 0.0)); break; } case RPN_LES: { //printf("RPN_LES\n"); v1 = (stack->count) ? rpn_pop(stack) : (float)0.0; v2 = (stack->count) ? rpn_pop(stack) : (float)0.0; rpn_push(stack,(float)((v1 < v2) ? 1.0 : 0.0)); break; } case RPN_END: { //printf("RPN_END\n"); flow = RPNF_END; ops = 0; continue; } case RPN_EIF: { //printf("RPN_EIF\n"); v1 = rpn_pop(stack); if (v1 != 0.0) { flow = RPNF_END; ops = 0; continue; } break; } case RPN_ERW: { //printf("RPN_ERW\n"); flow = RPNF_ENDROW; ops = 0; continue; } case RPN_ERI: { //printf("RPN_ERI\n"); v1 = rpn_pop(stack); if (v1 != 0.0) { flow = RPNF_ENDROW; ops = 0; continue; } break; } case RPN_RET: { //printf("RPN_RET\n"); flow = RPNF_RETURN; ops = 0; continue; } case RPN_RIF: { //printf("RPN_RIF\n"); v1 = rpn_pop(stack); if (v1 != 0.0) { flow = RPNF_RETURN; ops = 0; continue; } break; } case RPN_RRW: { //printf("RPN_RRW\n"); flow = RPNF_RETURNROW; ops = 0; continue; } case RPN_RRI: { //printf("RPN_RRI\n"); v1 = rpn_pop(stack); if (v1 != 0.0) { flow = RPNF_RETURNROW; ops = 0; continue; } break; } case RPN_RND: { //printf("RPN_RND\n"); rpn_push(stack,(float)(1.0*rand()/RAND_MAX)); break; } case RPN_DUP: { //printf("RPN_DUP\n"); rpn_push(stack,stack->data[pos]); break; } case RPN_SWP: { //printf("RPN_SWP\n"); if (pos >= 1) { v1 = stack->data[pos-1]; stack->data[pos-1] = stack->data[pos]; stack->data[pos] = v1; } break; } case RPN_ABS: { //printf("RPN_ABS\n"); stack->data[pos] = (float)fabs(stack->data[pos]); break; } case RPN_NEG: { //printf("RPN_NEG\n"); stack->data[pos] *= (float)-1.0; break; } case RPN_INC: { //printf("RPN_INC\n"); stack->data[pos] += (float)1.0; break; } case RPN_DEC: { //printf("RPN_DEC\n"); stack->data[pos] -= (float)1.0; break; } case RPN_AVG: case RPN_SUM: { //printf("RPN_SUM/AVG\n"); v1 = 0; for(pos=0; poscount; pos++) v1 += stack->data[pos]; if (ops->op == RPN_AVG) v1 /= stack->count; stack->data[0] = v1; stack->count = 1; break; } case RPN_ADD: { //printf("RPN_ADD\n"); if (stack->count > 1) { v1 = rpn_pop(stack); stack->data[--pos] += v1; } break; } case RPN_MUL: { //printf("RPN_MUL\n"); if (stack->count > 1) { v1 = rpn_pop(stack); stack->data[--pos] *= v1; } break; } case RPN_DIV: { //printf("RPN_DIV\n"); if (stack->count > 1) { v1 = rpn_pop(stack); if (v1 != 0.0) stack->data[--pos] /= v1; } break; } case RPN_POW: { //printf("RPN_POW\n"); if (stack->count > 1) { v1 = rpn_pop(stack); stack->data[--pos] = (float)pow(stack->data[pos],v1); } break; } case RPN_MOD: { //printf("RPN_MOD\n"); if (stack->count > 1) { v1 = rpn_pop(stack); stack->data[--pos] = (float)fmod(stack->data[pos],v1); } break; } case RPN_MIN: { //printf("RPN_MIN\n"); if (stack->count > 1) { v1 = rpn_pop(stack); if (stack->data[--pos] > v1) stack->data[pos] = v1; } break; } case RPN_MAX: { //printf("RPN_MAX\n"); if (stack->count > 1) { v1 = rpn_pop(stack); if (stack->data[--pos] < v1) stack->data[pos] = v1; } break; } case RPN_SIN: { //printf("RPN_SIN\n"); stack->data[pos] = (float)sin(stack->data[pos]); break; } case RPN_COS: { //printf("RPN_COS\n"); stack->data[pos] = (float)cos(stack->data[pos]); break; } case RPN_TAN: { //printf("RPN_TAN\n"); stack->data[pos] = (float)tan(stack->data[pos]); break; } case RPN_AT2: { //printf("RPN_AT2\n"); v2 = rpn_pop(stack); v1 = rpn_pop(stack); if (v1 != 0.0 || v2 != 0.0) rpn_push(stack,(float)atan2(v1,v2)); break; } case RPN_DMP: { //printf("RPN_DMP\n"); rpn_dump(stack, i, j, ctx->store[j]); break; } case RPN_NOP: { //printf("RPN_NOP\n"); break; } default: { croak("Unknown RPN op: %d\n",ops->op); } } ops = ops->next; } if (!flow) { /* RPNF_CONTINUE */ ((GLfloat *)ctx->oga_list[0]->data)[r+j] = rpn_pop(stack); } else { switch(flow) { case RPNF_RETURN: { ((GLfloat *)ctx->oga_list[0]->data)[r+j] = rpn_pop(stack); break; } case RPNF_RETURNROW: { ((GLfloat *)ctx->oga_list[0]->data)[r+j] = rpn_pop(stack); j = ctx->cols; break; } case RPNF_ENDROW: { j = ctx->cols; break; } } } } r += ctx->cols; } } #endif /* End IN_POGL_RPN_XS */ MODULE = OpenGL::RPN PACKAGE = OpenGL::Array #ifdef IN_POGL_ARRAY_XS #//# $oga = OpenGL::Array->new($count, @types); #//- Contructor for multi-type OGA - unpopulated OpenGL::Array new(Class, count, type, ...) GLsizei count GLenum type CODE: { int oga_len = sizeof(oga_struct); oga_struct * oga = malloc(oga_len); int i,j; memset(oga,0,oga_len); oga->type_count = items - 2; oga->item_count = count * (items - 2); oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); for(i=0,j=0;itype_count;i++) { oga->types[i] = SvIV(ST(i+2)); oga->type_offset[i] = j; j += gl_type_size(oga->types[i]); } oga->total_types_width = j; oga->data_length = oga->total_types_width * // ((count + oga->type_count-1) / oga->type_count); # vas is das? count; oga->data = malloc(oga->data_length); memset(oga->data,0,oga->data_length); oga->free_data = 1; RETVAL = oga; } OUTPUT: RETVAL #//# $oga = OpenGL::Array->new_list($type, @data); #//- Contructor for mono-type OGA - populated OpenGL::Array new_list(Class, type, ...) GLenum type CODE: { int oga_len = sizeof(oga_struct); oga_struct * oga = malloc(oga_len); memset(oga,0,oga_len); oga->type_count = 1; oga->item_count = items - 2; oga->total_types_width = gl_type_size(type); oga->data_length = oga->total_types_width * oga->item_count; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->data = malloc(oga->data_length); oga->free_data = 1; oga->type_offset[0] = 0; oga->types[0] = type; SvItems(type,2,(GLuint)oga->item_count,oga->data); RETVAL = oga; } OUTPUT: RETVAL #//# $oga = OpenGL::Array->new_scalar($type, (PACKED)data, $length); #//- Contructor for mono-type OGA - populated by string OpenGL::Array new_scalar(Class, type, data, length) GLenum type SV * data GLsizei length CODE: { int width = gl_type_size(type); void * data_s = EL(data, width*length); int oga_len = sizeof(oga_struct); oga_struct * oga = malloc(oga_len); memset(oga,0,oga_len); oga->type_count = 1; oga->item_count = length / width; oga->total_types_width = width; oga->data_length = length; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->data = malloc(oga->data_length); oga->free_data = 1; oga->type_offset[0] = 0; oga->types[0] = type; memcpy(oga->data,data_s,oga->data_length); RETVAL = oga; } OUTPUT: RETVAL #//# $oga = OpenGL::Array->new_pointer($type, (CPTR)ptr, $elements); #//- Contructor for mono-type OGA wrapper over a C pointer OpenGL::Array new_pointer(Class, type, ptr, elements) GLenum type void * ptr GLsizei elements CODE: { int width = gl_type_size(type); int oga_len = sizeof(oga_struct); oga_struct * oga = malloc(sizeof(oga_struct)); memset(oga,0,oga_len); oga->type_count = 1; oga->item_count = elements; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->types[0] = type; oga->type_offset[0] = 0; oga->total_types_width = width; oga->data_length = elements * width; oga->data = ptr; oga->free_data = 0; RETVAL = oga; } OUTPUT: RETVAL #//# $oga = OpenGL::Array->new_from_pointer((CPTR)ptr, $length); #//- Contructor for GLubyte OGA wrapper over a C pointer OpenGL::Array new_from_pointer(Class, ptr, length) void * ptr GLsizei length CODE: { int oga_len = sizeof(oga_struct); oga_struct * oga = malloc(sizeof(oga_struct)); memset(oga,0,oga_len); oga->type_count = 1; oga->item_count = length; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->types[0] = GL_UNSIGNED_BYTE; oga->type_offset[0] = 0; oga->total_types_width = 1; oga->data_length = oga->item_count; oga->data = ptr; oga->free_data = 0; RETVAL = oga; } OUTPUT: RETVAL #//# $oga->update_pointer((CPTR)ptr); #//- Replace OGA's C pointer - old one is not released GLboolean update_pointer(oga, ptr) OpenGL::Array oga void * ptr CODE: { RETVAL = (oga->data != ptr); oga->data = ptr; } OUTPUT: RETVAL #//# $oga->bind($vboID); #//- Bind a VBO to an OGA void bind(oga, bind) OpenGL::Array oga GLint bind INIT: #ifdef GL_ARB_vertex_buffer_object loadProc(glBindBufferARB,"glBindBufferARB"); #endif CODE: { #ifdef GL_ARB_vertex_buffer_object oga->bind = bind; glBindBufferARB(GL_ARRAY_BUFFER_ARB,bind); #else croak("OpenGL::Array::bind requires GL_ARB_vertex_buffer_object"); #endif } #//# $vboID = $oga->bound(); #//- Return OGA's bound VBO ID GLint bound(oga) OpenGL::Array oga CODE: RETVAL = oga->bind; OUTPUT: RETVAL #//# $oga->calc([@(OGA)moreOGAs,]@rpnOPs); #//- Execute RPN instructions on one or more OGAs void calc(...) CODE: { rpn_context * ctx; oga_struct ** oga_list; int oga_count = 0; int ops_count,i; char ** ops; /* Determine number of OGAs passed in */ for (i=0; iassign($pos,@data); #//- Set OGA values starting from offset void assign(oga, pos, ...) OpenGL::Array oga GLint pos CODE: { int i,j; int end; GLenum t; char* offset; i = pos; end = i + items - 2; if (end > oga->item_count) end = oga->item_count; /* FIXME: is this char* conversion what is intended? */ offset = ((char*)oga->data) + (pos / oga->type_count * oga->total_types_width) + oga->type_offset[pos % oga->type_count]; j = 2; /* Handle multi-type OGAs */ for (;itypes[i % oga->type_count]; switch (t) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: (*(GLubyte*)offset) = (GLubyte)SvIV(ST(j)); offset += sizeof(GLubyte); break; case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: (*(GLushort*)offset) = (GLushort)SvIV(ST(j)); offset += sizeof(GLushort); break; case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: (*(GLuint*)offset) = (GLuint)SvIV(ST(j)); offset += sizeof(GLuint); break; #endif case GL_UNSIGNED_BYTE: case GL_BITMAP: (*(GLubyte*)offset) = (GLubyte)SvIV(ST(j)); offset += sizeof(GLubyte); break; case GL_BYTE: (*(GLbyte*)offset) = (GLbyte)SvIV(ST(j)); offset += sizeof(GLbyte); break; case GL_UNSIGNED_SHORT: (*(GLushort*)offset) = (GLushort)SvIV(ST(j)); offset += sizeof(GLushort); break; case GL_SHORT: (*(GLshort*)offset) = (GLshort)SvIV(ST(j)); offset += sizeof(GLshort); break; case GL_UNSIGNED_INT: (*(GLuint*)offset) = (GLuint)SvIV(ST(j)); offset += sizeof(GLuint); break; case GL_INT: (*(GLint*)offset) = (GLint)SvIV(ST(j)); offset += sizeof(GLint); break; case GL_FLOAT: (*(GLfloat*)offset) = (GLfloat)SvNV(ST(j)); offset += sizeof(GLfloat); break; case GL_DOUBLE: (*(GLdouble*)offset) = (GLdouble)SvNV(ST(j)); offset += sizeof(GLdouble); break; case GL_2_BYTES: { unsigned long v = (unsigned long)SvIV(ST(j)); (*(GLubyte*)offset) = (GLubyte)(v >> 8); offset++; (*(GLubyte*)offset) = (GLubyte)v & 0xff; offset++; break; } case GL_3_BYTES: { unsigned long v = (unsigned long)SvIV(ST(j)); (*(GLubyte*)offset) = (GLubyte)(v >> 16)& 0xff; offset++; (*(GLubyte*)offset) = (GLubyte)(v >> 8) & 0xff; offset++; (*(GLubyte*)offset) = (GLubyte)(v >> 0) & 0xff; offset++; break; } case GL_4_BYTES: { unsigned long v = (unsigned long)SvIV(ST(j)); (*(GLubyte*)offset) = (GLubyte)(v >> 24)& 0xff; offset++; (*(GLubyte*)offset) = (GLubyte)(v >> 16)& 0xff; offset++; (*(GLubyte*)offset) = (GLubyte)(v >> 8) & 0xff; offset++; (*(GLubyte*)offset) = (GLubyte)(v >> 0) & 0xff; offset++; break; } default: croak("unknown type"); } } } #//# $oga->assign_data($pos,(PACKED)data); #//- Set OGA values by string, starting from offset void assign_data(oga, pos, data) OpenGL::Array oga GLint pos SV * data CODE: { void * offset; void * src; STRLEN len; offset = ((char*)oga->data) + (pos / oga->type_count * oga->total_types_width) + oga->type_offset[pos % oga->type_count]; src = SvPV(data, len); memcpy(offset, src, len); } #//# @data = $oga->retrieve($pos,$len); #//- Get OGA data array, by offset and length void retrieve(oga, ...) OpenGL::Array oga PPCODE: { GLint pos = (items > 1) ? SvIV(ST(1)) : 0; GLint len = (items > 2) ? SvIV(ST(2)) : (oga->item_count - pos); char * offset; int end = pos + len; int i; offset = ((char*)oga->data) + (pos / oga->type_count * oga->total_types_width) + oga->type_offset[pos % oga->type_count]; if (end > oga->item_count) end = oga->item_count; EXTEND(sp, end-pos); i = pos; for (;itypes[i % oga->type_count]; switch (t) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: PUSHs(sv_2mortal(newSViv( (*(GLubyte*)offset) ))); offset += sizeof(GLubyte); break; case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: PUSHs(sv_2mortal(newSViv( (*(GLushort*)offset) ))); offset += sizeof(GLushort); break; case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: PUSHs(sv_2mortal(newSViv( (*(GLuint*)offset) ))); offset += sizeof(GLuint); break; #endif case GL_UNSIGNED_BYTE: case GL_BITMAP: PUSHs(sv_2mortal(newSViv( (*(GLubyte*)offset) ))); offset += sizeof(GLubyte); break; case GL_BYTE: PUSHs(sv_2mortal(newSViv( (*(GLbyte*)offset) ))); offset += sizeof(GLbyte); break; case GL_UNSIGNED_SHORT: PUSHs(sv_2mortal(newSViv( (*(GLushort*)offset) ))); offset += sizeof(GLushort); break; case GL_SHORT: PUSHs(sv_2mortal(newSViv( (*(GLshort*)offset) ))); offset += sizeof(GLshort); break; case GL_UNSIGNED_INT: PUSHs(sv_2mortal(newSViv( (*(GLuint*)offset) ))); offset += sizeof(GLuint); break; case GL_INT: PUSHs(sv_2mortal(newSViv( (*(GLint*)offset) ))); offset += sizeof(GLint); break; case GL_FLOAT: PUSHs(sv_2mortal(newSVnv( (*(GLfloat*)offset) ))); offset += sizeof(GLfloat); break; case GL_DOUBLE: PUSHs(sv_2mortal(newSVnv( (*(GLdouble*)offset) ))); offset += sizeof(GLdouble); break; case GL_2_BYTES: case GL_3_BYTES: case GL_4_BYTES: default: croak("unknown type"); } } } #//# $data = $oga->retrieve_data($pos,$len); #//- Get OGA data as packed string, by offset and length SV * retrieve_data(oga, ...) OpenGL::Array oga CODE: { GLint pos = (items > 1) ? SvIV(ST(1)) : 0; GLint len = (items > 2) ? SvIV(ST(2)) : (oga->item_count - pos); void * offset; offset = ((char*)oga->data) + (pos / oga->type_count * oga->total_types_width) + oga->type_offset[pos % oga->type_count]; RETVAL = newSVpv((char*)offset, len); } OUTPUT: RETVAL #//# $count = $oga->elements(); #//- Get number of OGA elements GLsizei elements(oga) OpenGL::Array oga CODE: RETVAL = oga->item_count; OUTPUT: RETVAL #//# $len = $oga->length(); #//- Get size of OGA in bytes GLsizei length(oga) OpenGL::Array oga CODE: RETVAL = oga->data_length; OUTPUT: RETVAL #//# (CPTR)ptr = $oga->ptr(); #//- Get C pointer to OGA data void * ptr(oga) OpenGL::Array oga CODE: RETVAL = oga->data; OUTPUT: RETVAL #//# (CPTR)ptr = $oga->offset($pos); #//- Get C pointer to OGA data, by element offset void * offset(oga, pos) OpenGL::Array oga GLint pos CODE: RETVAL = ((char*)oga->data) + (pos / oga->type_count * oga->total_types_width) + oga->type_offset[pos % oga->type_count]; OUTPUT: RETVAL #//# $oga->affine((OGA)matrix|@matrix|$scalar); #//- Perform affine transform on an OGA void affine(oga, ...) OpenGL::Array oga CODE: { GLfloat * data = (GLfloat *)oga->data; GLfloat * mat = NULL; int len = oga->item_count; int fbo_width = 0; int i,j,count,dim,cols; SV * sv = ST(1); int free_mat = 0; /* Get transform matrix OGA */ if (sv != &PL_sv_undef && sv_derived_from(sv,"OpenGL::Array")) { IV ref = SvIV((SV*)SvRV(sv)); oga_struct *oga_mat = INT2PTR(OpenGL__Array,ref); count = oga_mat->item_count; for (i=0;itype_count;i++) { if (oga_mat->types[i] != GL_FLOAT) croak("Unsupported datatype in affine matrix"); } mat = (GLfloat *)oga_mat->data; } else { count = items - 1; free_mat = 1; } if (!count) croak("No matrix values"); /* Currently only support GLfloat */ for (i=0;itype_count;i++) { if (oga->types[i] != GL_FLOAT) croak("Unsupported datatype"); } /* Scalar Multiply */ if (count == 1) { GLfloat scalar = mat ? mat[0] : (GLfloat)SvNV(ST(1)); for (i=0;idata); disable_fbo(oga); } /* Use CPU to do transform */ else #endif { int s = sizeof(GLfloat) * cols; GLfloat *vec = malloc(s); int k,r; /* Iterate each data row */ for (i=0; i < len; i+=cols) { /* Iterate each result column */ for (j=0,r=0; jaffine_handle) { glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0); glDeleteProgramsARB(1,&oga->affine_handle); } #endif #ifdef GL_EXT_framebuffer_object release_fbo(oga); #endif #endif #if 0 #ifdef GL_ARB_vertex_buffer_object if (oga->bind) { glBindBufferARB(GL_ARRAY_BUFFER_ARB,0); glDeleteBuffersARB(1,&oga->bind); } #endif #endif if (oga->free_data) { /* To make sure dangling pointers will be obvious */ memset(oga->data, '\0', oga->data_length); free(oga->data); } free(oga->types); free(oga->type_offset); free(oga); } #endif /* End IN_POGL_ARRAY_XS */ MODULE = OpenGL::RPN PACKAGE = OpenGL ##################### GLU ######################### ############################## GLUT ######################### # /* This is assigned to GLX for now. The glp*() functions should be split out */ libopengl-perl-0.6704+dfsg.orig/OpenGL.pod0000644000175000017500000011253112334200655017530 0ustar gregoagregoa =head1 NAME OpenGL - v0.6704 =head1 SYNOPSIS use OpenGL qw(:all); # exports all new functionality, without # the OpenGL-0.4 compatibility functions use OpenGL qw(:glfunctions :glconstants); # exports functions and # constants for using OpenGL, without exporting # GLU, GLUT, or GLX stuff. use OpenGL qw(:old); # Exports much old functionality of OpenGL 0.4 use OpenGL; # DEPRECATED! Same as above. DEPRECATED! See also: POGL Objects * OpenGL::Array - optimized data arrays via C pointers * OpenGL::Image - direct C pointer acces to ImageMagick image cache * OpenGL::Shader - abstracted shader interface: ARB, GLSL and Cg =head1 PREREQUISITES This module assumes that you have OpenGL, GLU, and some flavor of GLUT properly installed on your system. These will be names like libGL.so, libGLU.so and libglut.so for unixen, opengl32.dll and glu32.dll for MS Windows. If used with OpenGL::Image, use v1.03 or higher. =head1 DESCRIPTION =head2 Naming convention: Virtually all of the OpenGL 1.0, and 1.1 functions are available, and most of 1.2. In general, the calling sequence is identical in Perl as in C. Most functions that have no pointer arguments are called identically in Perl as in C, and the same name is used. Functions that use Perl array arguments and have been changed in "the obvious way" -- to take a variable number of arguments and/or to return an array -- have the the same names as their C counterparts, but with a _p suffix. All functions that take pointers are available with their original calling syntax and a _c suffix. These are most useful when combined with the OpenGL::Array module, which lets you allocate C arrays from Perl. A third variant, _s, exists for most pointer functions, and takes a string argument for each pointer or a reference to a Perl string containing packed data. The underlying OpenGL function will be passed a pointer to that data. =head2 GLUT functions done_glutInit glutAddMenuEntry glutAddSubMenu glutAttachMenu glutBitmapCharacter glutBitmapHeight glutBitmapLength glutBitmapString glutBitmapWidth glutButtonBoxFunc glutChangeToMenuEntry glutChangeToSubMenu glutCloseFunc glutCopyColormap glutCreateMenu glutCreateSubWindow glutCreateWindow glutDestroyMenu glutDestroyWindow glutDetachMenu glutDeviceGet glutDialsFunc glutDisplayFunc glutEnterGameMode glutEntryFunc glutEstablishOverlay glutExtensionSupported glutForceJoystickFunc glutFullScreen glutGameModeGet glutGameModeString glutGet glutGetColor glutGetMenu glutGetModifiers glutGetWindow glutHideOverlay glutHideWindow glutIconifyWindow glutIdleFunc glutIgnoreKeyRepeat glutInit glutInitDisplayMode glutInitDisplayString glutInitWindowPosition glutInitWindowSize glutKeyboardFunc glutKeyboardUpFunc glutLayerGet glutLeaveGameMode glutLeaveMainLoop glutMainLoop glutMainLoopEvent glutMenuDestroyFunc glutMenuStateFunc glutMenuStatusFunc glutMotionFunc glutMouseFunc glutMouseWheelFunc glutOverlayDisplayFunc glutPassiveMotionFunc glutPopWindow glutPositionWindow glutPostOverlayRedisplay glutPostRedisplay glutPostWindowOverlayRedisplay glutPostWindowRedisplay glutPushWindow glutRemoveMenuItem glutRemoveOverlay glutReportErrors glutReshapeFunc glutReshapeWindow glutSetColor glutSetCursor glutSetIconTitle glutSetKeyRepeat glutSetMenu glutSetOption glutSetWindow glutSetWindowTitle glutShowOverlay glutShowWindow glutSolidCone glutSolidCube glutSolidCylinder glutSolidDodecahedron glutSolidIcosahedron glutSolidOctahedron glutSolidRhombicDodecahedron glutSolidSphere glutSolidTeapot glutSolidTetrahedron glutSolidTorus glutSpaceballButtonFunc glutSpaceballMotionFunc glutSpaceballRotateFunc glutSpecialFunc glutSpecialUpFunc glutStrokeCharacter glutStrokeHeight glutStrokeLength glutStrokeString glutStrokeWidth glutSwapBuffers glutTabletButtonFunc glutTabletMotionFunc glutTimerFunc glutUseLayer glutVisibilityFunc glutWarpPointer glutWindowStatusFunc glutWireCone glutWireCube glutWireCylinder glutWireDodecahedron glutWireIcosahedron glutWireOctahedron glutWireRhombicDodecahedron glutWireSphere glutWireTeapot glutWireTetrahedron glutWireTorus =head2 GLU functions gluBeginCurve gluBeginPolygon gluBeginSurface gluBeginTrim gluBuild1DMipmaps_c gluBuild1DMipmaps_s gluBuild2DMipmaps_c gluBuild2DMipmaps_s gluCylinder gluDeleteNurbsRenderer gluDeleteQuadric gluDeleteTess gluDisk gluEndCurve gluEndPolygon gluEndSurface gluEndTrim gluErrorString gluGetNurbsProperty_p gluGetString gluGetTessProperty_p gluLoadSamplingMatrices_p gluLookAt gluNewNurbsRenderer gluNewQuadric gluNewTess gluNextContour gluNurbsCurve_c gluNurbsSurface_c gluOrtho2D gluPartialDisk gluPerspective gluPickMatrix_p gluProject_p gluPwlCurve_c gluQuadricDrawStyle gluQuadricNormals gluQuadricOrientation gluQuadricTexture gluScaleImage_s gluSphere gluTessBeginCountour gluTessBeginPolygon gluTessCallback gluTessEndContour gluTessEndPolygon gluTessNormal gluTessProperty gluTessVertex gluUnProject_p =head2 OpenGL functions glAccum glActiveTextureARB glAlphaFunc glAreTexturesResidentEXT_p glAreTexturesResident_c glAreTexturesResident_p glAreTexturesResident_s glArrayElement glArrayElementEXT glAttachObjectARB glBegin glBindAttribLocationARB glBindBufferARB glBindFramebufferEXT glBindProgramARB glBindRenderbufferEXT glBindTexture glBindTextureEXT glBitmap_c glBitmap_p glBitmap_s glBlendColorEXT glBlendEquationEXT glBlendFunc glBufferDataARB_c glBufferDataARB_p glBufferDataARB_s glBufferSubDataARB_c glBufferSubDataARB_p glBufferSubDataARB_s glCallList glCallLists_c glCallLists_p glCallLists_s glCheckFramebufferStatusEXT glClampColorARB glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClientActiveTextureARB glClipPlane_c glClipPlane_p glClipPlane_s glColor3b glColor3bv_c glColor3bv_p glColor3bv_s glColor3d glColor3dv_c glColor3dv_p glColor3dv_s glColor3f glColor3fv_c glColor3fv_p glColor3fv_s glColor3i glColor3iv_c glColor3iv_p glColor3iv_s glColor3s glColor3sv_c glColor3sv_p glColor3sv_s glColor3ub glColor3ubv_c glColor3ubv_p glColor3ubv_s glColor3ui glColor3uiv_c glColor3uiv_p glColor3uiv_s glColor3us glColor3usv_c glColor3usv_p glColor3usv_s glColor4b glColor4bv_c glColor4bv_p glColor4bv_s glColor4d glColor4dv_c glColor4dv_p glColor4dv_s glColor4f glColor4fv_c glColor4fv_p glColor4fv_s glColor4i glColor4iv_c glColor4iv_p glColor4iv_s glColor4s glColor4sv_c glColor4sv_p glColor4sv_s glColor4ub glColor4ubv_c glColor4ubv_p glColor4ubv_s glColor4ui glColor4uiv_c glColor4uiv_p glColor4uiv_s glColor4us glColor4usv_c glColor4usv_p glColor4usv_s glColorMask glColorMaterial glColorPointerEXT_c glColorPointerEXT_p glColorPointerEXT_s glColorPointer_c glColorPointer_p glColorPointer_s glCompileShaderARB glCopyPixels glCopyTexImage1D glCopyTexImage1DEXT glCopyTexImage2D glCopyTexImage2DEXT glCopyTexSubImage1D glCopyTexSubImage1DEXT glCopyTexSubImage2D glCopyTexSubImage2DEXT glCopyTexSubImage3D glCopyTexSubImage3DEXT glCreateProgramObjectARB glCreateShaderObjectARB glCullFace glDeleteBuffersARB_c glDeleteBuffersARB_p glDeleteBuffersARB_s glDeleteFramebuffersEXT_c glDeleteFramebuffersEXT_p glDeleteFramebuffersEXT_s glDeleteLists glDeleteObjectARB glDeleteProgramsARB_c glDeleteProgramsARB_p glDeleteProgramsARB_s glDeleteRenderbuffersEXT_c glDeleteRenderbuffersEXT_p glDeleteRenderbuffersEXT_s glDeleteTexturesEXT_p glDeleteTextures_c glDeleteTextures_p glDeleteTextures_s glDepthFunc glDepthMask glDepthRange glDetachObjectARB glDisable glDisableClientState glDisableVertexAttribArrayARB glDrawArrays glDrawArraysEXT glDrawBuffer glDrawBuffersARB_c glDrawBuffersARB_p glDrawBuffersARB_s glDrawBuffers_c glDrawBuffers_p glDrawBuffers_s glDrawElements_c glDrawElements_p glDrawElements_s glDrawPixels_c glDrawPixels_p glDrawPixels_s glDrawRangeElements_c glDrawRangeElements_p glDrawRangeElements_s glEdgeFlag glEdgeFlagPointerEXT_c glEdgeFlagPointerEXT_p glEdgeFlagPointerEXT_s glEdgeFlagPointer_c glEdgeFlagPointer_p glEdgeFlagPointer_s glEnable glEnableClientState glEnableVertexAttribArrayARB glEnd glEndList glEvalCoord1d glEvalCoord1f glEvalCoord2d glEvalCoord2f glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer_c glFeedbackBuffer_p -- not yet implemented glFeedbackBuffer_s -- not yet implemented glFinish glFlush glFogf glFogfv_c glFogfv_p glFogfv_s glFogi glFogiv_c glFogiv_p glFogiv_s glFramebufferRenderbufferEXT glFramebufferTexture1DEXT glFramebufferTexture2DEXT glFramebufferTexture3DEXT glFrontFace glFrustum glGenBuffersARB_c glGenBuffersARB_p glGenBuffersARB_s glGenFramebuffersEXT_c glGenFramebuffersEXT_p glGenFramebuffersEXT_s glGenLists glGenProgramsARB_c glGenProgramsARB_p glGenProgramsARB_s glGenRenderbuffersEXT_c glGenRenderbuffersEXT_p glGenRenderbuffersEXT_s glGenTexturesEXT_p glGenTextures_c glGenTextures_p glGenTextures_s glGenerateMipmapEXT glGetActiveAttribARB_c glGetActiveAttribARB_p glGetActiveAttribARB_s glGetActiveUniformARB_c glGetActiveUniformARB_p glGetActiveUniformARB_s glGetAttachedObjectsARB_c glGetAttachedObjectsARB_p glGetAttachedObjectsARB_s glGetAttribLocationARB_c glGetAttribLocationARB_p glGetBooleanv_c glGetBooleanv_p glGetBooleanv_s glGetBufferParameterivARB_c glGetBufferParameterivARB_p glGetBufferParameterivARB_s glGetBufferPointervARB_c glGetBufferPointervARB_p glGetBufferPointervARB_s glGetBufferSubDataARB_c glGetBufferSubDataARB_p glGetBufferSubDataARB_s glGetClipPlane_c glGetClipPlane_p glGetClipPlane_s glGetDoublev_c glGetDoublev_p glGetDoublev_s glGetError glGetFloatv_c glGetFloatv_p glGetFloatv_s glGetFramebufferAttachmentParameterivEXT_c glGetFramebufferAttachmentParameterivEXT_s glGetGLhandleARB glGetInfoLogARB_c glGetInfoLogARB_p glGetIntegerv_c glGetIntegerv_p glGetIntegerv_s glGetLightfv_c glGetLightfv_p glGetLightfv_s glGetLightiv_c glGetLightiv_p glGetLightiv_s glGetMapdv_c glGetMapdv_p glGetMapdv_s glGetMapfv_c glGetMapfv_p glGetMapfv_s glGetMapiv_c glGetMapiv_p glGetMapiv_s glGetMaterialfv_c glGetMaterialfv_p glGetMaterialfv_s glGetMaterialiv_c glGetMaterialiv_p glGetMaterialiv_s glGetObjectParameterfvARB_c glGetObjectParameterfvARB_p glGetObjectParameterfvARB_s glGetObjectParameterivARB_c glGetObjectParameterivARB_p glGetObjectParameterivARB_s glGetPixelMapfv_c glGetPixelMapfv_p glGetPixelMapfv_s glGetPixelMapuiv_c glGetPixelMapuiv_p glGetPixelMapuiv_s glGetPixelMapusv_c glGetPixelMapusv_p glGetPixelMapusv_s glGetPointerv_c glGetPointerv_p glGetPointerv_s glGetPolygonStipple_c glGetPolygonStipple_p glGetPolygonStipple_s glGetProgramEnvParameterdvARB_c glGetProgramEnvParameterdvARB_p glGetProgramEnvParameterdvARB_s glGetProgramEnvParameterfvARB_c glGetProgramEnvParameterfvARB_p glGetProgramEnvParameterfvARB_s glGetProgramLocalParameterdvARB_c glGetProgramLocalParameterdvARB_p glGetProgramLocalParameterdvARB_s glGetProgramLocalParameterfvARB_c glGetProgramLocalParameterfvARB_p glGetProgramLocalParameterfvARB_s glGetProgramStringARB_c glGetProgramStringARB_p glGetProgramStringARB_s glGetProgramivARB_c glGetProgramivARB_p glGetProgramivARB_s glGetRenderbufferParameterivEXT_c glGetRenderbufferParameterivEXT_s glGetShaderSourceARB_c glGetShaderSourceARB_p glGetString glGetTexEnvfv_c glGetTexEnvfv_p glGetTexEnvfv_s glGetTexEnviv_c glGetTexEnviv_p glGetTexEnviv_s glGetTexGendv_c glGetTexGendv_p glGetTexGendv_s glGetTexGenfv_c glGetTexGenfv_p glGetTexGenfv_s glGetTexGeniv_c glGetTexGeniv_p glGetTexGeniv_s glGetTexImage_c glGetTexImage_p glGetTexImage_s glGetTexLevelParameterfv_c glGetTexLevelParameterfv_p glGetTexLevelParameterfv_s glGetTexLevelParameteriv_c glGetTexLevelParameteriv_p glGetTexLevelParameteriv_s glGetTexParameterfv_c glGetTexParameterfv_p glGetTexParameterfv_s glGetTexParameteriv_c glGetTexParameteriv_p glGetTexParameteriv_s glGetUniformLocationARB_c glGetUniformLocationARB_p glGetUniformfvARB_c glGetUniformfvARB_p glGetUniformivARB_c glGetUniformivARB_p glGetVertexAttribPointervARB_c glGetVertexAttribdvARB_c glGetVertexAttribdvARB_p glGetVertexAttribdvARB_s glGetVertexAttribfvARB_c glGetVertexAttribfvARB_p glGetVertexAttribfvARB_s glGetVertexAttribivARB_c glGetVertexAttribivARB_p glGetVertexAttribivARB_s glHint glIndexMask glIndexPointerEXT_c glIndexPointerEXT_p glIndexPointerEXT_s glIndexPointer_c glIndexd glIndexi glInitNames glInterleavedArrays_c glIsBufferARB glIsEnabled glIsFramebufferEXT glIsList glIsProgramARB glIsRenderbufferEXT glIsTexture glIsTextureEXT glLightModelf glLightModelfv_c glLightModelfv_p glLightModelfv_s glLightModeli glLightModeliv_c glLightModeliv_p glLightModeliv_s glLightf glLightfv_c glLightfv_p glLightfv_s glLighti glLightiv_c glLightiv_p glLightiv_s glLineStipple glLineWidth glLinkProgramARB glListBase glLoadIdentity glLoadMatrixd_c glLoadMatrixd_p glLoadMatrixd_s glLoadMatrixf_c glLoadMatrixf_p glLoadMatrixf_s glLoadName glLogicOp glMap1d_c glMap1d_p glMap1d_s glMap1f_c glMap1f_p glMap1f_s glMap2d_c glMap2d_p glMap2d_s glMap2f_c glMap2f_p glMap2f_s glMapBufferARB_c glMapBufferARB_p glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv_c glMaterialfv_p glMaterialfv_s glMateriali glMaterialiv_c glMaterialiv_p glMaterialiv_s glMatrixMode glMultMatrixd_p glMultMatrixf_p glMultiTexCoord1dARB glMultiTexCoord1dvARB_c glMultiTexCoord1dvARB_c glMultiTexCoord1dvARB_c glMultiTexCoord1fARB glMultiTexCoord1fvARB_c glMultiTexCoord1fvARB_c glMultiTexCoord1fvARB_c glMultiTexCoord1iARB glMultiTexCoord1ivARB_c glMultiTexCoord1ivARB_c glMultiTexCoord1ivARB_c glMultiTexCoord1sARB glMultiTexCoord1svARB_c glMultiTexCoord1svARB_c glMultiTexCoord1svARB_c glMultiTexCoord2dARB glMultiTexCoord2dvARB_c glMultiTexCoord2dvARB_c glMultiTexCoord2dvARB_c glMultiTexCoord2fARB glMultiTexCoord2fvARB_c glMultiTexCoord2fvARB_c glMultiTexCoord2fvARB_c glMultiTexCoord2iARB glMultiTexCoord2ivARB_c glMultiTexCoord2ivARB_c glMultiTexCoord2ivARB_c glMultiTexCoord2sARB glMultiTexCoord2svARB_c glMultiTexCoord2svARB_c glMultiTexCoord2svARB_c glMultiTexCoord3dARB glMultiTexCoord3dvARB_c glMultiTexCoord3dvARB_c glMultiTexCoord3dvARB_c glMultiTexCoord3fARB glMultiTexCoord3fvARB_c glMultiTexCoord3fvARB_c glMultiTexCoord3fvARB_c glMultiTexCoord3iARB glMultiTexCoord3ivARB_c glMultiTexCoord3ivARB_c glMultiTexCoord3ivARB_c glMultiTexCoord3sARB glMultiTexCoord3svARB_c glMultiTexCoord3svARB_c glMultiTexCoord3svARB_c glMultiTexCoord4dARB glMultiTexCoord4dvARB_c glMultiTexCoord4dvARB_c glMultiTexCoord4dvARB_c glMultiTexCoord4fARB glMultiTexCoord4fvARB_c glMultiTexCoord4fvARB_c glMultiTexCoord4fvARB_c glMultiTexCoord4iARB glMultiTexCoord4ivARB_c glMultiTexCoord4ivARB_c glMultiTexCoord4ivARB_c glMultiTexCoord4sARB glMultiTexCoord4svARB_c glMultiTexCoord4svARB_c glMultiTexCoord4svARB_c glNewList glNormal3b glNormal3bv_c glNormal3bv_p glNormal3bv_s glNormal3d glNormal3dv_c glNormal3dv_p glNormal3dv_s glNormal3f glNormal3fv_c glNormal3fv_p glNormal3fv_s glNormal3i glNormal3iv_c glNormal3iv_p glNormal3iv_s glNormal3s glNormal3sv_c glNormal3sv_p glNormal3sv_s glNormalPointerEXT_c glNormalPointerEXT_p glNormalPointerEXT_s glNormalPointer_c glOrtho glPassThrough glPixelMapfv_c glPixelMapfv_p glPixelMapfv_s glPixelMapuiv_c glPixelMapuiv_p glPixelMapuiv_s glPixelMapusv_c glPixelMapusv_p glPixelMapusv_s glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointParameterfARB glPointParameterfvARB_c glPointParameterfvARB_p glPointParameterfvARB_s glPointSize glPolygonMode glPolygonOffset glPolygonOffsetEXT glPolygonStipple_c glPolygonStipple_p glPolygonStipple_s glPopAttrib glPopClientAttrib glPopMatrix glPopName glPrioritizeTexturesEXT_p glPrioritizeTextures_c glPrioritizeTextures_p glPrioritizeTextures_s glProgramEnvParameter4dARB glProgramEnvParameter4dvARB_c glProgramEnvParameter4dvARB_p glProgramEnvParameter4dvARB_s glProgramEnvParameter4fARB glProgramEnvParameter4fvARB_c glProgramEnvParameter4fvARB_p glProgramEnvParameter4fvARB_s glProgramLocalParameter4dARB glProgramLocalParameter4dvARB_c glProgramLocalParameter4dvARB_p glProgramLocalParameter4dvARB_s glProgramLocalParameter4fARB glProgramLocalParameter4fvARB_c glProgramLocalParameter4fvARB_p glProgramLocalParameter4fvARB_s glProgramStringARB_c glProgramStringARB_p glProgramStringARB_s glPushAttrib glPushClientAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv_c glRasterPos2dv_p glRasterPos2dv_s glRasterPos2f glRasterPos2fv_c glRasterPos2fv_p glRasterPos2fv_s glRasterPos2i glRasterPos2iv_c glRasterPos2iv_p glRasterPos2iv_s glRasterPos2s glRasterPos2sv_c glRasterPos2sv_p glRasterPos2sv_s glRasterPos3d glRasterPos3dv_c glRasterPos3dv_p glRasterPos3dv_s glRasterPos3f glRasterPos3fv_c glRasterPos3fv_p glRasterPos3fv_s glRasterPos3i glRasterPos3iv_c glRasterPos3iv_p glRasterPos3iv_s glRasterPos3s glRasterPos3sv_c glRasterPos3sv_p glRasterPos3sv_s glRasterPos4d glRasterPos4dv_c glRasterPos4dv_p glRasterPos4dv_s glRasterPos4f glRasterPos4fv_c glRasterPos4fv_p glRasterPos4fv_s glRasterPos4i glRasterPos4iv_c glRasterPos4iv_p glRasterPos4iv_s glRasterPos4s glRasterPos4sv_c glRasterPos4sv_p glRasterPos4sv_s glReadBuffer glReadPixels_c glReadPixels_p glReadPixels_s glRectd glRectdv_c glRectdv_s glRectf glRectfv_c glRectfv_s glRecti glRectiv_c glRectiv_s glRects glRectsv_c glRectsv_s glRenderMode glRenderbufferStorageEXT glResizeBuffersMESA glRotated glRotatef glSampleCoverageARB glScaled glScalef glScissor glSelectBuffer_c glShadeModel glShaderSourceARB_c glShaderSourceARB_p glStencilFunc glStencilMask glStencilOp glTexCoord1d glTexCoord1dv_c glTexCoord1dv_p glTexCoord1dv_s glTexCoord1f glTexCoord1fv_c glTexCoord1fv_p glTexCoord1fv_s glTexCoord1i glTexCoord1iv_c glTexCoord1iv_p glTexCoord1iv_s glTexCoord1s glTexCoord1sv_c glTexCoord1sv_p glTexCoord1sv_s glTexCoord2d glTexCoord2dv_c glTexCoord2dv_p glTexCoord2dv_s glTexCoord2f glTexCoord2fv_c glTexCoord2fv_p glTexCoord2fv_s glTexCoord2i glTexCoord2iv_c glTexCoord2iv_p glTexCoord2iv_s glTexCoord2s glTexCoord2sv_c glTexCoord2sv_p glTexCoord2sv_s glTexCoord3d glTexCoord3dv_c glTexCoord3dv_p glTexCoord3dv_s glTexCoord3f glTexCoord3fv_c glTexCoord3fv_p glTexCoord3fv_s glTexCoord3i glTexCoord3iv_c glTexCoord3iv_p glTexCoord3iv_s glTexCoord3s glTexCoord3sv_c glTexCoord3sv_p glTexCoord3sv_s glTexCoord4d glTexCoord4dv_c glTexCoord4dv_p glTexCoord4dv_s glTexCoord4f glTexCoord4fv_c glTexCoord4fv_p glTexCoord4fv_s glTexCoord4i glTexCoord4iv_c glTexCoord4iv_p glTexCoord4iv_s glTexCoord4s glTexCoord4sv_c glTexCoord4sv_p glTexCoord4sv_s glTexCoordPointerEXT_c glTexCoordPointerEXT_p glTexCoordPointerEXT_s glTexCoordPointer_c glTexEnvf glTexEnvfv_p glTexEnvfv_s glTexEnvi glTexEnviv_p glTexEnviv_s glTexGend glTexGendv_c glTexGendv_p glTexGendv_s glTexGenf glTexGenfv_c glTexGenfv_p glTexGenfv_s glTexGeni glTexGeniv_c glTexGeniv_p glTexGeniv_s glTexImage1D_c glTexImage1D_p glTexImage1D_s glTexImage2D_c glTexImage2D_p glTexImage2D_s glTexImage3DEXT_c glTexImage3DEXT_p glTexImage3DEXT_s glTexImage3D_c glTexImage3D_p glTexImage3D_s glTexParameterf glTexParameterfv_c glTexParameterfv_p glTexParameterfv_s glTexParameteri glTexParameteriv_c glTexParameteriv_p glTexParameteriv_s glTexSubImage1DEXT_c glTexSubImage1DEXT_p glTexSubImage1DEXT_s glTexSubImage1D_c glTexSubImage1D_p glTexSubImage1D_s glTexSubImage2DEXT_c glTexSubImage2DEXT_p glTexSubImage2DEXT_s glTexSubImage2D_c glTexSubImage2D_p glTexSubImage2D_s glTexSubImage3D_c glTexSubImage3D_p glTexSubImage3D_s glTranslated glTranslatef glUniform1fARB glUniform1fvARB_c glUniform1fvARB_p glUniform1fvARB_s glUniform1iARB glUniform1ivARB_c glUniform1ivARB_p glUniform1ivARB_s glUniform2fARB glUniform2fvARB_c glUniform2fvARB_p glUniform2fvARB_s glUniform2iARB glUniform2ivARB_c glUniform2ivARB_p glUniform2ivARB_s glUniform3fARB glUniform3fvARB_c glUniform3fvARB_p glUniform3fvARB_s glUniform3iARB glUniform3ivARB_c glUniform3ivARB_p glUniform3ivARB_s glUniform4fARB glUniform4fvARB_c glUniform4fvARB_p glUniform4fvARB_s glUniform4iARB glUniform4ivARB_c glUniform4ivARB_p glUniform4ivARB_s glUniformMatrix2fvARB_c glUniformMatrix2fvARB_p glUniformMatrix2fvARB_s glUniformMatrix3fvARB_c glUniformMatrix3fvARB_p glUniformMatrix3fvARB_s glUniformMatrix4fvARB_c glUniformMatrix4fvARB_p glUniformMatrix4fvARB_s glUnmapBufferARB glUseProgramObjectARB glValidateProgramARB glVertex2d glVertex2dv_c glVertex2dv_p glVertex2dv_s glVertex2f glVertex2fv_c glVertex2fv_p glVertex2fv_s glVertex2i glVertex2iv_c glVertex2iv_p glVertex2iv_s glVertex2s glVertex2sv_c glVertex2sv_p glVertex2sv_s glVertex3d glVertex3dv_c glVertex3dv_p glVertex3dv_s glVertex3f glVertex3fv_c glVertex3fv_p glVertex3fv_s glVertex3i glVertex3iv_c glVertex3iv_p glVertex3iv_s glVertex3s glVertex3sv_c glVertex3sv_p glVertex3sv_s glVertex4d glVertex4dv_c glVertex4dv_p glVertex4dv_s glVertex4f glVertex4fv_c glVertex4fv_p glVertex4fv_s glVertex4i glVertex4iv_c glVertex4iv_p glVertex4iv_s glVertex4s glVertex4sv_c glVertex4sv_p glVertex4sv_s glVertexAttrib1dARB glVertexAttrib1dvARB_c glVertexAttrib1dvARB_p glVertexAttrib1dvARB_s glVertexAttrib1fARB glVertexAttrib1fvARB_c glVertexAttrib1fvARB_p glVertexAttrib1fvARB_s glVertexAttrib1sARB glVertexAttrib1svARB_c glVertexAttrib1svARB_p glVertexAttrib1svARB_s glVertexAttrib2dARB glVertexAttrib2dvARB_c glVertexAttrib2dvARB_p glVertexAttrib2dvARB_s glVertexAttrib2fARB glVertexAttrib2fvARB_c glVertexAttrib2fvARB_p glVertexAttrib2fvARB_s glVertexAttrib2sARB glVertexAttrib2svARB_c glVertexAttrib2svARB_p glVertexAttrib2svARB_s glVertexAttrib3dARB glVertexAttrib3dvARB_c glVertexAttrib3dvARB_p glVertexAttrib3dvARB_s glVertexAttrib3fARB glVertexAttrib3fvARB_c glVertexAttrib3fvARB_p glVertexAttrib3fvARB_s glVertexAttrib3sARB glVertexAttrib3svARB_c glVertexAttrib3svARB_p glVertexAttrib3svARB_s glVertexAttrib4NbvARB_c glVertexAttrib4NbvARB_p glVertexAttrib4NbvARB_s glVertexAttrib4NivARB_c glVertexAttrib4NivARB_p glVertexAttrib4NivARB_s glVertexAttrib4NsvARB_c glVertexAttrib4NsvARB_p glVertexAttrib4NsvARB_s glVertexAttrib4NubARB glVertexAttrib4NubvARB_c glVertexAttrib4NubvARB_p glVertexAttrib4NubvARB_s glVertexAttrib4NuivARB_c glVertexAttrib4NuivARB_p glVertexAttrib4NuivARB_s glVertexAttrib4NusvARB_c glVertexAttrib4NusvARB_p glVertexAttrib4NusvARB_s glVertexAttrib4bvARB_c glVertexAttrib4bvARB_p glVertexAttrib4bvARB_s glVertexAttrib4dARB glVertexAttrib4dvARB_c glVertexAttrib4dvARB_p glVertexAttrib4dvARB_s glVertexAttrib4fARB glVertexAttrib4fvARB_c glVertexAttrib4fvARB_p glVertexAttrib4fvARB_s glVertexAttrib4ivARB_c glVertexAttrib4ivARB_p glVertexAttrib4ivARB_s glVertexAttrib4sARB glVertexAttrib4svARB_c glVertexAttrib4svARB_p glVertexAttrib4svARB_s glVertexAttrib4ubvARB_c glVertexAttrib4ubvARB_p glVertexAttrib4ubvARB_s glVertexAttrib4uivARB_c glVertexAttrib4uivARB_p glVertexAttrib4uivARB_s glVertexAttrib4usvARB_c glVertexAttrib4usvARB_p glVertexAttrib4usvARB_s glVertexAttribPointerARB_c glVertexPointerEXT_c glVertexPointerEXT_p glVertexPointerEXT_s glVertexPointer_c glVertexPointer_p glVertexPointer_s glViewport glWindowPos2dMESA glWindowPos2iMESA glWindowPos3dMESA glWindowPos3iMESA glWindowPos4dMESA glWindowPos4iMESA glpCheckExtension glpFullScreen glpHasGLUT glpRestoreScreen =head2 GLX functions GLX is only supported to the degree that Stan's original module supported it. Without an entire X binding it is of limited use, and I recommend using GLUT/FreeGLUT instead. XPending (X11 only) glXSwapBuffers (X11 only) glpXNextEvent (X11 only) glpXQueryPointer (X11 only) glpcOpenWindow (Not exported, must use fully qualified package name) =head2 Old functions AlreadyGrabbed AnyModifier AsyncBoth AsyncKeyboard AsyncPointer Button1 Button1Mask Button1MotionMask Button2 Button2Mask Button2MotionMask Button3 Button3Mask Button3MotionMask Button4 Button4Mask Button4MotionMask Button5 Button5Mask Button5MotionMask ButtonMotionMask ButtonPress ButtonPressMask ButtonRelease ButtonReleaseMask CirculateNotify CirculateRequest ClientMessage ColormapChangeMask ColormapInstalled ColormapNotify ColormapUninstalled ConfigureNotify ConfigureRequest ControlMapIndex ControlMask CreateNotify DestroyNotify DirectColor EnterNotify EnterWindowMask Expose ExposureMask FamilyChaos FamilyDECnet FamilyInternet FocusChangeMask FocusIn FocusOut GrabFrozen GrabInvalidTime GrabModeAsync GrabModeSync GrabNotViewable GrabSuccess GraphicsExpose GravityNotify GrayScale KeyPress KeyPressMask KeyRelease KeyReleaseMask KeymapNotify KeymapStateMask LASTEvent LeaveNotify LeaveWindowMask LockMapIndex LockMask MapNotify MapRequest MappingNotify Mod1MapIndex Mod1Mask Mod2MapIndex Mod2Mask Mod3MapIndex Mod3Mask Mod4MapIndex Mod4Mask Mod5MapIndex Mod5Mask MotionNotify NoEventMask NoExpose NotifyAncestor NotifyDetailNone NotifyGrab NotifyHint NotifyInferior NotifyNonlinear NotifyNonlinearVirtual NotifyNormal NotifyPointer NotifyPointerRoot NotifyUngrab NotifyVirtual NotifyWhileGrabbed OwnerGrabButtonMask PlaceOnBottom PlaceOnTop PointerMotionHintMask PointerMotionMask PropertyChangeMask PropertyDelete PropertyNewValue PropertyNotify PseudoColor ReparentNotify ReplayKeyboard ReplayPointer ResizeRedirectMask ResizeRequest SelectionClear SelectionNotify SelectionRequest ShiftMapIndex ShiftMask StaticColor StaticGray StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask SyncBoth SyncKeyboard SyncPointer TrueColor UnmapNotify VisibilityChangeMask VisibilityFullyObscured VisibilityNotify VisibilityPartiallyObscured VisibilityUnobscured XPending X_PROTOCOL X_PROTOCOL_REVISION glAccum glAlphaFunc glBegin glBitmap glBlendColorEXT glBlendEquationEXT glBlendFunc glCallList glCallLists glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane glColor3b glColor3bv glColor3d glColor3dv glColor3f glColor3fv glColor3i glColor3iv glColor3s glColor3sv glColor3ub glColor3ubv glColor3ui glColor3uiv glColor3us glColor3usv glColor4b glColor4bv glColor4d glColor4dv glColor4f glColor4fv glColor4i glColor4iv glColor4s glColor4sv glColor4ub glColor4ubv glColor4ui glColor4uiv glColor4us glColor4usv glColorMask glColorMaterial glConvolutionFilter1DEXT glConvolutionFilter2DEXT glConvolutionParameterfEXT glConvolutionParameterfvEXT glConvolutionParameteriEXT glConvolutionParameterivEXT glCopyConvolutionFilter1DEXT glCopyConvolutionFilter2DEXT glCopyPixels glCullFace glDeleteLists glDepthFunc glDepthMask glDepthRange glDetailTexFuncSGIS glDisable glDrawBuffer glDrawPixels glEdgeFlag glEdgeFlagv glEnable glEnd glEndList glEvalCoord1d glEvalCoord1dv glEvalCoord1f glEvalCoord1fv glEvalCoord2d glEvalCoord2dv glEvalCoord2f glEvalCoord2fv glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer glFinish glFlush glFogf glFogfv glFogi glFogiv glFrontFace glFrustum glGenLists glGetBooleanv glGetClipPlane glGetConvolutionFilterEXT glGetConvolutionParameterfvEXT glGetConvolutionParameterivEXT glGetDetailTexFuncSGIS glGetDoublev glGetError glGetFloatv glGetHistogramEXT glGetHistogramParameterfvEXT glGetHistogramParameterivEXT glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetMinmaxEXT glGetMinmaxParameterfvEXT glGetMinmaxParameterivEXT glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPolygonStipple glGetSeparableFilterEXT glGetSharpenTexFuncSGIS glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glHint glHistogramEXT glIndexMask glIndexd glIndexdv glIndexf glIndexfv glIndexi glIndexiv glIndexs glIndexsv glInitNames glIsEnabled glIsList glLightModelf glLightModelfv glLightModeli glLightModeliv glLightf glLightfv glLighti glLightiv glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd glLoadMatrixf glLoadName glLogicOp glMap1d glMap1f glMap2d glMap2f glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv glMateriali glMaterialiv glMatrixMode glMinmaxEXT glMultMatrixd glMultMatrixf glNewList glNormal3b glNormal3bv glNormal3d glNormal3dv glNormal3f glNormal3fv glNormal3i glNormal3iv glNormal3s glNormal3sv glOrtho glPassThrough glPixelMapfv glPixelMapuiv glPixelMapusv glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffsetEXT glPolygonStipple glPopAttrib glPopMatrix glPopName glPushAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv glRasterPos2f glRasterPos2fv glRasterPos2i glRasterPos2iv glRasterPos2s glRasterPos2sv glRasterPos3d glRasterPos3dv glRasterPos3f glRasterPos3fv glRasterPos3i glRasterPos3iv glRasterPos3s glRasterPos3sv glRasterPos4d glRasterPos4dv glRasterPos4f glRasterPos4fv glRasterPos4i glRasterPos4iv glRasterPos4s glRasterPos4sv glReadBuffer glReadPixels glRectd glRectdv glRectf glRectfv glRecti glRectiv glRects glRectsv glRenderMode glResetHistogramEXT glResetMinmaxEXT glRotated glRotatef glSampleMaskSGIS glSamplePatternSGIS glScaled glScalef glScissor glSelectBuffer glSeparableFilter2DEXT glShadeModel glSharpenTexFuncSGIS glStencilFunc glStencilMask glStencilOp glTagSampleBufferSGIX glTexCoord1d glTexCoord1dv glTexCoord1f glTexCoord1fv glTexCoord1i glTexCoord1iv glTexCoord1s glTexCoord1sv glTexCoord2d glTexCoord2dv glTexCoord2f glTexCoord2fv glTexCoord2i glTexCoord2iv glTexCoord2s glTexCoord2sv glTexCoord3d glTexCoord3dv glTexCoord3f glTexCoord3fv glTexCoord3i glTexCoord3iv glTexCoord3s glTexCoord3sv glTexCoord4d glTexCoord4dv glTexCoord4f glTexCoord4fv glTexCoord4i glTexCoord4iv glTexCoord4s glTexCoord4sv glTexEnvf glTexEnvfv glTexEnvi glTexEnviv glTexGend glTexGendv glTexGenf glTexGenfv glTexGeni glTexGeniv glTexImage1D glTexImage2D glTexImage3DEXT glTexParameterf glTexParameterfv glTexParameteri glTexParameteriv glTexSubImage1DEXT glTexSubImage2DEXT glTexSubImage3DEXT glTranslated glTranslatef glVertex2d glVertex2dv glVertex2f glVertex2fv glVertex2i glVertex2iv glVertex2s glVertex2sv glVertex3d glVertex3dv glVertex3f glVertex3fv glVertex3i glVertex3iv glVertex3s glVertex3sv glVertex4d glVertex4dv glVertex4f glVertex4fv glVertex4i glVertex4iv glVertex4s glVertex4sv glViewport glXSwapBuffers (X11 only) gluLookAt gluOrtho2D gluPerspective =head2 "Perl" GL access shortcuts glpClipPlane glpDisplay (X11 only) glpFlush glpFullScreen glpGetClipPlane glpLoadMatrixd glpLoadMatrixf glpMainLoop glpMoveResizeWindow (X11 only) glpMoveWindow (X11 only) glpMultMatrixd glpMultMatrixf glpOpenWindow (X11 only) glpPrintString (from PDL) glpRasterFont (from PDL, X11 only) glpReadTex glpResizeWindow (X11 only) glpRestoreScreen glpSetDebug (from PDL) glpSolidSphere glpXNextEvent (X11 only) glpXQueryPointer (X11 only) glpOpenWindow() provides the preferred interface to glpcOpenWindow(). Both these functions have a special (mis)feature to handle cases when one does not need double buffering: if no GLX_DOUBLEBUFFER is specified, I creation of a "visual" fails, the creation is retried I GLX_DOUBLEBUFFER specified (to make it easier to support implementation which do not have SINGLEBUFFER visuals - which is typical on Suns). Since "finishing drawing" with and without GLX_DOUBLEBUFFER should be done in different ways, a convenience function glpFlush() is provided; it operates the same as glFlush() if no enable-GLX_DOUBLEBUFFER hack was need, otherwise it acts as glFlush() followed by glXSwapBuffers(). This function should be used only in the case no GLX_DOUBLEBUFFER attribute was given to glpOpenWindow(). Additionally, in absence of GLUT, glpSolidSphere() is aliased to glutSolidSphere(), to make writing simple portable backward-compatible scripts easier. =head1 Historical Compatibility The original OpenGL-0.4 library, written by Stan Melax, was releaseed to CPAN on 16-Feb-1996. The OpenGL-0.5 library, by Kenneth Albanowski, was released to CPAN on 24-Apr-1999. Ilya Zakharevich released OpenGL-0.53 on 05-Nov-2000 and and OpenGL-0.54 on 26-May-2002. Bob Free has been responsible for the OpenGL module development starting with OpenGL-0.55 on 26-Apr-2007. Chris Marshall has been responsible for the OpenGL module development starting with OpenGL-0.58 on 06-Sep-2009. Compatibility with these earlier libraries is in a state of flux with with on-going work to refactor the Perl OpenGL module to improve support for other GUI toolkits with Perl bindings and to update the version of OpenGL API supported. =head1 EXPORTS The following tags can be used to selectively import symbols into the main namespace. =over =item :all Exports all symbols (constants and functions). =item :functions Exports all functions. =item :constants Exports all constants. =item :glfunctions Exports all B functions. =item :glconstants Exports all symbols needed for the B functions. =item :glufunctions Exports all B functions. =item :gluconstants Exports all symbols needed for the B functions. =item :glutfunctions Exports all B functions. =item :glutconstants Exports all symbols needed for the B functions. =item :glxfunctions Exports all B functions. No longer exports C. =item :glxconstants Exports all symbols needed for the B functions. =item :old Exports all old functions and constants. =item :oldfunctions Exports all old functions. =item :oldconstants Exports all symbols needed for the old functions. =back =head1 AUTHORS Primary OpenGL Maintainer Chris Marshall (PAUSE id CHM) Co-Maintainer: Bob "grafman" Free - http://graphcomp.com/opengl Original Author: Stan Melax Primary author of 0.50: Kenneth Albanowski; derived from Stan's OpenGL 0.4, with pinches of Cass Everitt's OpenGL work. Copyright (c) 1998,1999 Kenneth Albanowski. All rights reserved. Copyright (c) 2000 Ilya Zakharevich. All rights reserved. Windows port: Jean-Louis Morel - http://www.bribes.org/perl/wopengl.html Primary author of 0.55+: Bob Free; added support for 52 OpenGL extensions, including FBO, VBO and Vertex/Fragment Programs. Copyright (c) 2007 Bob Free. All rights reserved. Contributing developer of 0.57+: Chris Marshall: cygwin port, PDL integration, release support. Copyright (c) 2009 Christopher Marshall. All rights reserved. MacOSX port: Sherm Pendley FreeBSD support: Nomura-san This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 DISTRIBUTIONS POGL Project site: L =head1 OTHER DOCUMENTATION Documentation, tips, sample source, benchmarks and available at L. =head2 SOURCE CPAN: http://search.cpan.org/~chm/ GIT: git clone git://git.code.sf.net/p/pogl/code pogl-code (Read only) TARBALL: http://sourceforge.net/p/pogl/code/ci/master/tarball =head2 WINDOWS BINARIES For 32-bit perls 5.8.x and later: ppm install http://www.sisyphusion.tk/ppm/OpenGL.ppd For 64-bit perls 5.8.x and later: ppm install http://www.sisyphusion.tk/ppm/OpenGL.ppd libopengl-perl-0.6704+dfsg.orig/COPYRIGHT0000644000175000017500000000712712334200655017177 0ustar gregoagregoa Copyright (c) 1998,1999 Kenneth Albanowski. All rights reserved. Copyright (c) 2007 Bob Free. All rights reserved. Copyright (c) 2009-2013 Chris Marshall. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Some portions of this module, including some code sections in OpenGL.pm and OpenGL.xs (marked by "Melax" comments) are Copyright Stan Melax, as are the files in the example/ directory. This is Stan's original COPYRIGHT message for those works: (c) Copyright 1995, Stan Melax, ALL RIGHTS RESERVED Stan Melax Alberta Research Council stan@arc.ab.ca http://www.arc.ab.ca/~stan Please feel free to give me acknowledgement/credit/money/honorable-mention/job-offers/research-funding wherever or whenever appropriate :-) Permission to copy, modify is granted provided that you include the above copyright notice with it. This software is provided as is, and comes with no promises or guarantees. You may only use it if you promise not to sue me or my employer for anything relating to the use of this software :-) OpenGL is a trademark of Silicon Graphics Inc. Special thanks to: Tim Bunce Brian Paul Karl Glazebrook http://www.ast.cam.ac.uk/~kgb The Alberta Research Council Feel free to email me your name so I can add it to the above list. Acknowledgement and credit for those where acknowledgement and credit is warrented ... yadda , yadda .... bla ... bla ... Some of these examples in the "examples" subdirectory are adapted from the OpenGL Programming Guide. Here's the copyright that was attached to the examples from "OpenGL Programming Guide" by Neider, Davis, and Woo, and published by Addison Wesley: /* * (c) Copyright 1993, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ libopengl-perl-0.6704+dfsg.orig/MANIFEST0000644000175000017500000000327012521223650017026 0ustar gregoagregoaArray.pod CHANGES COPYRIGHT examples/clip.pl examples/cube.pl examples/depth.pl examples/double.pl examples/fun.pl examples/glu_test.pl examples/glxgears.pl examples/light.pl examples/plane.pl examples/planets.pl examples/quest.pl examples/README examples/simple.pl examples/smooth.pl examples/spaceship.nff examples/stan.ppm examples/tessellation.pl examples/texhack.pl examples/texture.pl examples/tk_demo.pl examples/tk_steal.pl examples/try.pl examples/with-glut.txt examples/with-glx.txt examples/wolf.bin fragment.arb fragment.cg fragment.glsl genvars.pl gl_const.h gl_util.c gl_util.h glu_const.h glu_util.h glut_const.h glut_util.h glx_const.h glx_util.h INSTALL isosurf.bin isosurf.pl KNOWN_PROBLEMS Makefile.PL MANIFEST This list of files MANIFEST.SKIP menutest.pl oga.pl OpenGL.pm OpenGL.pod OpenGL.xs os2pm_X.h pgopogl.h pgopogl.xs pogl_const.xs pogl_gl_Accu_GetM.xs pogl_gl_GetP_Pass.xs pogl_gl_Mult_Prog.xs pogl_gl_Pixe_Ver2.xs pogl_gl_Prog_Clam.xs pogl_gl_Tex2_Draw.xs pogl_gl_top.xs pogl_gl_Ver3_Tex1.xs pogl_gl_Vert_Multi.xs pogl_glu.xs pogl_glut.xs pogl_rpn.xs ppport.h README Release_Notes SUPPORTS t/00_require.t t/01_use.t t/10_opengl_array.t Tessellation.pod test.jpg test.pl test.tga TODO typemap utils/cleanup.pl utils/const.pl utils/exports.pl utils/exports.txt utils/glext_procs.pl utils/glversion.c utils/hdr_diff.pl utils/Makefile utils/Makefile.cygwin utils/Makefile.macosx utils/makefile.mak utils/makefile.mingw utils/mingw.bat utils/opengl32.txt utils/strawberry.bat utils/wgl_ext.txt vertex.arb vertex.cg vertex.glsl META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) libopengl-perl-0.6704+dfsg.orig/oga.pl0000644000175000017500000000635612334200655017012 0ustar gregoagregoa#!/usr/bin/perl -w use strict; # Sample/Test app for OpenGL::Array functions # by Bob "grafman" Free # http://graphcomp.com/opengl use OpenGL qw/ :all /; #use OpenGL::Image; #use OpenGL::Shader; use Time::HiRes qw( gettimeofday ); use constant PROGRAM_TITLE => "OpenGL::ARRAY Test App"; # Window vars my $Window_ID; # Vertex Buffer Object data my($VertexObjID); my @verts = ( -1.0, -1.3, -1.0, 1.0, -1.3, -1.0, 1.0, -1.3, 1.0, -1.0, -1.3, 1.0, -1.0, 1.3, -1.0, -1.0, 1.3, 1.0, 1.0, 1.3, 1.0, 1.0, 1.3, -1.0, -1.0, -1.0, -1.3, -1.0, 1.0, -1.3, 1.0, 1.0, -1.3, 1.0, -1.0, -1.3, 1.3, -1.0, -1.0, 1.3, 1.0, -1.0, 1.3, 1.0, 1.0, 1.3, -1.0, 1.0, -1.0, -1.0, 1.3, 1.0, -1.0, 1.3, 1.0, 1.0, 1.3, -1.0, 1.0, 1.3, -1.3, -1.0, -1.0, -1.3, -1.0, 1.0, -1.3, 1.0, 1.0, -1.3, 1.0, -1.0 ); @verts = ( 0.0, 0.1, 0.2, 1.0, 1.1, 1.2, 2.0, 2.1, 2.2, 3.0, 3.1, 3.2, 10.0, 10.1, 10.2, 11.0, 11.1, 11.2, 12.0, 12.1, 12.2, 13.0, 13.1, 13.2, 20.0, 20.1, 20.2, 21.0, 21.1, 21.2, 22.0, 22.1, 22.2, 13.0, 23.1, 23.2, 30.0, 30.1, 30.2, 31.0, 31.1, 31.2, 32.0, 32.1, 32.2, 33.0, 33.1, 33.2, 40.0, 40.1, 40.2, 41.0, 41.1, 41.2, 42.0, 42.1, 42.2, 43.0, 43.1, 43.2, 50.0, 50.1, 50.2, 51.0, 51.1, 51.2, 52.0, 52.1, 52.2, 53.0, 53.1, 53.2 ); my @xform = ( 1.0, 0.0, 0.0, 1.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 2.0, 1.0, 0.0, 0.0, 0.0, 1.0 ); my $xform = OpenGL::Array->new_list(GL_FLOAT,@xform); # ------ # The main() function. Inits OpenGL. Calls our own init function, # then passes control onto OpenGL. glutInit(); # To see OpenGL drawing, take out the GLUT_DOUBLE request. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA); glutInitWindowSize(1,1); # Open a window $Window_ID = glutCreateWindow( PROGRAM_TITLE ); glutHideWindow(); # Test for GPGPU support print "Has GPGPU Support: ".OpenGL::glpHasGPGPU()."\n"; # Tests my $loops = 2; my $vertices = 4; my $print_verts = $vertices < 5; my($i,$start,$secs); print "Initial data:\n"; print "Loops: $loops, Vertices: $vertices\n"; my $verts = init_verts($vertices); print_verts($verts,$vertices) if ($print_verts); $start = gettimeofday(); for ($i=0;$i<$loops;$i++) { $verts->calc('1,+','3,*','2,*,1,+'); } $secs = (gettimeofday()-$start)/$loops; my $vps_calc = int($vertices/$secs); print "Calc VPS: $vps_calc\n"; print_verts($verts,$vertices) if ($print_verts); $verts = init_verts($vertices); $start = gettimeofday(); for ($i=0;$i<$loops;$i++) { $verts->affine($xform); } $secs = (gettimeofday()-$start)/$loops; my $vps_gpu = int($vertices/$secs); print "Affine VPS: $vps_gpu\n"; print_verts($verts,$vertices) if ($print_verts); # Destroy window glutDestroyWindow($Window_ID); exit 0; sub init_verts { my($count) = @_; my @verts = (); for (my $i=0;$i<$count;$i++) { push(@verts,"$i.0","$i.1","$i.2"); } my $verts = OpenGL::Array->new_list(GL_FLOAT,@verts); die "new_list failed to return an OGA\n" if (!$verts); return $verts; } sub print_verts { my($verts,$vertices) = @_; my $len = $vertices * 3; for(my $i=0;$i<$len;$i+=3) { my($x,$y,$z) = $verts->retrieve($i,3); printf("%8.3f,%8.3f,%8.3f\n",$x,$y,$z); } print "\n"; } __END__ libopengl-perl-0.6704+dfsg.orig/glx_util.h0000644000175000017500000000002412334200655017671 0ustar gregoagregoa#include libopengl-perl-0.6704+dfsg.orig/pogl_glu.xs0000644000175000017500000010171312444362012020062 0ustar gregoagregoa/* Last saved: Wed 17 Dec 2014 03:14:02 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * Copyright (c) 2011 Paul Seamons. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLU bindings */ #define IN_POGL_GLU_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" #endif #ifdef HAVE_GLX #include "glx_util.h" #endif #ifdef HAVE_GLU #include "glu_util.h" #endif #ifdef IN_POGL_GLU_XS #ifndef CALLBACK #define CALLBACK #endif struct PGLUtess { GLUtesselator * triangulator; #ifdef GLU_VERSION_1_2 SV * begin_callback; SV * edgeFlag_callback; SV * vertex_callback; SV * end_callback; SV * error_callback; SV * combine_callback; #endif bool do_colors; bool do_normals; bool use_vertex_data; GLdouble * vertex_data; /* used during non-GLU_TESS_VERTEX_DATA */ SV * polygon_data; AV * vertex_datas; AV * tess_datas; }; typedef struct PGLUtess PGLUtess; #define delete_vertex_datas() \ if (tess->vertex_datas) { \ AV * vds = tess->vertex_datas; \ SV** svp; \ I32 i; \ for (i=0; i<=av_len(vds); i++) { \ svp = av_fetch(vds, i, FALSE); \ free(INT2PTR(GLdouble*, SvIV(*svp))); \ } \ SvREFCNT_dec(tess->vertex_datas); \ tess->vertex_datas = 0; \ } #define delete_tess_datas() \ if (tess->tess_datas) { \ AV * tds = tess->tess_datas; \ SV** svp; \ I32 i; \ for (i=0; i<=av_len(tds); i++) { \ svp = av_fetch(tds, i, FALSE); \ free(INT2PTR(PGLUtess*, SvIV(*svp))); \ } \ SvREFCNT_dec(tess->tess_datas); \ tess->tess_datas = 0; \ } #define delete_polygon_data() \ if (tess->polygon_data) { \ SvREFCNT_dec(tess->polygon_data); \ tess->polygon_data = 0; \ } #ifdef GLU_VERSION_1_2 /* Begin a named callback handler */ #define begin_tess_marshaller(name, type, params, croak_msg, default_handler) \ void CALLBACK _s_marshal_glu_t_callback_ ## name params \ { \ dSP; \ int i; int j = 3; \ PGLUtess * t = (PGLUtess*)gl_polygon_data; \ SV * handler = t-> type ## _callback; \ if (!handler) croak(croak_msg); \ if (! SvROK(handler)) { /* default */ \ default_handler; \ return; \ } \ PUSHMARK(sp); /* End a gluTess callback handler */ #define end_tess_marshaller() \ PUTBACK; \ perl_call_sv(handler, G_DISCARD); \ } /* Declare gluTess BEGIN */ begin_tess_marshaller(begin, begin, (GLenum type, void * gl_polygon_data), "Missing tess callback for begin", glBegin(type)) XPUSHs(sv_2mortal(newSViv(type))); end_tess_marshaller() /* Declare gluTess BEGIN_DATA */ begin_tess_marshaller(begin_data, begin, (GLenum type, void * gl_polygon_data), "Missing tess callback for begin_data", glBegin(type)) XPUSHs(sv_2mortal(newSViv(type))); if (t->polygon_data) XPUSHs((SV*)t->polygon_data); end_tess_marshaller() /* Declare gluTess END */ begin_tess_marshaller(end, end, (void * gl_polygon_data), "Missing tess callback for end", glEnd()) end_tess_marshaller() /* Declare gluTess END_DATA */ begin_tess_marshaller(end_data, end, (void * gl_polygon_data), "Missing tess callback for end_data", glEnd()) if (t->polygon_data) XPUSHs((SV*)t->polygon_data); end_tess_marshaller() /* Declare gluTess EDGEFLAG */ begin_tess_marshaller(edgeFlag, edgeFlag, (GLboolean flag, void * gl_polygon_data), "Missing tess callback for edgeFlag", glEdgeFlag(flag)) XPUSHs(sv_2mortal(newSViv(flag))); end_tess_marshaller() /* Declare gluTess EDGEFLAG_DATA */ begin_tess_marshaller(edgeFlag_data, edgeFlag, (GLboolean flag, void * gl_polygon_data), "Missing tess callback for edgeFlag_data", glEdgeFlag(flag)) XPUSHs(sv_2mortal(newSViv(flag))); if (t->polygon_data) XPUSHs((SV*)t->polygon_data); end_tess_marshaller() /* Declare gluTess VERTEX */ begin_tess_marshaller(vertex, vertex, (void * gl_polygon_data), "Missing tess callback for vertex", \ GLdouble * vd = t->vertex_data; \ if (t->do_colors) { \ glColor4f(vd[j], vd[j+1], vd[j+2], vd[j+3]); \ j += 4; \ } \ if (t->do_normals) glNormal3f(vd[j], vd[j+1], vd[j+2]); \ glVertex3f(vd[0], vd[1], vd[2]); \ ) { GLdouble * vd = (GLdouble*) t->vertex_data; for (i = 0; i < 3; i++) XPUSHs(sv_2mortal(newSVnv(vd[i]))); if (t->do_colors) { int J = j + 4; for ( ; j < J; j++) XPUSHs(sv_2mortal(newSVnv(vd[j]))); } if (t->do_normals) for (i = 0; i < 3; i++) XPUSHs(sv_2mortal(newSVnv(vd[j++]))); if (t->polygon_data) XPUSHs((SV*)t->polygon_data); } end_tess_marshaller() /* Declare gluTess VERTEX_DATA */ begin_tess_marshaller(vertex_data, vertex, (void * vertex_data, void * gl_polygon_data), "Missing tess callback for vertex_data", \ GLdouble * vd = (GLdouble*) vertex_data; \ if (t->do_colors) { \ glColor4f(vd[j], vd[j+1], vd[j+2], vd[j+3]); \ j += 4; \ } \ if (t->do_normals) glNormal3f(vd[j], vd[j+1], vd[j+2]); \ glVertex3f(vd[0], vd[1], vd[2]); \ ) if (! vertex_data) croak("Missing vertex data in tess vertex_data callback"); { GLdouble * vd = (GLdouble*) vertex_data; for (i = 0; i < 3; i++) XPUSHs(sv_2mortal(newSVnv(vd[i]))); if (t->do_colors) { int J = j + 4; for ( ; j < J; j++) XPUSHs(sv_2mortal(newSVnv(vd[j]))); } if (t->do_normals) for (i = 0; i < 3; i++) XPUSHs(sv_2mortal(newSVnv(vd[j++]))); if (t->polygon_data) XPUSHs((SV*)t->polygon_data); } end_tess_marshaller() /* Declare gluTess ERROR */ begin_tess_marshaller(error, error, (GLenum errno_, void * gl_polygon_data), "Missing tess callback for error", \ warn("Tesselation error: %s", gluErrorString(errno_)); \ ) XPUSHs(sv_2mortal(newSViv(errno_))); end_tess_marshaller() /* Declare gluTess ERROR_DATA */ begin_tess_marshaller(error_data, error, (GLenum errno_, void * gl_polygon_data), "Missing tess callback for error_data", \ warn("Tesselation error: %s", gluErrorString(errno_)); \ ) XPUSHs(sv_2mortal(newSViv(errno_))); if (t->polygon_data) XPUSHs((SV*)t->polygon_data); end_tess_marshaller() /* Declare gluTess COMBINE AND COMBINE_DATA */ void CALLBACK _s_marshal_glu_t_callback_combine (GLdouble coords[3], void * vertex_data[4], GLfloat weight[4], void ** out_data, void * gl_polygon_data) { SV * handler; AV * vds; SV * item; I32 n; int i, j = 3; dSP; GLdouble *vd[4]; PGLUtess *t = (PGLUtess*)gl_polygon_data; bool has_data = FALSE; int size = 3 + (t->do_colors ? 4 : 0) + (t->do_normals ? 3 : 0); GLdouble *vertex = malloc(sizeof(GLdouble) * size); if (vertex == NULL) croak("Couldn't allocate combination vertex during tesselation"); vds = t->vertex_datas; if (!vds) croak("Missing vertex data storage"); av_push(vds, newSViv(PTR2IV(vertex))); handler = t->combine_callback; if (!handler) croak("Missing tess callback for combine_data"); if (t->use_vertex_data) { PGLUtess * opaque = malloc(sizeof(PGLUtess)); if (!opaque) croak("Couldn't allocate storage for vertex opaque data"); opaque->triangulator = t->triangulator; opaque->vertex_datas = t->vertex_datas; opaque->vertex_callback = t->vertex_callback; opaque->combine_callback = t->combine_callback; opaque->vertex_data = vertex; opaque->polygon_data = &PL_sv_undef; opaque->use_vertex_data = TRUE; opaque->do_colors = t->do_colors; opaque->do_normals = t->do_normals; if (! t->tess_datas) t->tess_datas = newAV(); av_push(t->tess_datas, newSViv(PTR2IV(opaque))); *out_data = opaque; for (i = 0; i < 4; i++) { PGLUtess* ot = (PGLUtess*)vertex_data[i]; vd[i] = (GLdouble*)ot->vertex_data; } } else { *out_data = vertex; for (i = 0; i < 4; i++) vd[i] = (GLdouble*)vertex_data[i]; } if (! SvROK(handler)) { /* default */ vertex[0] = coords[0]; vertex[1] = coords[1]; vertex[2] = coords[2]; if (t->do_colors) { int J = j + 4; for ( ; j < J; j++) { vertex[j] = 0; for (i = 0; i < 4; i++) if (weight[i]) vertex[j] += weight[i] * vd[i][j]; } } if (t->do_normals) { int J = j + 3; for ( ; j < J; j++) { vertex[j] = 0; for (i = 0; i < 4; i++) if (weight[i]) vertex[j] += weight[i] * vd[i][j]; } } } else { PUSHMARK(sp); for (i = 0; i < 3; i++) XPUSHs(sv_2mortal(newSVnv(coords[i]))); for (i = 0; i < 4; i++) { AV* vec = (AV*)sv_2mortal((SV*)newAV()); XPUSHs(newRV_inc((SV*)vec)); for (j = 0 ; j < 3; j++) av_push(vec, sv_2mortal(newSVnv(weight[i] ? vd[i][j] : 0))); if (t->do_colors) { int J = j + 4; for ( ; j < J; j++) av_push(vec, sv_2mortal(newSVnv(weight[i] ? vd[i][j] : 0))); } if (t->do_normals) { int J = j + 3; for ( ; j < J; j++) av_push(vec, sv_2mortal(newSVnv(weight[i] ? vd[i][j] : 0))); } if (t->use_vertex_data) { PGLUtess* ot = (PGLUtess*)vertex_data[i]; av_push(vec, ot->polygon_data ? ot->polygon_data : &PL_sv_undef); } } for (i = 0; i < 4; i++) XPUSHs(sv_2mortal(newSVnv(weight[i]))); XPUSHs(t->polygon_data ? t->polygon_data : &PL_sv_undef); /* would be nice to have the option to only do this on COMBINE_DATA */ PUTBACK; n = perl_call_sv(handler, G_ARRAY); SPAGAIN; if (t->do_colors) { if (t->do_normals) { if (n == 11 && t->use_vertex_data) has_data = TRUE; else if (n != 10) { if (t->use_vertex_data) croak("Callback expects (x,y,z, r,g,b,a, nx,ny,nz [,polygon_data])"); else croak("Callback expects (x,y,z, r,g,b,a, nx,ny,nz)"); } } else { if (n == 8 && t->use_vertex_data) has_data = TRUE; else if (n != 7) { if (t->use_vertex_data) croak("Callback expects (x,y,z, r,g,b,a [,polygon_data])"); else croak("Callback expects (x,y,z, r,g,b,a)"); } } } else { if (t->do_normals) { if (n == 7 && t->use_vertex_data) has_data = TRUE; else if (n != 6) { if (t->use_vertex_data) croak("Callback expects (x,y,z, nx,ny,nz [,polygon_data])"); else croak("Callback expects (x,y,z, nx,ny,nz)"); } } else { if (n == 4 && t->use_vertex_data) has_data = TRUE; else if (n != 3) { if (t->use_vertex_data) croak("Callback expects (x,y,z [,polygon_data])"); else croak("Callback expects (x,y,z)"); } } } if (t->use_vertex_data) { PGLUtess* opaque = (PGLUtess*)*out_data; opaque->polygon_data = (has_data) ? POPs : 0; } for (i = n - (has_data ? 2 : 1); i >= 0; i--) { GLdouble val; item = POPs; if (! item || (! SvIOK(item) && ! SvNOK(item))) croak("Value returned in index %d was not a valid number", i); val = (GLdouble)SvNV(item); vertex[i] = val; } PUTBACK; } } #endif #endif /* End IN_POGL_GLU_XS */ MODULE = OpenGL::GLU PACKAGE = OpenGL #ifdef IN_POGL_GLU_XS ##################### GLU ######################### #ifdef HAVE_GLU #// $nurb->gluBeginCurve($nurb); void gluBeginCurve(nurb) GLUnurbsObj * nurb #// gluEndCurve($nurb); void gluEndCurve(nurb) GLUnurbsObj * nurb #// gluBeginPolygon($tess); void gluBeginPolygon(tess) PGLUtess * tess CODE: gluBeginPolygon(tess->triangulator); #// gluEndPolygon($tess); void gluEndPolygon(tess) PGLUtess * tess CODE: gluEndPolygon(tess->triangulator); #// gluBeginSurface($nurb); void gluBeginSurface(nurb) GLUnurbsObj * nurb #// gluEndSurface($nurb); void gluEndSurface(nurb) GLUnurbsObj * nurb #// gluBeginTrim($nurb); void gluBeginTrim(nurb) GLUnurbsObj * nurb #// gluEndTrim($nurb); void gluEndTrim(nurb) GLUnurbsObj * nurb #//# gluBuild1DMipmaps_c($target, $internalformat, $width, $format, $type, (CPTR)data); GLint gluBuild1DMipmaps_c(target, internalformat, width, format, type, data) GLenum target GLuint internalformat GLsizei width GLenum format GLenum type void * data CODE: { RETVAL=gluBuild1DMipmaps(target, internalformat, width, format, type, data); } OUTPUT: RETVAL #//# gluBuild1DMipmaps_s($target, $internalformat, $width, $format, $type, (PACKED)data); GLint gluBuild1DMipmaps_s(target, internalformat, width, format, type, data) GLenum target GLuint internalformat GLsizei width GLenum format GLenum type SV * data CODE: { GLvoid * ptr = ELI(data, width, 1, format, type, gl_pixelbuffer_unpack); RETVAL=gluBuild1DMipmaps(target, internalformat, width, format, type, ptr); } OUTPUT: RETVAL #//# gluBuild2DMipmaps_c($target, $internalformat, $width, $height, $format, $type, (CPTR)data); GLint gluBuild2DMipmaps_c(target, internalformat, width, height, format, type, data) GLenum target GLuint internalformat GLsizei width GLsizei height GLenum format GLenum type void * data CODE: { RETVAL=gluBuild2DMipmaps(target, internalformat, width, height, format, type, data); } OUTPUT: RETVAL #//# gluBuild2DMipmaps_s($target, $internalformat, $width, $height, $format, $type, (PACKED)data); GLint gluBuild2DMipmaps_s(target, internalformat, width, height, format, type, data) GLenum target GLuint internalformat GLsizei width GLsizei height GLenum format GLenum type SV * data CODE: { GLvoid * ptr = ELI(data, width, height, format, type, gl_pixelbuffer_unpack); RETVAL=gluBuild2DMipmaps(target, internalformat, width, height, format, type, ptr); } OUTPUT: RETVAL #// gluCylinder($quad, $base, $top, $height, $slices, $stacks); void gluCylinder(quad, base, top, height, slices, stacks) GLUquadricObj * quad GLdouble base GLdouble top GLdouble height GLint slices GLint stacks #// gluDeleteNurbsRenderer($nurb); void gluDeleteNurbsRenderer(nurb) GLUnurbsObj * nurb #// gluDeleteQuadric($quad); void gluDeleteQuadric(quad) GLUquadricObj * quad #// gluDeleteTess($tess); void gluDeleteTess(tess) PGLUtess * tess CODE: { if (tess->triangulator) gluDeleteTess(tess->triangulator); #ifdef GLU_VERSION_1_2 if (tess->begin_callback) SvREFCNT_dec(tess->begin_callback); if (tess->edgeFlag_callback) SvREFCNT_dec(tess->edgeFlag_callback); if (tess->vertex_callback) SvREFCNT_dec(tess->vertex_callback); if (tess->end_callback) SvREFCNT_dec(tess->end_callback); if (tess->error_callback) SvREFCNT_dec(tess->error_callback); if (tess->combine_callback) SvREFCNT_dec(tess->combine_callback); #endif delete_vertex_datas() delete_tess_datas() delete_polygon_data() free(tess); } #// gluDisk($quad, $inner, $outer, $slices, $loops); void gluDisk(quad, inner, outer, slices, loops) GLUquadricObj * quad GLdouble inner GLdouble outer GLint slices GLint loops #//# gluErrorString($error); char * gluErrorString(error) GLenum error CODE: RETVAL = (char*)gluErrorString(error); OUTPUT: RETVAL #// gluGetNurbsProperty_p($nurb, $property); GLfloat gluGetNurbsProperty_p(nurb, property) GLUnurbsObj * nurb GLenum property CODE: { GLfloat param; gluGetNurbsProperty(nurb, property, ¶m); RETVAL = param; } OUTPUT: RETVAL #// gluNurbsProperty(nurb, property, value); void gluNurbsProperty(nurb, property, value) GLUnurbsObj * nurb GLenum property GLfloat value #ifdef GLU_VERSION_1_1 #//# gluGetString($name); char * gluGetString(name) GLenum name CODE: RETVAL = (char*)gluGetString(name); OUTPUT: RETVAL #endif #// gluLoadSamplingMatrices_p(nurb, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4); void gluLoadSamplingMatrices_p(nurb, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4) GLUnurbsObj * nurb CODE: { GLfloat m[16], p[16]; GLint v[4]; int i; for (i=0;i<16;i++) m[i] = (GLfloat)SvNV(ST(i+1)); for (i=0;i<16;i++) p[i] = (GLfloat)SvNV(ST(i+1+16)); for (i=0;i<4;i++) v[i] = SvIV(ST(i+1+16+16)); gluLoadSamplingMatrices(nurb, m, p, v); } #//# gluLookAt($eyeX, $eyeY, $eyeZ, $centerX, $centerY, $centerZ, $upX, $upY, $upZ); void gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ) GLdouble eyeX GLdouble eyeY GLdouble eyeZ GLdouble centerX GLdouble centerY GLdouble centerZ GLdouble upX GLdouble upY GLdouble upZ #// gluNewNurbsRenderer(); GLUnurbsObj * gluNewNurbsRenderer() #// gluNewQuadric(); GLUquadricObj * gluNewQuadric() #// gluNewTess(); PGLUtess * gluNewTess(...) CODE: { RETVAL = malloc(sizeof(PGLUtess)); memset(RETVAL, 0, sizeof(PGLUtess)); RETVAL->do_colors = (items > 0) ? SvTRUE(ST(0)) : FALSE; RETVAL->do_normals = (items > 1) ? SvTRUE(ST(1)) : FALSE; RETVAL->triangulator = gluNewTess(); } OUTPUT: RETVAL #// gluNextContour(tess, type); void gluNextContour(tess, type) PGLUtess * tess GLenum type CODE: gluNextContour(tess->triangulator, type); #// gluNurbsCurve_c(nurb, nknots, knot, stride, ctlarray, order, type); void gluNurbsCurve_c(nurb, nknots, knot, stride, ctlarray, order, type) GLUnurbsObj * nurb GLint nknots void * knot GLint stride void * ctlarray GLint order GLenum type CODE: gluNurbsCurve(nurb, nknots, knot, stride, ctlarray, order, type); #// gluNurbsSurface_c(nurb, sknot_count, sknot, tknot_count, tknot, s_stride, t_stride, ctrlarray, sorder, torder, type); void gluNurbsSurface_c(nurb, sknot_count, sknot, tknot_count, tknot, s_stride, t_stride, ctrlarray, sorder, torder, type) GLUnurbsObj * nurb GLint sknot_count void * sknot GLint tknot_count void * tknot GLint s_stride GLint t_stride void * ctrlarray GLint sorder GLint torder GLenum type CODE: gluNurbsSurface(nurb, sknot_count, sknot, tknot_count, tknot, s_stride, t_stride, ctrlarray, sorder, torder, type); #//# gluOrtho2D($left, $right, $bottom, $top); void gluOrtho2D(left, right, bottom, top) GLdouble left GLdouble right GLdouble bottom GLdouble top #// gluPartialDisk(quad, inner, outer, slices, loops, start, sweep); void gluPartialDisk(quad, inner, outer, slices, loops, start, sweep) GLUquadricObj* quad GLdouble inner GLdouble outer GLint slices GLint loops GLdouble start GLdouble sweep #//# gluPerspective($fovy, $aspect, $zNear, $zFar); void gluPerspective(fovy, aspect, zNear, zFar) GLdouble fovy GLdouble aspect GLdouble zNear GLdouble zFar #//# gluPickMatrix_p($x, $y, $delX, $delY, $m1,$m2,$m3,$m4); void gluPickMatrix_p(x, y, delX, delY, m1,m2,m3,m4) GLdouble x GLdouble y GLdouble delX GLdouble delY CODE: { GLint m[4]; int i; for (i=0;i<4;i++) m[i] = SvIV(ST(i+4)); gluPickMatrix(x, y, delX, delY, &m[0]); } #//# gluProject_p($objx, $objy, $objz, @m4x4, @o4x4, $v1,$v2,$v3,$v4); void gluProject_p(objx, objy, objz, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4) GLdouble objx GLdouble objy GLdouble objz PPCODE: { GLdouble m[16], p[16], winx, winy, winz; GLint v[4]; int i; for (i=0;i<16;i++) m[i] = SvNV(ST(i+3)); for (i=0;i<16;i++) p[i] = SvNV(ST(i+3+16)); for (i=0;i<4;i++) v[i] = SvIV(ST(i+3+16+16)); i = gluProject(objx, objy, objz, m, p, v, &winx, &winy, &winz); if (i) { EXTEND(sp, 3); PUSHs(sv_2mortal(newSVnv(winx))); PUSHs(sv_2mortal(newSVnv(winy))); PUSHs(sv_2mortal(newSVnv(winz))); } } #// gluPwlCurve_c(nurb, count, data, stride, type); void gluPwlCurve_c(nurb, count, data, stride, type) GLUnurbsObj * nurb GLint count void * data GLint stride GLenum type CODE: gluPwlCurve(nurb, count, data, stride, type); #// gluQuadricDrawStyle(quad, draw); void gluQuadricDrawStyle(quad, draw) GLUquadricObj * quad GLenum draw #// gluQuadricNormals(quad, normal); void gluQuadricNormals(quad, normal) GLUquadricObj * quad GLenum normal #// gluQuadricOrientation(quad, orientation); void gluQuadricOrientation(quad, orientation) GLUquadricObj * quad GLenum orientation #// gluQuadricTexture(quad, texture); void gluQuadricTexture(quad, texture) GLUquadricObj * quad GLboolean texture #//# gluScaleImage_s($format, $wIn, $hIn, $typeIn, (PACKED)dataIn, $wOut, $hOut, $typeOut, (PACKED)dataOut); GLint gluScaleImage_s(format, wIn, hIn, typeIn, dataIn, wOut, hOut, typeOut, dataOut) GLenum format GLsizei wIn GLsizei hIn GLenum typeIn SV * dataIn GLsizei wOut GLsizei hOut GLenum typeOut SV * dataOut CODE: { GLvoid * inptr, * outptr; STRLEN discard; ELI(dataIn, wIn, hIn, format, typeIn, gl_pixelbuffer_unpack); ELI(dataOut, wOut, hOut, format, typeOut, gl_pixelbuffer_pack); inptr = SvPV(dataIn, discard); outptr = SvPV(dataOut, discard); RETVAL = gluScaleImage(format, wIn, hIn, typeIn, inptr, wOut, hOut, typeOut, outptr); } OUTPUT: RETVAL #// gluSphere(quad, radius, slices, stacks); void gluSphere(quad, radius, slices, stacks) GLUquadricObj * quad GLdouble radius GLint slices GLint stacks #ifdef GLU_VERSION_1_2 #// gluGetTessProperty_p(tess, property); GLdouble gluGetTessProperty_p(tess, property) PGLUtess * tess GLenum property CODE: { GLdouble param; gluGetTessProperty(tess->triangulator, property, ¶m); RETVAL = param; } OUTPUT: RETVAL #// #gluNurbsCallback_p(nurb, which, handler, ...); #void #gluNurbsCallback_p(nurb, which, handler, ...) #// gluNurbsCallbackDataEXT #void #gluNurbsCallbackDataEXT #// gluQuadricCallback #void #gluQuadricCallback #// gluTessBeginContour(tess); void gluTessBeginContour(tess) PGLUtess * tess CODE: gluTessBeginContour(tess->triangulator); #// gluTessEndContour(tess); void gluTessEndContour(tess) PGLUtess * tess CODE: gluTessEndContour(tess->triangulator); #// gluTessBeginPolygon(tess, ...); void gluTessBeginPolygon(tess, ...) PGLUtess * tess CODE: { delete_polygon_data() if (items > 1) { tess->polygon_data = newSVsv(ST(1)); } if (!tess->vertex_datas) tess->vertex_datas = newAV(); gluTessBeginPolygon(tess->triangulator, tess); } #// gluTessEndPolygon(tess); void gluTessEndPolygon(tess) PGLUtess * tess CODE: { gluTessEndPolygon(tess->triangulator); delete_vertex_datas() delete_tess_datas() delete_polygon_data() } #// gluTessNormal(tess, valueX, valueY, valueZ) void gluTessNormal(tess, valueX, valueY, valueZ) PGLUtess * tess GLdouble valueX GLdouble valueY GLdouble valueZ CODE: gluTessNormal(tess->triangulator, valueX, valueY, valueZ); #// gluTessProperty(tess, which, data); void gluTessProperty(tess, which, data) PGLUtess * tess GLenum which GLdouble data CODE: gluTessProperty(tess->triangulator, which, data); #// gluTessCallback(tess, which, ...); void gluTessCallback(tess, which, ...) PGLUtess * tess GLenum which CODE: { switch (which) { case GLU_TESS_BEGIN: case GLU_TESS_BEGIN_DATA: if (tess->begin_callback) { SvREFCNT_dec(tess->begin_callback); tess->begin_callback = 0; } break; case GLU_TESS_END: case GLU_TESS_END_DATA: if (tess->end_callback) { SvREFCNT_dec(tess->end_callback); tess->end_callback = 0; } break; case GLU_TESS_VERTEX: case GLU_TESS_VERTEX_DATA: if (tess->vertex_callback) { SvREFCNT_dec(tess->vertex_callback); tess->vertex_callback = 0; } break; case GLU_TESS_ERROR: case GLU_TESS_ERROR_DATA: if (tess->error_callback) { SvREFCNT_dec(tess->error_callback); tess->error_callback = 0; } break; case GLU_TESS_COMBINE: case GLU_TESS_COMBINE_DATA: if (tess->combine_callback) { SvREFCNT_dec(tess->combine_callback); tess->combine_callback = 0; } break; case GLU_TESS_EDGE_FLAG: case GLU_TESS_EDGE_FLAG_DATA: if (tess->edgeFlag_callback) { SvREFCNT_dec(tess->edgeFlag_callback); tess->edgeFlag_callback = 0; } break; } if (items > 2) { SV * callback; if (SvPOK(ST(2)) && sv_eq(ST(2), sv_2mortal(newSVpv("DEFAULT", 0)))) { callback = newSViv(1); switch (which) { case GLU_TESS_BEGIN_DATA: which = GLU_TESS_BEGIN; break; case GLU_TESS_END_DATA: which = GLU_TESS_END; break; case GLU_TESS_ERROR_DATA: which = GLU_TESS_ERROR; break; case GLU_TESS_EDGE_FLAG_DATA: which = GLU_TESS_EDGE_FLAG; break; case GLU_TESS_VERTEX: which = GLU_TESS_VERTEX_DATA; break; /* vertex data handler has less overhead and both pass opaque pointers anyway */ } } else if (!SvROK(ST(2)) || SvTYPE(SvRV(ST(2))) != SVt_PVCV) { croak("3rd argument to gluTessCallback must be a perl code ref"); } else { callback = newSVsv(ST(2)); } switch (which) { case GLU_TESS_BEGIN: tess->begin_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_BEGIN_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_begin); break; case GLU_TESS_BEGIN_DATA: tess->begin_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_BEGIN_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_begin_data); break; case GLU_TESS_END: tess->end_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_END_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_end); break; case GLU_TESS_END_DATA: tess->end_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_END_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_end_data); break; case GLU_TESS_VERTEX: tess->use_vertex_data = TRUE; tess->vertex_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_VERTEX, (void (CALLBACK*)()) _s_marshal_glu_t_callback_vertex); break; case GLU_TESS_VERTEX_DATA: tess->use_vertex_data = FALSE; tess->vertex_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_VERTEX_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_vertex_data); break; case GLU_TESS_ERROR: tess->error_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_ERROR_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_error); break; case GLU_TESS_ERROR_DATA: tess->error_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_ERROR_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_error_data); break; case GLU_TESS_COMBINE: case GLU_TESS_COMBINE_DATA: tess->combine_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_COMBINE_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_combine); break; case GLU_TESS_EDGE_FLAG: tess->edgeFlag_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_EDGE_FLAG_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_edgeFlag); break; case GLU_TESS_EDGE_FLAG_DATA: tess->edgeFlag_callback = callback; gluTessCallback(tess->triangulator, GLU_TESS_EDGE_FLAG_DATA, (void (CALLBACK*)()) _s_marshal_glu_t_callback_edgeFlag_data); break; } } } #endif #// gluTessVertex(tess, x, y, z); void gluTessVertex_p(tess, x, y, z, ...) PGLUtess * tess GLdouble x GLdouble y GLdouble z CODE: { int i; int j = 3; AV * vds = tess->vertex_datas; int size = 3 + (tess->do_colors ? 4 : 0) + (tess->do_normals ? 3 : 0); GLdouble* data = malloc(sizeof(GLdouble) * size); if (!vds) croak("Missing vertex data storage during gluTessVertex"); if (data == NULL) croak("Couldn't allocate vertex during gluTessVertex"); data[0] = x; data[1] = y; data[2] = z; av_push(vds, newSViv(PTR2IV(data))); /* store for freeing later */ if (tess->do_colors) { int J = j + 4; if (tess->do_normals) { if (items != 12 && items != 11) croak("gluTessVertex_p(tess, x,y,z, r,g,b,a, nx,ny,nz [,polygon_data])"); } else { if (items != 9 && items != 8 ) croak("gluTessVertex_p(tess, x,y,z, r,g,b,a [,polygon_data])"); } for ( ; j < J; j++) data[j] = (GLdouble)SvNV(ST(j+1)); } else { if (tess->do_normals) { if (items != 8 && items != 7) croak("gluTessVertex_p(tess, x,y,z, nx,ny,nz [,polygon_data])"); } else { if (items != 5 && items != 4) croak("gluTessVertex_p(tess, x,y,z [,polygon_data])"); } } if (tess->do_normals) { int J = j + 3; for ( ; j < J; j++) data[j] = (GLdouble)SvNV(ST(j+1)); } if (tess->use_vertex_data) { PGLUtess * opaque = malloc(sizeof(PGLUtess)); if (!opaque) croak("Couldn't allocate storage for vertex opaque data"); opaque->triangulator = tess->triangulator; opaque->vertex_datas = tess->vertex_datas; opaque->vertex_callback = tess->vertex_callback; opaque->combine_callback = tess->combine_callback; opaque->vertex_data = data; opaque->polygon_data = (items > j+1) ? newSVsv(ST(j+1)) : 0; opaque->use_vertex_data = TRUE; opaque->do_colors = tess->do_colors; opaque->do_normals = tess->do_normals; if (! tess->tess_datas) tess->tess_datas = newAV(); av_push(tess->tess_datas, newSViv(PTR2IV(opaque))); gluTessVertex(tess->triangulator, data, (void*)opaque); } else { gluTessVertex(tess->triangulator, data, data); } } #//# gluUnProject_p($winx,$winy,$winz, @m4x4, @o4x4, $v1,$v2,$v3,$v4); void gluUnProject_p(winx,winy,winz, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4) GLdouble winx GLdouble winy GLdouble winz PPCODE: { GLdouble m[16], p[16], objx, objy, objz; GLint v[4]; int i; for (i=0;i<16;i++) m[i] = SvNV(ST(i+3)); for (i=0;i<16;i++) p[i] = SvNV(ST(i+3+16)); for (i=0;i<4;i++) v[i] = SvIV(ST(i+3+16+16)); i = gluUnProject(winx,winy,winz, m, p, v, &objx,&objy,&objz); if (i) { EXTEND(sp, 3); PUSHs(sv_2mortal(newSVnv(objx))); PUSHs(sv_2mortal(newSVnv(objy))); PUSHs(sv_2mortal(newSVnv(objz))); } } #endif #endif /* End IN_POGL_GLU_XS */ libopengl-perl-0.6704+dfsg.orig/pogl_gl_GetP_Pass.xs0000644000175000017500000007245312334200655021614 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:09:56 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::GetPPass PACKAGE = OpenGL #ifdef HAVE_GL #// 1.0 #//# glGetPixelMapfv_c($map, (CPTR)values); void glGetPixelMapfv_c(map, values) GLenum map void * values CODE: glGetPixelMapfv(map, values); #// 1.0 #//# glGetPixelMapuiv_c($map, (CPTR)values); void glGetPixelMapuiv_c(map, values) GLenum map void * values CODE: glGetPixelMapuiv(map, values); #// 1.0 #//# glGetPixelMapusv_c($map, (CPTR)values); void glGetPixelMapusv_c(map, values) GLenum map void * values CODE: glGetPixelMapusv(map, values); #// 1.0 #//# glGetPixelMapfv_s($map, (PACKED)values); void glGetPixelMapfv_s(map, values) GLenum map SV * values CODE: { GLfloat * values_s = EL(values, sizeof(GLfloat)* gl_pixelmap_size(map)); glGetPixelMapfv(map, values_s); } #// 1.0 #//# glGetPixelMapuiv_s($map, (PACKED)values); void glGetPixelMapuiv_s(map, values) GLenum map SV * values CODE: { GLuint * values_s = EL(values, sizeof(GLuint)* gl_pixelmap_size(map)); glGetPixelMapuiv(map, values_s); } #// 1.0 #//# glGetPixelMapusv_s($map, (PACKED)values); void glGetPixelMapusv_s(map, values) GLenum map SV * values CODE: { GLushort * values_s = EL(values, sizeof(GLushort)* gl_pixelmap_size(map)); glGetPixelMapusv(map, values_s); } #// 1.0 #//# @data = glGetPixelMapfv_p($map); void glGetPixelMapfv_p(map) GLenum map CODE: { int count = gl_pixelmap_size(map); GLfloat * values; int i; values = malloc(sizeof(GLfloat) * count); glGetPixelMapfv(map, values); EXTEND(sp, count); for(i=0; ibind); } glIndexPointer(oga->types[0], 0, oga->bind ? 0 : oga->data); #else glIndexPointer(oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glInitNames(); void glInitNames() #ifdef GL_VERSION_1_1 #// 1.1 #//# glInterleavedArrays_c($format, $stride, (CPTR)pointer); void glInterleavedArrays_c(format, stride, pointer) GLenum format GLsizei stride void * pointer CODE: glInterleavedArrays(format, stride, pointer); #endif #// 1.0 #//# glIsEnabled($cap); GLboolean glIsEnabled(cap) GLenum cap #// 1.0 #//# glIsList(list); GLboolean glIsList(list) GLuint list #ifdef GL_VERSION_1_1 #// 1.1 #//# glIsTexture($list); GLboolean glIsTexture(list) GLuint list #endif #// 1.0 #//# glLightf($light, $pname, $param); void glLightf(light, pname, param) GLenum light GLenum pname GLfloat param #// 1.0 #//# glLighti($light, $pname, $param); void glLighti(light, pname, param) GLenum light GLenum pname GLint param #// 1.0 #//# glLightfv_c($light, $pname, (CPTR)params); void glLightfv_c(light, pname, params) GLenum light GLenum pname void * params CODE: glLightfv(light, pname, params); #// 1.0 #//# glLightiv_c($light, $pname, (CPTR)params); void glLightiv_c(light, pname, params) GLenum light GLenum pname void * params CODE: glLightiv(light, pname, params); #// 1.0 #//# glLightfv_s($light, $pname, (PACKED)params); void glLightfv_s(light, pname, params) GLenum light GLenum pname SV * params CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat)*gl_light_count(pname)); glLightfv(light, pname, params_s); } #// 1.0 #//# glLightiv_s($light, $pname, (PACKED)params); void glLightiv_s(light, pname, params) GLenum light GLenum pname SV * params CODE: { GLint * params_s = EL(params, sizeof(GLint)*gl_light_count(pname)); glLightiv(light, pname, params_s); } #// 1.0 #//# glLightfv_p($light, $pname, @params); void glLightfv_p(light, pname, ...) GLenum light GLenum pname CODE: { GLfloat p[MAX_GL_LIGHT_COUNT]; int i; if ((items-2) != gl_light_count(pname)) croak("Incorrect number of arguments"); for(i=2;ibind); } glNormalPointer(oga->types[0], 0, oga->bind ? 0 : oga->data); #else glNormalPointer(oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glOrtho($left, $right, $bottom, $top, $zNear, $zFar); void glOrtho(left, right, bottom, top, zNear, zFar) GLdouble left GLdouble right GLdouble bottom GLdouble top GLdouble zNear GLdouble zFar #// 1.0 #//# glPassThrough($token); void glPassThrough(token) GLfloat token #endif /* HAVE_GL */ libopengl-perl-0.6704+dfsg.orig/pogl_glut.xs0000644000175000017500000007036012334200655020253 0ustar gregoagregoa/* Last saved: Tue 02 Apr 2013 02:45:10 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ #include #include "pgopogl.h" /* glut_util.h is where you include the appropriate GLUT header * file based on what is available. It also defines some constants * that may not be defined everywhere. Replace this by user * specified include information for the include and compile-time * perl constants rather than some special cases */ #include "glut_util.h" /* TODO: calculate this from the actual GLUT include file */ #ifndef GLUT_API_VERSION #define GLUT_API_VERSION 4 #endif static int _done_glutInit = 0; static int _done_glutCloseFunc_warn = 0; /* Macros for GLUT callback and handler declarations */ # define DO_perl_call_sv(handler, flag) perl_call_sv(handler, flag) # define ENSURE_callback_thread # define GLUT_PUSH_NEW_SV(sv) XPUSHs(sv_2mortal(newSVsv(sv))) # define GLUT_PUSH_NEW_IV(i) XPUSHs(sv_2mortal(newSViv(i))) # define GLUT_PUSH_NEW_U8(c) XPUSHs(sv_2mortal(newSViv((int)c))) # define GLUT_EXTEND_STACK(sp,n) # define GLUT_PUSHMARK(sp) PUSHMARK(sp) /* Set up for all the GLUT callback handlers */ static AV * glut_handlers = 0; /* Attach a handler to a window */ static void set_glut_win_handler(int win, int type, SV * data) { SV ** h; AV * a; if (!glut_handlers) glut_handlers = newAV(); h = av_fetch(glut_handlers, win, FALSE); if (!h) { a = newAV(); av_store(glut_handlers, win, newRV_inc((SV*)a)); SvREFCNT_dec(a); } else if (!SvOK(*h) || !SvROK(*h)) croak("Unable to establish glut handler"); else a = (AV*)SvRV(*h); av_store(a, type, newRV_inc(data)); SvREFCNT_dec(data); } /* Get a window's handler */ static SV * get_glut_win_handler(int win, int type) { SV ** h; if (!glut_handlers) croak("Unable to locate glut handler"); h = av_fetch(glut_handlers, win, FALSE); if (!h || !SvOK(*h) || !SvROK(*h)) croak("Unable to locate glut handler"); h = av_fetch((AV*)SvRV(*h), type, FALSE); if (!h || !SvOK(*h) || !SvROK(*h)) croak("Unable to locate glut handler"); return SvRV(*h); } /* Release a window's handlers */ static void destroy_glut_win_handlers(int win) { SV ** h; if (!glut_handlers) return; h = av_fetch(glut_handlers, win, FALSE); if (!h || !SvOK(*h) || !SvROK(*h)) return; av_store(glut_handlers, win, newSVsv(&PL_sv_undef)); } /* Release a handler */ static void destroy_glut_win_handler(int win, int type) { SV ** h; AV * a; if (!glut_handlers) glut_handlers = newAV(); h = av_fetch(glut_handlers, win, FALSE); if (!h || !SvOK(*h) || !SvROK(*h)) return; a = (AV*)SvRV(*h); av_store(a, type, newSVsv(&PL_sv_undef)); } /* Begin window callback definition */ #define begin_decl_gwh(type, params, nparam) \ \ static void generic_glut_ ## type ## _handler params \ { \ int win = glutGetWindow(); \ AV * handler_data = (AV*)get_glut_win_handler(win, HANDLE_GLUT_ ## type);\ SV * handler; \ int i; \ dSP; \ \ handler = *av_fetch(handler_data, 0, 0); \ \ GLUT_PUSHMARK(sp); \ GLUT_EXTEND_STACK(sp,av_len(handler_data)+nparam); \ for (i=1;i<=av_len(handler_data);i++) \ GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0)); /* End window callback definition */ #define end_decl_gwh() \ PUTBACK; \ DO_perl_call_sv(handler, G_DISCARD); \ } /* Activate a window callback handler */ #define decl_gwh_xs(type) \ { \ int win = glutGetWindow(); \ \ if (!handler || !SvOK(handler)) { \ destroy_glut_win_handler(win, HANDLE_GLUT_ ## type);\ glut ## type ## Func(NULL); \ } else { \ AV * handler_data = newAV(); \ \ PackCallbackST(handler_data, 0); \ \ set_glut_win_handler(win, HANDLE_GLUT_ ## type, (SV*)handler_data);\ \ glut ## type ## Func(generic_glut_ ## type ## _handler);\ } \ ENSURE_callback_thread;} /* Activate a window callback handler; die on failure */ #define decl_gwh_xs_nullfail(type, fail) \ { \ int win = glutGetWindow(); \ \ if (!handler || !SvOK(handler)) { \ croak fail; \ } else { \ AV * handler_data = newAV(); \ \ PackCallbackST(handler_data, 0); \ \ set_glut_win_handler(win, HANDLE_GLUT_ ## type, (SV*)handler_data);\ \ glut ## type ## Func(generic_glut_ ## type ## _handler);\ } \ ENSURE_callback_thread;} /* Activate a global state callback handler */ #define decl_ggh_xs(type) \ { \ if (glut_ ## type ## _handler_data) \ SvREFCNT_dec(glut_ ## type ## _handler_data); \ \ if (!handler || !SvOK(handler)) { \ glut_ ## type ## _handler_data = 0; \ glut ## type ## Func(NULL); \ } else { \ AV * handler_data = newAV(); \ \ PackCallbackST(handler_data, 0); \ \ glut_ ## type ## _handler_data = handler_data; \ \ glut ## type ## Func(generic_glut_ ## type ## _handler);\ } \ ENSURE_callback_thread;} /* Begin a global state callback definition */ #define begin_decl_ggh(type, params, nparam) \ \ static AV * glut_ ## type ## _handler_data = 0; \ \ static void generic_glut_ ## type ## _handler params \ { \ AV * handler_data = glut_ ## type ## _handler_data; \ SV * handler; \ int i; \ dSP; \ \ handler = *av_fetch(handler_data, 0, 0); \ \ GLUT_PUSHMARK(sp); \ GLUT_EXTEND_STACK(sp,av_len(handler_data)+nparam); \ for (i=1;i<=av_len(handler_data);i++) \ GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0)); /* End a global state callback definition */ #define end_decl_ggh() \ PUTBACK; \ DO_perl_call_sv(handler, G_DISCARD); \ } /* Define callbacks */ enum { HANDLE_GLUT_Display, HANDLE_GLUT_OverlayDisplay, HANDLE_GLUT_Reshape, HANDLE_GLUT_Keyboard, HANDLE_GLUT_KeyboardUp, HANDLE_GLUT_Mouse, HANDLE_GLUT_MouseWheel, /* Open/FreeGLUT -chm */ HANDLE_GLUT_Motion, HANDLE_GLUT_PassiveMotion, HANDLE_GLUT_Entry, HANDLE_GLUT_Visibility, HANDLE_GLUT_WindowStatus, HANDLE_GLUT_Special, HANDLE_GLUT_SpecialUp, HANDLE_GLUT_Joystick, /* Open/FreeGLUT -chm */ HANDLE_GLUT_SpaceballMotion, HANDLE_GLUT_SpaceballRotate, HANDLE_GLUT_SpaceballButton, HANDLE_GLUT_ButtonBox, HANDLE_GLUT_Dials, HANDLE_GLUT_TabletMotion, HANDLE_GLUT_TabletButton, HANDLE_GLUT_MenuDestroy, /* Open/FreeGLUT -chm */ HANDLE_GLUT_Close, /* Open/FreeGLUT -chm */ HANDLE_GLUT_WMClose, /* AGL GLUT -chm */ }; /* Callback for glutDisplayFunc */ begin_decl_gwh(Display, (void), 0) end_decl_gwh() /* Callback for glutOverlayDisplayFunc */ begin_decl_gwh(OverlayDisplay, (void), 0) end_decl_gwh() /* Callback for glutReshapeFunc */ begin_decl_gwh(Reshape, (int width, int height), 2) GLUT_PUSH_NEW_IV(width); GLUT_PUSH_NEW_IV(height); end_decl_gwh() /* Callback for glutKeyboardFunc */ begin_decl_gwh(Keyboard, (unsigned char key, int width, int height), 3) GLUT_PUSH_NEW_U8(key); GLUT_PUSH_NEW_IV(width); GLUT_PUSH_NEW_IV(height); end_decl_gwh() /* Callback for glutKeyboardUpFunc */ begin_decl_gwh(KeyboardUp, (unsigned char key, int width, int height), 3) GLUT_PUSH_NEW_U8(key); GLUT_PUSH_NEW_IV(width); GLUT_PUSH_NEW_IV(height); end_decl_gwh() /* Callback for glutMouseFunc */ begin_decl_gwh(Mouse, (int button, int state, int x, int y), 4) GLUT_PUSH_NEW_IV(button); GLUT_PUSH_NEW_IV(state); GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutMouseWheelFunc */ /* Open/FreeGLUT -chm */ begin_decl_gwh(MouseWheel, (int wheel, int direction, int x, int y), 4) GLUT_PUSH_NEW_IV(wheel); GLUT_PUSH_NEW_IV(direction); GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutPassiveMotionFunc */ begin_decl_gwh(PassiveMotion, (int x, int y), 2) GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutMotionFunc */ begin_decl_gwh(Motion, (int x, int y), 2) GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutVisibilityFunc */ begin_decl_gwh(Visibility, (int state), 1) GLUT_PUSH_NEW_IV(state); end_decl_gwh() /* Callback for glutWindowStatusFunc */ begin_decl_gwh(WindowStatus, (int state), 1) GLUT_PUSH_NEW_IV(state); end_decl_gwh() /* Callback for glutEntryFunc */ begin_decl_gwh(Entry, (int state), 1) GLUT_PUSH_NEW_IV(state); end_decl_gwh() /* Callback for glutSpecialFunc */ begin_decl_gwh(Special, (int key, int width, int height), 3) GLUT_PUSH_NEW_IV(key); GLUT_PUSH_NEW_IV(width); GLUT_PUSH_NEW_IV(height); end_decl_gwh() /* Callback for glutSpecialUpFunc */ begin_decl_gwh(SpecialUp, (int key, int width, int height), 3) GLUT_PUSH_NEW_IV(key); GLUT_PUSH_NEW_IV(width); GLUT_PUSH_NEW_IV(height); end_decl_gwh() /* Callback for glutJoystickFunc */ /* Open/FreeGLUT -chm */ begin_decl_gwh(Joystick, (unsigned int buttons, int xaxis, int yaxis, int zaxis), 4) GLUT_PUSH_NEW_IV(buttons); GLUT_PUSH_NEW_IV(xaxis); GLUT_PUSH_NEW_IV(yaxis); GLUT_PUSH_NEW_IV(zaxis); end_decl_gwh() /* Callback for glutSpaceballMotionFunc */ begin_decl_gwh(SpaceballMotion, (int x, int y, int z), 3) GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); GLUT_PUSH_NEW_IV(z); end_decl_gwh() /* Callback for glutSpaceballRotateFunc */ begin_decl_gwh(SpaceballRotate, (int x, int y, int z), 3) GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); GLUT_PUSH_NEW_IV(z); end_decl_gwh() /* Callback for glutSpaceballButtonFunc */ begin_decl_gwh(SpaceballButton, (int button, int state), 2) GLUT_PUSH_NEW_IV(button); GLUT_PUSH_NEW_IV(state); end_decl_gwh() /* Callback for glutButtonBoxFunc */ begin_decl_gwh(ButtonBox, (int button, int state), 2) GLUT_PUSH_NEW_IV(button); GLUT_PUSH_NEW_IV(state); end_decl_gwh() /* Callback for glutDialsFunc */ begin_decl_gwh(Dials, (int dial, int value), 2) GLUT_PUSH_NEW_IV(dial); GLUT_PUSH_NEW_IV(value); end_decl_gwh() /* Callback for glutTabletMotionFunc */ begin_decl_gwh(TabletMotion, (int x, int y), 2) GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutTabletButtonFunc */ begin_decl_gwh(TabletButton, (int button, int state, int x, int y), 4) GLUT_PUSH_NEW_IV(button); GLUT_PUSH_NEW_IV(state); GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_gwh() /* Callback for glutIdleFunc */ begin_decl_ggh(Idle, (void), 0) end_decl_ggh() /* Callback for glutMenuStatusFunc */ begin_decl_ggh(MenuStatus, (int status, int x, int y), 3) GLUT_PUSH_NEW_IV(status); GLUT_PUSH_NEW_IV(x); GLUT_PUSH_NEW_IV(y); end_decl_ggh() /* Callback for glutMenuStateFunc */ begin_decl_ggh(MenuState, (int status), 1) GLUT_PUSH_NEW_IV(status); end_decl_ggh() /* Callback for glutMenuDestroyFunc */ /* Open/FreeGLUT -chm */ begin_decl_gwh(MenuDestroy, (void), 0) end_decl_gwh() /* Callback for glutCloseFunc */ #ifdef HAVE_AGL_GLUT static void generic_glut_WMClose_handler(void) #else static void generic_glut_Close_handler(void) #endif { int win = glutGetWindow(); AV * handler_data = (AV*)get_glut_win_handler(win, HANDLE_GLUT_Close); SV * handler = *av_fetch(handler_data, 0, 0); dSP; GLUT_PUSHMARK(sp); GLUT_EXTEND_STACK(sp,1); GLUT_PUSH_NEW_IV(win); PUTBACK; DO_perl_call_sv(handler, G_DISCARD); } /* Callback for glutTimerFunc */ static void generic_glut_timer_handler(int value) { AV * handler_data = (AV*)value; SV * handler; int i; dSP; handler = *av_fetch(handler_data, 0, 0); GLUT_PUSHMARK(sp); GLUT_EXTEND_STACK(sp,av_len(handler_data)); for (i=1;i<=av_len(handler_data);i++) GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0)); PUTBACK; DO_perl_call_sv(handler, G_DISCARD); SvREFCNT_dec(handler_data); } static AV * glut_menu_handlers = 0; /* Callback for glutMenuFunc */ static void generic_glut_menu_handler(int value) { AV * handler_data; SV * handler; SV ** h; int i; dSP; h = av_fetch(glut_menu_handlers, glutGetMenu(), FALSE); if (!h || !SvOK(*h) || !SvROK(*h)) croak("Unable to locate menu handler"); handler_data = (AV*)SvRV(*h); handler = *av_fetch(handler_data, 0, 0); GLUT_PUSHMARK(sp); GLUT_EXTEND_STACK(sp,av_len(handler_data) + 1); for (i=1;i<=av_len(handler_data);i++) GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0)); GLUT_PUSH_NEW_IV(value); PUTBACK; DO_perl_call_sv(handler, G_DISCARD); } /* End of set up for GLUT callback stuff */ MODULE = OpenGL::GLUT PACKAGE = OpenGL #// Test for done with glutInit int done_glutInit() CODE: RETVAL = _done_glutInit; OUTPUT: RETVAL # GLUT #//# glutInit(); void glutInit() CODE: { int argc; char ** argv; AV * ARGV; SV * ARGV0; SV * sv; int i; if (_done_glutInit) croak("illegal glutInit() reinitialization attempt"); argv = 0; ARGV = perl_get_av("ARGV", FALSE); ARGV0 = perl_get_sv("0", FALSE); argc = av_len(ARGV)+2; if (argc) { argv = malloc(sizeof(char*)*argc); argv[0] = SvPV(ARGV0, PL_na); for(i=0;i<=av_len(ARGV);i++) argv[i+1] = SvPV(*av_fetch(ARGV, i, 0), PL_na); } i = argc; glutInit(&argc, argv); _done_glutInit = 1; while(argc= 3 #//# glutFullScreen(); void glutFullScreen() #endif #//# glutPopWindow(); void glutPopWindow() #//# glutPushWindow(); void glutPushWindow() #//# glutShowWindow(); void glutShowWindow() #//# glutHideWindow(); void glutHideWindow() #//# glutIconifyWindow(); void glutIconifyWindow() #//# glutSetWindowTitle($title); void glutSetWindowTitle(title) char * title #//# glutSetIconTitle($title); void glutSetIconTitle(title) char * title #if GLUT_API_VERSION >= 3 #//# glutSetCursor(cursor); void glutSetCursor(cursor) int cursor #endif # Overlays #if GLUT_API_VERSION >= 3 #//# glutEstablishOverlay(); void glutEstablishOverlay() #//# glutUseLayer(layer); void glutUseLayer(layer) GLenum layer #//# glutRemoveOverlay(); void glutRemoveOverlay() #//# glutPostOverlayRedisplay(); void glutPostOverlayRedisplay() #//# glutShowOverlay(); void glutShowOverlay() #//# glutHideOverlay(); void glutHideOverlay() #endif # Menus #//# $ID = glutCreateMenu(\&callback); int glutCreateMenu(handler=0, ...) SV * handler CODE: { if (!handler || !SvOK(handler)) { croak("A handler must be specified"); } else { AV * handler_data = newAV(); PackCallbackST(handler_data, 0); RETVAL = glutCreateMenu(generic_glut_menu_handler); if (!glut_menu_handlers) glut_menu_handlers = newAV(); av_store(glut_menu_handlers, RETVAL, newRV_inc((SV*)handler_data)); SvREFCNT_dec(handler_data); } } OUTPUT: RETVAL #//# glutSetMenu($menu); void glutSetMenu(menu) int menu #//# glutGetMenu(); int glutGetMenu() #//# glutDestroyMenu($menu); void glutDestroyMenu(menu) int menu CODE: { glutDestroyMenu(menu); av_store(glut_menu_handlers, menu, newSVsv(&PL_sv_undef)); } #//# glutAddMenuEntry($name, $value); void glutAddMenuEntry(name, value) char * name int value #//# glutAddSubMenu($name, $menu); void glutAddSubMenu(name, menu) char * name int menu #//# glutChangeToMenuEntry($entry, $name, $value); void glutChangeToMenuEntry(entry, name, value) int entry char * name int value #//# glutChangeToSubMenu($entry, $name, $menu); void glutChangeToSubMenu(entry, name, menu) int entry char * name int menu #//# glutRemoveMenuItem($entry); void glutRemoveMenuItem(entry) int entry #//# glutAttachMenu(button); void glutAttachMenu(button) int button #//# glutDetachMenu(button); void glutDetachMenu(button) int button # Callbacks #//# glutDisplayFunc(\&callback); void glutDisplayFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs_nullfail(Display, ("Display function must be specified")) #if GLUT_API_VERSION >= 3 #//# glutOverlayDisplayFunc(\&callback); void glutOverlayDisplayFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(OverlayDisplay) #endif #//# glutReshapeFunc(\&callback); void glutReshapeFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Reshape) #//# glutKeyboardFunc(\&callback); void glutKeyboardFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Keyboard) #if GLUT_API_VERSION >= 4 #//# glutKeyboardUpFunc(\&callback); void glutKeyboardUpFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(KeyboardUp) #//# glutWindowStatusFunc(\&callback); void glutWindowStatusFunc(handler=0, ...) SV * handler CODE: { #if defined HAVE_FREEGLUT decl_gwh_xs(WindowStatus) #endif } #endif #//# glutMouseFunc(\&callback); void glutMouseFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Mouse) #//# glutMouseWheelFunc(\&callback); void glutMouseWheelFunc(handler=0, ...) SV * handler CODE: { #if defined HAVE_FREEGLUT decl_gwh_xs(MouseWheel) #endif } #//# glutMotionFunc(\&callback); void glutMotionFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Motion) #//# glutPassiveMotionFunc(\&callback); void glutPassiveMotionFunc(handler=0, ...) SV * handler CODE: { #if defined HAVE_FREEGLUT decl_gwh_xs(PassiveMotion) #endif } #//# glutVisibilityFunc(\&callback); void glutVisibilityFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Visibility) #//# glutEntryFunc(\&callback); void glutEntryFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Entry) #if GLUT_API_VERSION >= 2 #//# glutSpecialFunc(\&callback); void glutSpecialFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Special) #//# glutJoystickFunc(\&callback); /* Open/FreeGLUT -chm */ # void /* Not implemented, don't know how */ # glutJoystickFunc(handler=0, ...) # SV * handler # CODE: # decl_gwh_xs(Joystick) #//# glutSpaceballMotionFunc(\&callback); void glutSpaceballMotionFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(SpaceballMotion) #//# glutSpaceballRotateFunc(\&callback); void glutSpaceballRotateFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(SpaceballRotate) #//# glutSpaceballButtonFunc(\&callback); void glutSpaceballButtonFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(SpaceballButton) #//# glutButtonBoxFunc(\&callback); void glutButtonBoxFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(ButtonBox) #//# glutDialsFunc(\&callback); void glutDialsFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(Dials) #//# glutTabletMotionFunc(\&callback); void glutTabletMotionFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(TabletMotion) #//# glutTabletButtonFunc(\&callback); void glutTabletButtonFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(TabletButton) #endif #if GLUT_API_VERSION >= 3 #//# glutMenuStatusFunc(\&callback); void glutMenuStatusFunc(handler=0, ...) SV * handler CODE: decl_ggh_xs(MenuStatus) #endif #//# glutMenuStateFunc(\&callback); void glutMenuStateFunc(handler=0, ...) SV * handler CODE: { #if defined HAVE_FREEGLUT decl_ggh_xs(MenuState) #endif } #//# glutIdleFunc(\&callback); void glutIdleFunc(handler=0, ...) SV * handler CODE: decl_ggh_xs(Idle) #//# glutTimerFunc($msecs, \&callback); void glutTimerFunc(msecs, handler=0, ...) unsigned int msecs SV * handler CODE: { if (!handler || !SvOK(handler)) { croak("A handler must be specified"); } else { AV * handler_data = newAV(); PackCallbackST(handler_data, 1); glutTimerFunc(msecs, generic_glut_timer_handler, (int)handler_data); } ENSURE_callback_thread;} # Colors #//# glutSetColor($cell, $red, $green, $blue) void glutSetColor(cell, red, green, blue) int cell GLfloat red GLfloat green GLfloat blue #//# glutGetColor($cell, $component); GLfloat glutGetColor(cell, component) int cell int component #//# glutCopyColormap($win); void glutCopyColormap(win) int win # State #//# glutGet($state); int glutGet(state) GLenum state #if GLUT_API_VERSION >= 3 #//# glutLayerGet(info); int glutLayerGet(info) GLenum info #endif int glutDeviceGet(info) GLenum info #if GLUT_API_VERSION >= 3 #//# glutGetModifiers(); int glutGetModifiers() #endif #if GLUT_API_VERSION >= 2 #//# glutExtensionSupported($extension); int glutExtensionSupported(extension) char * extension #endif # Font #//# glutBitmapCharacter($font, $character); void glutBitmapCharacter(font, character) void * font int character #//# glutStrokeCharacter($font, $character); void glutStrokeCharacter(font, character) void * font int character #//# glutBitmapWidth($font, $character); int glutBitmapWidth(font, character) void * font int character #//# glutStrokeWidth($font, $character); int glutStrokeWidth(font, character) void * font int character #if GLUT_API_VERSION >= 3 #//# glutIgnoreKeyRepeat($ignore); void glutIgnoreKeyRepeat(ignore) int ignore #//# glutSetKeyRepeat($repeatMode); void glutSetKeyRepeat(repeatMode) int repeatMode #//# glutForceJoystickFunc(); void glutForceJoystickFunc() #endif # Solids #//# glutSolidSphere($radius, $slices, $stacks); void glutSolidSphere(radius, slices, stacks) GLdouble radius GLint slices GLint stacks #//# glutWireSphere($radius, $slices, $stacks); void glutWireSphere(radius, slices, stacks) GLdouble radius GLint slices GLint stacks #//# glutSolidCube($size); void glutSolidCube(size) GLdouble size #//# glutWireCube($size); void glutWireCube(size) GLdouble size #//# glutSolidCone($base, $height, $slices, $stacks); void glutSolidCone(base, height, slices, stacks) GLdouble base GLdouble height GLint slices GLint stacks #//# glutWireCone($base, $height, $slices, $stacks); void glutWireCone(base, height, slices, stacks) GLdouble base GLdouble height GLint slices GLint stacks #//# glutSolidTorus($innerRadius, $outerRadius, $nsides, $rings); void glutSolidTorus(innerRadius, outerRadius, nsides, rings) GLdouble innerRadius GLdouble outerRadius GLint nsides GLint rings #//# glutWireTorus($innerRadius, $outerRadius, $nsides, $rings); void glutWireTorus(innerRadius, outerRadius, nsides, rings) GLdouble innerRadius GLdouble outerRadius GLint nsides GLint rings #//# glutSolidDodecahedron(); void glutSolidDodecahedron() #//# glutWireDodecahedron(); void glutWireDodecahedron() #//# glutSolidOctahedron(); void glutSolidOctahedron() #//# glutWireOctahedron(); void glutWireOctahedron() #//# glutSolidTetrahedron(); void glutSolidTetrahedron() #//# glutWireTetrahedron(); void glutWireTetrahedron() #//# glutSolidIcosahedron(); void glutSolidIcosahedron() #//# glutWireIcosahedron(); void glutWireIcosahedron() #//# glutSolidTeapot(size); void glutSolidTeapot(size) GLdouble size #//# glutWireTeapot($size); void glutWireTeapot(size) GLdouble size #if GLUT_API_VERSION >= 4 #//# glutSpecialUpFunc(\&callback); void glutSpecialUpFunc(handler=0, ...) SV * handler CODE: decl_gwh_xs(SpecialUp) #//# glutGameModeString($string); GLboolean glutGameModeString(string) char * string CODE: { char mode[1024]; if (!string || !string[0]) { int w = glutGet(0x00C8); // GLUT_SCREEN_WIDTH int h = glutGet(0x00C9); // GLUT_SCREEN_HEIGHT sprintf(mode,"%dx%d:%d@%d",w,h,32,60); string = mode; } glutGameModeString(string); RETVAL = glutGameModeGet(0x0001); // GLUT_GAME_MODE_POSSIBLE } OUTPUT: RETVAL #//# glutEnterGameMode(); int glutEnterGameMode() #//# glutLeaveGameMode(); void glutLeaveGameMode() #//# glutGameModeGet($mode); int glutGameModeGet(mode) GLenum mode #//# FreeGLUT/OpenGLUT feature #//# int glutBitmapHeight (void *font) int glutBitmapHeight(font) void * font CODE: { #if defined HAVE_FREEGLUT RETVAL = glutBitmapHeight(font); #endif } #//# FreeGLUT/OpenGLUT feature #//# int glutBitmapLength (void *font, const unsigned char *string) int glutBitmapLength(font, string) void * font const unsigned char * string CODE: { #if defined HAVE_FREEGLUT RETVAL = glutBitmapLength(font, string); #endif } #//# FreeGLUT/OpenGLUT feature #//# void glutBitmapString (void *font, const unsigned char *string) void glutBitmapString(font, string) void * font const unsigned char * string CODE: { #if defined HAVE_FREEGLUT glutBitmapString(font, string); #else int len, i; len = (int) strlen(string); for (i = 0; i < len; i++) { glutBitmapCharacter(font, string[i]); } #endif } #//# FreeGLUT/OpenGLUT feature #//# void * glutGetProcAddress (const char *procName) # void * # glutGetProcAddress(procName) # const char * procName #//# FreeGLUT/OpenGLUT feature #//# void glutMainLoopEvent (void) void glutMainLoopEvent() CODE: { #if defined HAVE_AGL_GLUT glutCheckLoop(); #elif defined HAVE_FREEGLUT glutMainLoopEvent(); #endif } #//# void glutPostWindowOverlayRedisplay (int windowID) void glutPostWindowOverlayRedisplay(windowID) int windowID #//# void glutPostWindowRedisplay (int windowID) void glutPostWindowRedisplay(windowID) int windowID #//# void glutReportErrors (void) void glutReportErrors() #//# void glutSolidCylinder (GLdouble radius, GLdouble height, GLint slices, GLint stacks) void glutSolidCylinder(radius, height, slices, stacks) GLdouble radius GLdouble height GLint slices GLint stacks CODE: { #if defined HAVE_FREEGLUT glutSolidCylinder(radius, height, slices, stacks); #endif } #//# void glutSolidRhombicDodecahedron (void) void glutSolidRhombicDodecahedron() CODE: { #if defined HAVE_FREEGLUT glutSolidRhombicDodecahedron(); #endif } #//# float glutStrokeHeight (void *font) GLfloat glutStrokeHeight(font) void * font CODE: { #if defined HAVE_FREEGLUT RETVAL = glutStrokeHeight(font); #endif } #//# float glutStrokeLength (void *font, const unsigned char *string) GLfloat glutStrokeLength(font, string) void * font const unsigned char * string #//# void glutStrokeString (void *fontID, const unsigned char *string) void glutStrokeString(font, string) void * font const unsigned char * string CODE: { #if defined HAVE_FREEGLUT glutStrokeString(font, string); #endif } #//# void glutWarpPointer (int x, int y) void glutWarpPointer(x, y) int x int y #//# void glutWireCylinder (GLdouble radius, GLdouble height, GLint slices, GLint stacks) void glutWireCylinder(radius, height, slices, stacks) GLdouble radius GLdouble height GLint slices GLint stacks CODE: { #if defined HAVE_FREEGLUT glutWireCylinder(radius, height, slices, stacks); #endif } #//# void glutWireRhombicDodecahedron (void) void glutWireRhombicDodecahedron() CODE: { #if defined HAVE_FREEGLUT glutWireRhombicDodecahedron(); #endif } #endif # /* FreeGLUT APIs */ #//# glutSetOption($option_flag, $value); void glutSetOption(option_flag, value) GLenum option_flag int value CODE: { #if defined HAVE_FREEGLUT glutSetOption(option_flag, value); #endif } #//# glutLeaveMainLoop(); void glutLeaveMainLoop() CODE: { #if defined HAVE_FREEGLUT glutLeaveMainLoop(); #else int win = glutGetWindow(); glutDestroyWindow(win); destroy_glut_win_handlers(win); #endif } #//# glutMenuDestroyFunc(\&callback); void glutMenuDestroyFunc(handler=0, ...) SV * handler CODE: { #if defined HAVE_FREEGLUT decl_gwh_xs(MenuDestroy) #endif } #//# glutCloseFunc(\&callback); void glutCloseFunc(handler=0, ...) SV * handler CODE: { if (_done_glutCloseFunc_warn == 0) { warn("glutCloseFunc: not implemented\n"); _done_glutCloseFunc_warn++; } } libopengl-perl-0.6704+dfsg.orig/MANIFEST.SKIP0000644000175000017500000000172512334200655017600 0ustar gregoagregoa #!start included /usr/lib/perl5/5.10/ExtUtils/MANIFEST.SKIP # Avoid version control files. \bRCS\b \bCVS\b \bSCCS\b ,v$ \B\.svn\b \b_darcs\b # Avoid Makemaker generated and utility files. \bMANIFEST\.bak \bblib/ \bMakeMaker-\d \bpm_to_blib\.ts$ \bpm_to_blib$ \bblibdirs\.ts$ # 6.18 through 6.25 generated this # Avoid Module::Build generated and utility files. \bBuild$ \b_build/ # Avoid temp and backup files. ~$ \.old$ \#$ \b\.# \.bak$ \.swp$ # Avoid Devel::Cover files. \bcover_db\b # Don't include extra DLL and lib files ^FreeGLUT/new.* ^FreeGLUT/orig.* #!end included /usr/lib/perl5/5.10/ExtUtils/MANIFEST.SKIP EL-ELI.c ^.*.tar.gz ^.git ^Config.pm ^Makefile$ ^MYMETA.json ^MYMETA.yml ^META.yml$ ^OpenGL.bs ^OpenGL.c ^OpenGL.o ^gl-funs.txt ^gl_exclude.h$ ^gl_util.o ^gllist ^pdl.h ^pogl_\w*\.c ^pogl_\w*\.o cpp.sh freeglut-funs-name.txt ^ogl-calls-in-test.txt pogl_gl_funcs.txt utils/glversion.exe utils/glversion.o utils/glversion.txt utils/glxinfo.c test.png libopengl-perl-0.6704+dfsg.orig/pogl_gl_Pixe_Ver2.xs0000644000175000017500000007747512334200655021603 0ustar gregoagregoa/* Last saved: Fri 26 Aug 2011 10:48:16 AM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::PixeVer2 PACKAGE = OpenGL #ifdef HAVE_GL #// 1.0 #//# glPixelMapfv_c($map, $mapsize, (CPTR)values); void glPixelMapfv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapfv(map, mapsize, values); #// 1.0 #//# glPixelMapuiv_c($map, $mapsize, (CPTR)values); void glPixelMapuiv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapuiv(map, mapsize, values); #// 1.0 #//# glPixelMapusv_c($map, $mapsize, (CPTR)values); void glPixelMapusv_c(map, mapsize, values) GLenum map GLsizei mapsize void * values CODE: glPixelMapusv(map, mapsize, values); #// 1.0 #//# glPixelMapfv_s($map, $mapsize, (PACKED)values); void glPixelMapfv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLfloat * values_s = EL(values, sizeof(GLfloat)*mapsize); glPixelMapfv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapuiv_s($map, $mapsize, (PACKED)values); void glPixelMapuiv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLuint * values_s = EL(values, sizeof(GLuint)*mapsize); glPixelMapuiv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapusv_s($map, $mapsize, (PACKED)values); void glPixelMapusv_s(map, mapsize, values) GLenum map GLsizei mapsize SV * values CODE: { GLushort * values_s = EL(values, sizeof(GLushort)*mapsize); glPixelMapusv(map, mapsize, values_s); } #// 1.0 #//# glPixelMapfv_p($map, @values); void glPixelMapfv_p(map, ...) GLenum map CODE: { GLint mapsize = items-1; GLfloat * values; int i; values = malloc(sizeof(GLfloat) * (mapsize+1)); for (i=0;ibind); } glTexCoordPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data); #else glTexCoordPointer(size, oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glTexEnvf($target, $pname, $param); void glTexEnvf(target, pname, param) GLenum target GLenum pname GLfloat param #// 1.0 #//# glTexEnvi($target, $pname, $param); void glTexEnvi(target, pname, param) GLenum target GLenum pname GLint param #// 1.0 #//# glTexEnvfv_s(target, pname, (PACKED)params); void glTexEnvfv_s(target, pname, params) GLenum target GLenum pname SV * params CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat)*gl_texenv_count(pname)); glTexEnvfv(target, pname, params_s); } #// 1.0 #//# glTexEnviv_s(target, pname, (PACKED)params); void glTexEnviv_s(target, pname, params) GLenum target GLenum pname SV * params CODE: { GLint * params_s = EL(params, sizeof(GLint)*gl_texenv_count(pname)); glTexEnviv(target, pname, params_s); } #// 1.0 #//# glTexEnvfv_p(target, pname, @params); void glTexEnvfv_p(target, pname, ...) GLenum target GLenum pname CODE: { GLfloat p[MAX_GL_TEXENV_COUNT]; int n = items-2; int i; if (n != gl_texenv_count(pname)) croak("Incorrect number of arguments"); for (i=2;ibind); } glVertexPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data); #else glVertexPointer(size, oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glViewport($x, $y, $width, $height); void glViewport(x, y, width, height) GLint x GLint y GLsizei width GLsizei height # Generated declarations #//# glVertex2d($x, $y); void glVertex2d(x, y) GLdouble x GLdouble y #//# glVertex2dv_c((CPTR)v); void glVertex2dv_c(v) void * v CODE: glVertex2dv(v); #//# glVertex2dv_s((PACKED)v); void glVertex2dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*2); glVertex2dv(v_s); } #//!!! Do we really need this? It duplicates glVertex2d #//# glVertex2dv_p($x, $y); void glVertex2dv_p(x, y) GLdouble x GLdouble y CODE: { GLdouble param[2]; param[0] = x; param[1] = y; glVertex2dv(param); } #//# glVertex2f($x, $y); void glVertex2f(x, y) GLfloat x GLfloat y #//# glVertex2f_s((PACKED)v); void glVertex2fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*2); glVertex2fv(v_s); } #//# glVertex2f_s((CPTR)v); void glVertex2fv_c(v) void * v CODE: glVertex2fv(v); #//!!! Do we really need this? It duplicates glVertex2f #//# glVertex2fv_p($x, $y); void glVertex2fv_p(x, y) GLfloat x GLfloat y CODE: { GLfloat param[2]; param[0] = x; param[1] = y; glVertex2fv(param); } #//# glVertex2i($x, $y); void glVertex2i(x, y) GLint x GLint y #//# glVertex2iv_c((CPTR)v); void glVertex2iv_c(v) void * v CODE: glVertex2iv(v); #//# glVertex2iv_s((PACKED)v); void glVertex2iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*2); glVertex2iv(v_s); } #//!!! Do we really need this? It duplicates glVertex2i #//# glVertex2iv_p($x, $y); void glVertex2iv_p(x, y) GLint x GLint y CODE: { GLint param[2]; param[0] = x; param[1] = y; glVertex2iv(param); } #//# glVertex2s($x, $y); void glVertex2s(x, y) GLshort x GLshort y #//# glVertex2sv_c((CPTR)v); void glVertex2sv_c(v) void * v CODE: glVertex2sv(v); #//# glVertex2sv_c((PACKED)v); void glVertex2sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*2); glVertex2sv(v_s); } #//!!! Do we really need this? It duplicates glVertex2s #//# glVertex2sv_p($x, $y); void glVertex2sv_p(x, y) GLshort x GLshort y CODE: { GLshort param[2]; param[0] = x; param[1] = y; glVertex2sv(param); } #endif /* HAVE_GL */ libopengl-perl-0.6704+dfsg.orig/INSTALL0000644000175000017500000001167612334200655016741 0ustar gregoagregoa To install the OpenGL module, please follow these instructions: 1. Update your development environment with the latest OpenGL header and lib files. If you are using a GPU, get the latest drivers from your vendor. Install FreeGLUT (or compatible) - you can find this at http://freeglut.sourceforge.net/. NOTE: Strawberry Perl includes the FreeGLUT library and the binary distributions at http://www.sisyphusion.tk provide the needed FreeGLUT as well. On 32-bit MS Windows, a binary FreeGLUT library is installed automatically by this module if needed. On Mac OS X (Leopard and newer), GLUT is available in the default OpenGL programming environment with sufficient extensions (added by Apple) to support full functionality. On most Linux distributions FreeGLUT is available via their package installers. The 'include' subfolder provided with this module contains headers that this module has been tested with. This module looks for libGL.so, libGLU.so and libglut.so (opengl32.dll, glu32.dll and freeglut.dll on Windows) in the normal places for your OS installation. You may need to symlink libraries from various vendors to the proper place/names. Note: If you will be installing OpenGL::Image, it is recommended, but not required, that you install PerlMagick (6.3.5 or newer) first, as this will dramatically simplify and enhance your ability/performance in loading/saving images/textures via OpenGL::Image - see INSTALL note in the OpenGL::Image module. 2. Run 'perl Makefile.PL' Makefile.PL attempts to detemine your OS and available libs. You can override these defaults by specifying addiional options, shown in square brackets []: perl Makefile.PL [verbose] [interface=] [dist=] The "verbose" option provides additional diagnostic output messages which can be helpful for troubleshooting and bug reports. For the "interface" option, is one of the following strings: FREEGLUT Default window interface GLUT Fallback if FreeGLUT is not available AGL GLUT framework on Mac OS X GLX Legacy X11+GLX, use FreeGLUT instead W32API FreeGLUT and W32API OpenGL on CYGWIN WGL Same as W32API Specifying the interface directly should not be needed except where there is some ambiguity in the available interfaces (i.e. you have FreeGLUT, GLUT, and GLX on your system). If you have FreeGLUT and OpenGL installed, it should just work with the defaults. *Please* let us know if it doesn't. Makefile.PL will attempt to build and run a glversion utility to determine what version and extensions your OpenGL installation supports, and will create an gl_exclude.h header file to exclude APIs your libraries do not support. You can manually edit this file to override excluded extensions. Note: glversion assumes libGL.so and libglut.so (opengl32.dll and freeglut.dll on Windows) - and that it will be run via a GUI window (eg. X11 on Unix). This may impact automated build systems. For building POGL without extension exclusions, use: perl Makefile.PL dist=NO_EXCLUSIONS Note: NO_EXCLUSIONS is the default for Windows; this can be overridden by using the EXCLUSIONS option. To install in non-standard locations, use the PREFIX and LIB options when generating the Makefiles: perl Makefile.PL prefix=/PREFIXPATH [LIB=/PREFIXPATH/perl/lib] where PREFIXPATH is the path of the directory where you wish the module to be installed (e.g. binary executables in /PREFIXPATH/bin, manual pages in /PREFIXPATH/man, library files in /PREFIXPATH/lib...). The LIB option allows you to control where the perl module stuff goes rather than the default /PREFIXPATH/lib/perl5). Then either set the PERL5LIB environment variable before you run scripts that use the modules/libraries (see perlrun) or in your programs say: use lib '/PREFIXPATH/perl/lib'; 3. Run 'make' ('nmake' on Windows, 'dmake' on MinGW) to build OpenGL. 4. Run 'make test' ('nmake test' on Windows, 'dmake test' on MinGW) to test your installation. You must have GLUT installed in order to run this test. You should see a spinning cube with textured surfaces. Press 'q' to quit/complete the test (the test window must have focus). Note: Automated builds will normally fail this test, as it requires the ability to open a GL context (window) and provide user input. 5. If all is well, run 'sudo make install' ('nmake install on Windows', and 'dmake install' with MinGW) to intall the OpenGL module onto your system. 6. It is recommended (though not required) that you also install the OpenGL::Image and OpenGL::Shader modules to enhance POGL's features. Read the included README files for additional notes on your particular platform. libopengl-perl-0.6704+dfsg.orig/typemap0000644000175000017500000000112512334200655017276 0ustar gregoagregoaTYPEMAP const unsigned char * T_PV Display * T_PTR GLsizei T_INT GLfloat T_FLOAT GLdouble T_DOUBLE GLclampf T_FLOAT GLclampd T_DOUBLE GLint T_INT GLuint T_U_INT GLushort T_U_SHORT GLint T_INT GLbyte T_INT GLubyte T_U_INT GLshort T_SHORT GLboolean T_BOOL GLenum T_INT GLbitfield T_INT GLcharARB T_CHAR GLhandleARB T_U_INT GLUnurbsObj * T_PTROBJ GLUquadricObj * T_PTROBJ PGLUtess * T_PTROBJ OpenGL::Array T_PTROBJ GLXDrawable T_PTR INPUT T_FASTPTROBJ $var = INT2PTR($type,SvIV($arg)); OUTPUT T_FASTPTROBJ sv_setref_pv($arg, \"${ntype}\", (void*)$var); libopengl-perl-0.6704+dfsg.orig/Array.pod0000644000175000017500000002522212334204244017460 0ustar gregoagregoa=head1 NAME OpenGL::Array - Perl Array handling and conversion between Perl arrays and C array pointers. =head1 SYNOPSIS use OpenGL qw(GL_FLOAT); my $array = OpenGL::Array->new(4, GL_FLOAT); my $c_ptr = $array->ptr(); # can be passed to OpenGL _c based functions $array->calc('col,27,+'); my @val = $array->retrieve(0, 4); =head1 DESCRIPTION OpenGL::Array (OGA) objects provide Perl Array handling and conversion between Perl arrays and C array pointers. Due to the difference between how Perl and C handle pointers, all Perl OpenGL (POGL) APIs that require pointers are suffixed with _c. OGAs provide a means to convert Perl arrays into C pointers that can be passed into these APIs. Many POGL _c APIs also have a _s version to support SDL's packed string APIs; OGA provides APIs to convert between C arrays and packed strings. POGL also provides many _p APIs that accept native Perl arrays, or in some cases OGAs directly. In the case of VBOs, OGAs may be bound to GPU buffers, automatically switching buffers at render time. Note: Since OGAs are stored as typed C arrays, there is no conversion/copy/casting when passing them to POGL APIs, resulting in significant performance improvements over other non-compiled bindings (SDL, PyOpenGL, etc). =head1 CREATING OpenGL::Array OBJECTS =over 4 =item C my $array = OpenGL::Array->new($count,@types); Creates an empty array object of $count rows made up data types @types. =item C my $array = OpenGL::Array->new_list($type,@data); Creates and populates a uniform array object made up @data of type $type. =item C my $array = OpenGL::Array->new_pointer($type,ptr,$elements); Creates an array object wrapper around a C pointer ptr of type $type and array length $elements. Caches C pointer directly; does not copy data. Note: because OpenGL::Arrays store to direct memory addresses, it is possible to assign to the array the pointer was obtained from and the results will be available in the array created by new_pointer - and vice versa (because they are viewing portions of the same memory). =item C my $str = pack 'C*', 1 .. 255; my $array = OpenGL::Array->new_scalar(GL_UNSIGNED_BYTE, $str, length($str)); Creates an array object from a perl scalar. =item C my $array1 = OpenGL::Array->new_list(GL_UNSIGNED_BYTE, 1..9); my $array2 = OpenGL::Array->new_from_pointer($array1->ptr(), 9); Special case, creates a uniform GL_UNSIGNED_BYTE from a pointer. =back =head1 USING OpenGL::Array OBJECT'S C POINTERS OpenGL::Array objects are Perl references; in order to use them in OpenGL APIs that expect C pointers, you need to use the native pointer: my $array = OpenGL::Array->new(4, GL_INT); glGetIntegerv_c(GL_VIEWPORT, $array->ptr); my @viewport = $array->retrieve(0, 4); =head1 OpenGL::Array ACCESSORS =over 4 =item C $array->assign($pos, @data); Sets array data starting at element position $pos using @data. =item C $array->assign_data($pos, $data); Sets array data element position $pos using packed string $data. =item C my @data = $array->retrieve($pos, $len); Returns an array of $len elements from an array object. =item C my $data = $array->retrieve_data($pos, $len); Returns a packed string of length $len bytes from an array object. =item C my $count = $array->elements(); Returns the element count from an array object. =item C ptr = $array->ptr(); # typically passed to opengl _c functions Returns a C pointer to an array object. Returns a C pointer to an array object. =item C ptr = $array->offset($pos); Returns a C pointer to the $pos element of an array object. =item C $array->update_pointer($ptr); Points the existing OpenGL::Array to a different data pointer. =back =head1 BINDING TO VBOs Helps abstract Vertex Array and VBO rendering. # Requires GL_ARB_vertex_buffer_object extension and POGL 0.55_01 or newer =over 4 =item C $array->bind($id); Binds a GPU buffer to an array object. If bound, glXxxPointer_p APIs will call glBindBufferARB. =item C my $id = $array->bound(); Return bound buffer ID, or 0 if not bound. =back =head1 AFFINE TRANSFORMS ON OpenGL::Array OBJECTS Eventually, this API will abstract CPU vs GPU-based affine transforms for the best performance. =over 4 =item C $array->affine($xform); # $xform is an NxN OpenGL::Array object used to transform $array. #N must be one element wider than the width of the array. =back =head1 Calc: POPULATING AND MANIPULATING OpenGL::Array OBJECTS =over 4 =item C Used to populate or mathematically modify an POGL array. Uses Reverse Polish Notation (RPN) for mathematical operations. At the moment, any array used with calc must be made of only of GL_FLOAT types. $array->calc($value); Populates the array with $value. $array->calc(@values); Populates each row of the array with @values, assuming rows have the same width as the length of @values. If the number of passed values must be evenly divisible by the number of elements in the array. The number of values becomes the number of "columns." The number of "rows" is the total number of elements of the array divided by the columns. $array->calc(1.0, '3,*', '2,*,rand,+', ''); Resets the first column of each row to 1.0; multiplies the values in the second column by 3; multiplies the third column by 2, then adds a random number between 0 and 1; leaves the fourth column alone. During this particular calc operation there would be 4 columns. C maintains a push/pop stack and a "register" for each column. C also allows for other OpenGL::Arrays to be passed in. If multiple arrays are passed they must all have the same number of elements. Only the calling array will be operated on, but as each element is visited, the values from the other arrays are pre-added to the stack (in reverse order). $array->calc($array2, $array3, $array4, @values); calc currently suports the following primitives: =over 4 =item C Logical "Not" for End of Stack (S0) for the current column; becomes 1.0 if empty or 0. otherwise 1.0 =item C<-> Arithmetic Negation of S0 =item C<+> Add S0 and Next on Stack (S1), pop operands and push result (Result) =item C<*> Multiply S0 and S1; Result =item C Divide S1 by S0; Result =item C<%> S1 Modulus S0; Result =item C<=> Test S0 equality to S1; pop operands and push non-zero (1.0) for true, otherwise 0.0 (Boolean) =item C<< > >> Test if S0 Greater than S1; Boolean =item C<< < >> Test if S0 Lesser than S1; Boolean =item C If S0 is true (non-zero), pop S0 and S1; otherwise pop s0-3, push s1 =item C Pop s0 =item C Push a random number from 0.0 to 1.0 =item C Push a copy of S0 =item C Swap values of S0 and S1 =item C Copy S0 to the column's Register =item C Push the column's Register onto the column's Stack =item C Pop S0, and copy the values from the matching row of the passed OpenGL::Array at that index. Values are copied into the current column registers. my $o1 = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); my $o2 = OpenGL::Array->new_list(GL_FLOAT, 7, 8 ,9, 10, 11, 12); $o1->calc($o2, "1,store,get","","get"); $o1->retreive(0,6) will be (7, 2, 9, 10, 5, 12) =item C Pop S0, and set the values of the matching row of the passed OpenGL::Array named at that index. Values are copied from the current column registers. my $o1 = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); my $o2 = OpenGL::Array->new_list(GL_FLOAT, 7, 8 ,9, 10, 11, 12); $o1->calc($o2, "set","", "set,1,load"); $o2->retreive(0,6) will be (1, 0, 3, 5, 0, 6) =item C Pop S0, and push the column S0 value onto the current stack. $o = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); $o->calc('2,colget','',''); # $o->retreive(0,6) will be (3, 2, 3, 6, 5, 6) =item C Pop S0, and set the column S0 value to the new top of the stack. $o = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); $o->calc('27,2,colset','',''); # $o->retreive(0,6) will be (1, 2, 27, 4, 5, 27) =item C Pop S0 and S1, and push the column S0 value from row S1 onto the current stack. $o = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); $o->calc('1,2,rowget','',''); # $o->retreive(0,6) equiv (6, 2, 3, 6, 5, 6) =item C Pop S0 and S1, and set the column S0 value of row S1 to the new top of the stack. $o = OpenGL::Array->new_list(GL_FLOAT, 1, 2, 3, 4, 5, 6); $o->calc('27,1,2,rowset','',''); # $o->retreive(0,6) will be (1, 2, 3, 4, 5, 27) =item C End processing; column unchanged =item C Pop S0, End if true; column unchanged =item C End processing of current row; column unchanged =item C Pop S0, End processing of current row if true; column unchanged =item C End processing; column value set to s0 =item C Pop S0, End if true; column value set to s0 =item C End processing of current row; column value set to s0 =item C Pop S0, End processing of current row if true; column value set to s0 =item C alias to C =item C alias to C<+> =item C alias to C<*> =item C Add 1 to S0 =item C Subtract 1 from S0 =item C Add and pop everything in stack; push result =item C Average and pop everything in stack; push result =item C Replace S0 with its absolute value =item C Raise S1 to the power of S0; Result =item C The lower of S0 and S1; Result =item C The higher of S0 and S1; Result =item C Sine of S0 in Radians; Result =item C Cosine of S0; Result =item C Tangent of S0; Result =item C ArcTangent of S1 over s0; Result =item C Push the number of elements in the array =item C Push the current element index (zero-based) =item C Push the number of columns in the array =item C Push the current column index =item C Push the number of rows in the array =item C Push the current row index =item C Push the the value of PI (but remember calc is just for floats) =item C Print a dump of the current stack to standard out. OpenGL::Array->new_list(GL_FLOAT,7)->calc("dup,dec,2,swap,10,4,set,dump"); Would print: -----------------(row: 0, col: 0)---- Register: 4.0000000 Stack 4: 7.0000000 Stack 3: 2.0000000 Stack 2: 6.0000000 Stack 1: 10.0000000 Stack 0: 4.0000000 =back =back =head1 AUTHOR Bulk of documentation taken from http://graphcomp.com/pogl.cgi?v=0111s3p1&r=s3p6 Additions by Paul Seamons =cut libopengl-perl-0.6704+dfsg.orig/pogl_gl_Tex2_Draw.xs0000644000175000017500000006715112334200655021565 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:10:08 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::Tex2Draw PACKAGE = OpenGL #ifdef HAVE_GL #//# glTexCoord2d($s, $t); void glTexCoord2d(s, t) GLdouble s GLdouble t #//# glTexCoord2dv_c((CPTR)v); void glTexCoord2dv_c(v) void * v CODE: glTexCoord2dv(v); #//# glTexCoord2dv_s((PACKED)v); void glTexCoord2dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*2); glTexCoord2dv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord2d #//# glTexCoord2dv_p($s, $t); void glTexCoord2dv_p(s, t) GLdouble s GLdouble t CODE: { GLdouble param[2]; param[0] = s; param[1] = t; glTexCoord2dv(param); } #//# glTexCoord2f($s, $t); void glTexCoord2f(s, t) GLfloat s GLfloat t #//# glTexCoord2fv_c((CPTR)v); void glTexCoord2fv_c(v) void * v CODE: glTexCoord2fv(v); #//# glTexCoord2fv_s((PACKED)v); void glTexCoord2fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*2); glTexCoord2fv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord2f #//# glTexCoord2fv_p($s, $t); void glTexCoord2fv_p(s, t) GLfloat s GLfloat t CODE: { GLfloat param[2]; param[0] = s; param[1] = t; glTexCoord2fv(param); } #//# glTexCoord2i($s, $t); void glTexCoord2i(s, t) GLint s GLint t #//# glTexCoord2iv_c((CPTR)v); void glTexCoord2iv_c(v) void * v CODE: glTexCoord2iv(v); #//# glTexCoord2iv_s((PACKED)v); void glTexCoord2iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*2); glTexCoord2iv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord2i #//# glTexCoord2iv_p($s, $t); void glTexCoord2iv_p(s, t) GLint s GLint t CODE: { GLint param[2]; param[0] = s; param[1] = t; glTexCoord2iv(param); } #//# glTexCoord2s($s, $t); void glTexCoord2s(s, t) GLshort s GLshort t #//# glTexCoord2sv_c((CPTR)v); void glTexCoord2sv_c(v) void * v CODE: glTexCoord2sv(v); #//# glTexCoord2sv_c((PACKED)v); void glTexCoord2sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*2); glTexCoord2sv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord2s #//# glTexCoord2sv_p($s, $t); void glTexCoord2sv_p(s, t) GLshort s GLshort t CODE: { GLshort param[2]; param[0] = s; param[1] = t; glTexCoord2sv(param); } #//# glTexCoord3d($s, $t, $r); void glTexCoord3d(s, t, r) GLdouble s GLdouble t GLdouble r #//# glTexCoord3dv_c((CPTR)v); void glTexCoord3dv_c(v) void * v CODE: glTexCoord3dv(v); #//# glTexCoord3dv_s((PACKED)v); void glTexCoord3dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glTexCoord3dv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord3d #//# glTexCoord3dv_p($s, $t, $r); void glTexCoord3dv_p(s, t, r) GLdouble s GLdouble t GLdouble r CODE: { GLdouble param[3]; param[0] = s; param[1] = t; param[2] = r; glTexCoord3dv(param); } #//# glTexCoord3f($s, $t, $r); void glTexCoord3f(s, t, r) GLfloat s GLfloat t GLfloat r #//# glTexCoord3fv_c((CPTR)v); void glTexCoord3fv_c(v) void * v CODE: glTexCoord3fv(v); #//# glTexCoord3fv_s((PACKED)v); void glTexCoord3fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glTexCoord3fv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord3f #//# glTexCoord3fv_p($s, $t, $r); void glTexCoord3fv_p(s, t, r) GLfloat s GLfloat t GLfloat r CODE: { GLfloat param[3]; param[0] = s; param[1] = t; param[2] = r; glTexCoord3fv(param); } #//# glTexCoord3i($s, $t, $r); void glTexCoord3i(s, t, r) GLint s GLint t GLint r #//# glTexCoord3iv_c((CPTR)v); void glTexCoord3iv_c(v) void * v CODE: glTexCoord3iv(v); #//# glTexCoord3iv_s((PACKED)v); void glTexCoord3iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*3); glTexCoord3iv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord3i #//# glTexCoord3iv_p($s, $t, $r); void glTexCoord3iv_p(s, t, r) GLint s GLint t GLint r CODE: { GLint param[3]; param[0] = s; param[1] = t; param[2] = r; glTexCoord3iv(param); } #//# glTexCoord3s($s, $t, $r); void glTexCoord3s(s, t, r) GLshort s GLshort t GLshort r #//# glTexCoord3sv_s((PACKED)v); void glTexCoord3sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glTexCoord3sv(v_s); } #//# glTexCoord3sv_c((CPTR)v); void glTexCoord3sv_c(v) void * v CODE: glTexCoord3sv(v); #//!!! Do we really need this? It duplicates glTexCoord3s #//# glTexCoord3sv_p($s, $t, $r); void glTexCoord3sv_p(s, t, r) GLshort s GLshort t GLshort r CODE: { GLshort param[3]; param[0] = s; param[1] = t; param[2] = r; glTexCoord3sv(param); } #//# glTexCoord4d($s, $t, $r, $q); void glTexCoord4d(s, t, r, q) GLdouble s GLdouble t GLdouble r GLdouble q #//# glTexCoord4dv_c((CPTR)v); void glTexCoord4dv_c(v) void * v CODE: glTexCoord4dv(v); #//# glTexCoord4dv_s((PACKED)v); void glTexCoord4dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glTexCoord4dv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord4d #//# glTexCoord4dv_p($s, $t, $r, $q); void glTexCoord4dv_p(s, t, r, q) GLdouble s GLdouble t GLdouble r GLdouble q CODE: { GLdouble param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glTexCoord4dv(param); } #//# glTexCoord4f($s, $t, $r, $q); void glTexCoord4f(s, t, r, q) GLfloat s GLfloat t GLfloat r GLfloat q #//# glTexCoord4fv_c((CPTR)v); void glTexCoord4fv_c(v) void * v CODE: glTexCoord4fv(v); #//# glTexCoord4fv_s((PACKED)v); void glTexCoord4fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glTexCoord4fv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord4f #//# glTexCoord4fv_p($s, $t, $r, $q); void glTexCoord4fv_p(s, t, r, q) GLfloat s GLfloat t GLfloat r GLfloat q CODE: { GLfloat param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glTexCoord4fv(param); } #//# glTexCoord4i($s, $t, $r, $q); void glTexCoord4i(s, t, r, q) GLint s GLint t GLint r GLint q #//# glTexCoord4iv_c((CPTR)v); void glTexCoord4iv_c(v) void * v CODE: glTexCoord4iv(v); #//# glTexCoord4iv_s((PACKED)v); void glTexCoord4iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glTexCoord4iv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord4i #//# glTexCoord4iv_p($s, $t, $r, $q); void glTexCoord4iv_p(s, t, r, q) GLint s GLint t GLint r GLint q CODE: { GLint param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glTexCoord4iv(param); } #//# glTexCoord4s($s, $t, $r, $q); void glTexCoord4s(s, t, r, q) GLshort s GLshort t GLshort r GLshort q #//# glTexCoord4sv_c((CPTR)v); void glTexCoord4sv_c(v) void * v CODE: glTexCoord4sv(v); #//# glTexCoord4sv_s((PACKED)v); void glTexCoord4sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glTexCoord4sv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord4s #//# glTexCoord4sv_p($s, $t, $r, $q); void glTexCoord4sv_p(s, t, r, q) GLshort s GLshort t GLshort r GLshort q CODE: { GLshort param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glTexCoord4sv(param); } #//# glRasterPos2d(x, y); void glRasterPos2d(x, y) GLdouble x GLdouble y #//# glRasterPos2dv_c((CPTR)v); void glRasterPos2dv_c(v) void * v CODE: glRasterPos2dv(v); #//# glRasterPos2dv_s((PACKED)v); void glRasterPos2dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*2); glRasterPos2dv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos2d #//# glRasterPos2dv_p($x, $y); void glRasterPos2dv_p(x, y) GLdouble x GLdouble y CODE: { GLdouble param[2]; param[0] = x; param[1] = y; glRasterPos2dv(param); } #//# glRasterPos2f($x, $y); void glRasterPos2f(x, y) GLfloat x GLfloat y #//# glRasterPos2fv_c((CPTR)v); void glRasterPos2fv_c(v) void * v CODE: glRasterPos2fv(v); #//# glRasterPos2fv_s((PACKED)v); void glRasterPos2fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*2); glRasterPos2fv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos2f #//# glRasterPos2fv_p($x, $y); void glRasterPos2fv_p(x, y) GLfloat x GLfloat y CODE: { GLfloat param[2]; param[0] = x; param[1] = y; glRasterPos2fv(param); } #//# glRasterPos2i($x, $y); void glRasterPos2i(x, y) GLint x GLint y #//# glRasterPos2iv_c((CPTR)v); void glRasterPos2iv_c(v) void * v CODE: glRasterPos2iv(v); #//# glRasterPos2iv_s((PACKED)v); void glRasterPos2iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*2); glRasterPos2iv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos2i #//# glRasterPos2iv_p($x, $y); void glRasterPos2iv_p(x, y) GLint x GLint y CODE: { GLint param[2]; param[0] = x; param[1] = y; glRasterPos2iv(param); } #//# glRasterPos2s($x, $y); void glRasterPos2s(x, y) GLshort x GLshort y #//# glRasterPos2sv_c((CPTR)v); void glRasterPos2sv_c(v) void * v CODE: glRasterPos2sv(v); #//# glRasterPos2sv_s((PACKED)v); void glRasterPos2sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*2); glRasterPos2sv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos2s #//# glRasterPos2sv_p($x, $y); void glRasterPos2sv_p(x, y) GLshort x GLshort y CODE: { GLshort param[2]; param[0] = x; param[1] = y; glRasterPos2sv(param); } #//# glRasterPos3d($x, $y, $z); void glRasterPos3d(x, y, z) GLdouble x GLdouble y GLdouble z #//# glRasterPos3dv_c((CPTR)v); void glRasterPos3dv_c(v) void * v CODE: glRasterPos3dv(v); #//# glRasterPos3dv_s((PACKED)v); void glRasterPos3dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glRasterPos3dv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos3d #//# glRasterPos3dv_p($x, $y, $z); void glRasterPos3dv_p(x, y, z) GLdouble x GLdouble y GLdouble z CODE: { GLdouble param[3]; param[0] = x; param[1] = y; param[2] = z; glRasterPos3dv(param); } #//# glRasterPos3f($x, $y, $z); void glRasterPos3f(x, y, z) GLfloat x GLfloat y GLfloat z #//# glRasterPos3fv_c((CPTR)v); void glRasterPos3fv_c(v) void * v CODE: glRasterPos3fv(v); #//# glRasterPos3fv_s((PACKED)v); void glRasterPos3fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glRasterPos3fv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos3f #//# glRasterPos3fv_p($x, $y, $z); void glRasterPos3fv_p(x, y, z) GLfloat x GLfloat y GLfloat z CODE: { GLfloat param[3]; param[0] = x; param[1] = y; param[2] = z; glRasterPos3fv(param); } #//# glRasterPos3i($x, $y, $z); void glRasterPos3i(x, y, z) GLint x GLint y GLint z #//# glRasterPos3iv_c((CPTR)v); void glRasterPos3iv_c(v) void * v CODE: glRasterPos3iv(v); #//# glRasterPos3iv_s((PACKED)v); void glRasterPos3iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*3); glRasterPos3iv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos3i #//# glRasterPos3iv_p($x, $y, $z); void glRasterPos3iv_p(x, y, z) GLint x GLint y GLint z CODE: { GLint param[3]; param[0] = x; param[1] = y; param[2] = z; glRasterPos3iv(param); } #//# glRasterPos3s($x, $y, $z); void glRasterPos3s(x, y, z) GLshort x GLshort y GLshort z #//# glRasterPos3sv_c((CPTR)v); void glRasterPos3sv_c(v) void * v CODE: glRasterPos3sv(v); #//# glRasterPos3sv_s((PACKED)v); void glRasterPos3sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glRasterPos3sv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos3s #//# glRasterPos3sv_p($x, $y, $z); void glRasterPos3sv_p(x, y, z) GLshort x GLshort y GLshort z CODE: { GLshort param[3]; param[0] = x; param[1] = y; param[2] = z; glRasterPos3sv(param); } #//# glRasterPos4d($x, $y, $z, $w); void glRasterPos4d(x, y, z, w) GLdouble x GLdouble y GLdouble z GLdouble w #//# glRasterPos4dv_c((CPTR)v); void glRasterPos4dv_c(v) void * v CODE: glRasterPos4dv(v); #//# glRasterPos4dv_s((PACKED)v); void glRasterPos4dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glRasterPos4dv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos4d #//# glRasterPos4dv_p($x, $y, $z, $w); void glRasterPos4dv_p(x, y, z, w) GLdouble x GLdouble y GLdouble z GLdouble w CODE: { GLdouble param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glRasterPos4dv(param); } #//# glRasterPos4f($x, $y, $z, $w); void glRasterPos4f(x, y, z, w) GLfloat x GLfloat y GLfloat z GLfloat w #//# glRasterPos4fv_c((CPTR)v); void glRasterPos4fv_c(v) void * v CODE: glRasterPos4fv(v); #//# glRasterPos4fv_s((PACKED)v); void glRasterPos4fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glRasterPos4fv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos4f #//# glRasterPos4fv_p($x, $y, $z, $w); void glRasterPos4fv_p(x, y, z, w) GLfloat x GLfloat y GLfloat z GLfloat w CODE: { GLfloat param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glRasterPos4fv(param); } #//# glRasterPos4i($x, $y, $z, $w); void glRasterPos4i(x, y, z, w) GLint x GLint y GLint z GLint w #//# glRasterPos4iv_c((CPTR)v); void glRasterPos4iv_c(v) void * v CODE: glRasterPos4iv(v); #//# glRasterPos4iv_s((PACKED)v); void glRasterPos4iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glRasterPos4iv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos4i #//# glRasterPos4iv_p($x, $y, $z, $w); void glRasterPos4iv_p(x, y, z, w) GLint x GLint y GLint z GLint w CODE: { GLint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glRasterPos4iv(param); } #//# glRasterPos4s($x, $y, $z, $w); void glRasterPos4s(x, y, z, w) GLshort x GLshort y GLshort z GLshort w #//# glRasterPos4sv_c((CPTR)v); void glRasterPos4sv_c(v) void * v CODE: glRasterPos4sv(v); #//# glRasterPos4sv_s((PACKED)v); void glRasterPos4sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glRasterPos4sv(v_s); } #//!!! Do we really need this? It duplicates glRasterPos4s #//# glRasterPos4sv_p($x, $y, $z, $w); void glRasterPos4sv_p(x, y, z, w) GLshort x GLshort y GLshort z GLshort w CODE: { GLshort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glRasterPos4sv(param); } # End of generated declarations ################## DEPRECATED EXTENSIONS ######################## #ifdef DEPRECATED #ifdef GL_EXT_polygon_offset #// glPolygonOffsetEXT($factor, $bias); void glPolygonOffsetEXT(factor, bias) GLfloat factor GLfloat units #endif #ifdef GL_EXT_texture_object #// glIsTextureEXT($list); GLboolean glIsTextureEXT(list) GLuint list #// glPrioritizeTexturesEXT_p(@textureIDs,@priorities); void glPrioritizeTexturesEXT_p(...) CODE: { GLsizei n = items/2; GLuint * textures = malloc(sizeof(GLuint) * (n+1)); GLclampf * prior = malloc(sizeof(GLclampf) * (n+1)); int i; for (i=0;i #endif /* Use version-detection if available */ #if defined(HAVE_VER) #include "gl_exclude.h" #include "glext_procs.h" #else #endif /* Get a Perl parameter, cast to C type */ #define SvItems(type,offset,count,dst) \ { \ GLuint i; \ switch (type) \ { \ case GL_UNSIGNED_BYTE: \ case GL_BITMAP: \ for (i=0;i<(count);i++) \ { \ ((GLubyte*)(dst))[i] = (GLubyte)SvIV(ST(i+(offset))); \ } \ break; \ case GL_BYTE: \ for (i=0;i<(count);i++) \ { \ ((GLbyte*)(dst))[i] = (GLbyte)SvIV(ST(i+(offset))); \ } \ break; \ case GL_UNSIGNED_SHORT: \ for (i=0;i<(count);i++) \ { \ ((GLushort*)(dst))[i] = (GLushort)SvIV(ST(i+(offset))); \ } \ break; \ case GL_SHORT: \ for (i=0;i<(count);i++) \ { \ ((GLshort*)(dst))[i] = (GLshort)SvIV(ST(i+(offset))); \ } \ break; \ case GL_UNSIGNED_INT: \ for (i=0;i<(count);i++) \ { \ ((GLuint*)(dst))[i] = (GLuint)SvIV(ST(i+(offset))); \ } \ break; \ case GL_INT: \ for (i=0;i<(count);i++) \ { \ ((GLint*)(dst))[i] = (GLint)SvIV(ST(i+(offset))); \ } \ break; \ case GL_FLOAT: \ for (i=0;i<(count);i++) \ { \ ((GLfloat*)(dst))[i] = (GLfloat)SvNV(ST(i+(offset))); \ } \ break; \ case GL_DOUBLE: \ for (i=0;i<(count);i++) \ { \ ((GLdouble*)(dst))[i] = (GLdouble)SvNV(ST(i+(offset))); \ } \ break; \ default: \ croak("unknown type"); \ } \ } #ifndef GL_ADD #define GL_ADD 0x0104 #endif #ifndef GL_ADD_SIGNED_ARB #define GL_ADD_SIGNED_ARB GL_ADD_SIGNED_EXT #endif #ifndef GL_SUBTRACT_ARB #define GL_SUBTRACT_ARB GL_SUBTRACT_EXT #endif #ifndef GL_INTERPOLATE_ARB #define GL_INTERPOLATE_ARB GL_INTERPOLATE_EXT #endif #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 #endif #ifndef GL_TEXTURE_BINDING_3D #define GL_TEXTURE_BINDING_3D 0x806A #endif /* Remap 1.1 extensions */ #ifdef GL_VERSION_1_1 #ifndef GL_VERSION_1_2 #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define GL_EXT_polygon_offset_is_faked 1 #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #define glPolygonOffsetEXT(factor,units) glPolygonOffset((factor),(units)*(float)0x10000) #endif #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define GL_EXT_texture_object_is_faked 1 #define GL_TEXTURE_PRIORITY_EXT GL_TEXTURE_PRIORITY #define GL_TEXTURE_RESIDENT_EXT GL_TEXTURE_RESIDENT #define GL_TEXTURE_1D_BINDING_EXT GL_TEXTURE_BINDING_1D #define GL_TEXTURE_2D_BINDING_EXT GL_TEXTURE_BINDING_2D #define GL_TEXTURE_3D_BINDING_EXT GL_TEXTURE_BINDING_3D #define glAreTexturesResidentEXT(n,textures,residences) glAreTexturesResident(n,textures,residences) #define glBindTextureEXT(target,texture) glBindTexture((target),(texture)) #define glDeleteTexturesEXT(n,textures) glDeleteTextures((n),(textures)) #define glGenTexturesEXT(n,textures) glGenTextures((n),(textures)) #define glIsTextureEXT(list) glIsTexture(list) #define glPrioritizeTexturesEXT(n,textures,priorities) glPrioritizeTextures((n),(textures),(priorities)) #endif #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #define GL_EXT_copy_texture_is_faked 1 #define glCopyTexImage1DEXT(target,level,internalFormat,x,y,width,border) \ glCopyTexImage1D((target),(level),(internalFormat),(x),(y),(width),(border)) #define glCopyTexImage2DEXT(target,level,internalFormat,x,y,width,height,border) \ glCopyTexImage2D((target),(level),(internalFormat),(x),(y),(width),(height),(border)) #define glCopyTexSubImage1DEXT(target,level,xoffset,x,y,width) \ glCopyTexSubImage1D((target),(level),(xoffset),(x),(y),(width)) #define glCopyTexSubImage2DEXT(target,level,xoffset,yoffset,x,y,width,height) \ glCopyTexSubImage2D((target),(level),(xoffset),(yoffset),(x),(y),(width),(height)) #if defined(HAVE_VER) || defined(_WIN32) #define glCopyTexSubImage3DEXT(target,level,xoffset,yoffset,zoffset,x,y,width,height) \ glCopyTexSubImage3D((target),(level),(xoffset),(yoffset),(zoffset),(x),(y),(width),(height)) #else #define glCopyTexSubImage3DEXT(target,level,xoffset,yoffset,zoffset,x,y,width,height) #endif #endif #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define GL_EXT_vertex_array_is_faked 1 #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_EXT GL_VERTEX_ARRAY #define GL_NORMAL_ARRAY_EXT GL_NORMAL_ARRAY #define GL_COLOR_ARRAY_EXT GL_COLOR_ARRAY #define GL_INDEX_ARRAY_EXT GL_INDEX_ARRAY #define GL_TEXCOORD_ARRAY_EXT GL_TEXCOORD_ARRAY #define GL_EDGEFLAG_ARRAY_EXT GL_EDGEFLAG_ARRAY #define GL_TEXTURE_COORD_ARRAY_EXT GL_TEXTURE_COORD_ARRAY #define GL_EDGE_FLAG_ARRAY_EXT GL_EDGE_FLAG_ARRAY #define GL_VERTEX_ARRAY_SIZE_EXT GL_VERTEX_ARRAY_SIZE #define GL_VERTEX_ARRAY_TYPE_EXT GL_VERTEX_ARRAY_TYPE #define GL_VERTEX_ARRAY_STRIDE_EXT GL_VERTEX_ARRAY_STRIDE #define GL_NORMAL_ARRAY_TYPE_EXT GL_NORMAL_ARRAY_TYPE #define GL_NORMAL_ARRAY_STRIDE_EXT GL_NORMAL_ARRAY_STRIDE #define GL_COLOR_ARRAY_SIZE_EXT GL_COLOR_ARRAY_SIZE #define GL_COLOR_ARRAY_TYPE_EXT GL_COLOR_ARRAY_TYPE #define GL_COLOR_ARRAY_STRIDE_EXT GL_COLOR_ARRAY_STRIDE #define GL_INDEX_ARRAY_TYPE_EXT GL_INDEX_ARRAY_TYPE #define GL_INDEX_ARRAY_STRIDE_EXT GL_INDEX_ARRAY_STRIDE #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT GL_TEXTURE_COORD_ARRAY_SIZE #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT GL_TEXTURE_COORD_ARRAY_TYPE #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT GL_TEXTURE_COORD_ARRAY_STRIDE #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT GL_EDGE_FLAG_ARRAY_STRIDE #define GL_VERTEX_ARRAY_POINTER_EXT GL_VERTEX_ARRAY_POINTER #define GL_NORMAL_ARRAY_POINTER_EXT GL_NORMAL_ARRAY_POINTER #define GL_COLOR_ARRAY_POINTER_EXT GL_COLOR_ARRAY_POINTER #define GL_INDEX_ARRAY_POINTER_EXT GL_INDEX_ARRAY_POINTER #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT GL_TEXTURE_COORD_ARRAY_POINTER #define GL_EDGE_FLAG_ARRAY_POINTER_EXT GL_EDGE_FLAG_ARRAY_POINTER #define glArrayElementEXT(i) glArrayElement(i) #define glDrawArraysEXT(mode,first,count) glDrawArrays((mode),(first),(count)) #define glVertexPointerEXT(size,type,stride,count,pointer) \ glVertexPointer((size),(type),(stride),(pointer)) #define glNormalPointerEXT(type,stride,count,pointer) \ glNormalPointer((type),(stride),(pointer)) #define glColorPointerEXT(size,type,stride,count,pointer) \ glColorPointer((size),(type),(stride),(pointer)) #define glIndexPointerEXT(type,stride,count,pointer) \ glIndexPointer((type),(stride),(pointer)) #define glTexCoordPointerEXT(size,type,stride,count,pointer) \ glTexCoordPointer((size),(type),(stride),(pointer)) #define glEdgeFlagPointerEXT(stride,count,pointer) \ glEdgeFlagPointer((stride),(pointer)) #endif #endif #endif /* Remap 1.1 extensions */ #ifndef GL_EXT_Cg_shader #define GL_EXT_Cg_shader 1 #define GL_CG_VERTEX_SHADER_EXT 0x890E #define GL_CG_FRAGMENT_SHADER_EXT 0x890F #endif /* missing defs */ #ifndef GL_CMYK #define GL_CMYK GL_CMYK_EXT #endif #ifndef GL_CMYKA #define GL_CMYKA GL_CMYKA_EXT #endif #ifndef GL_PACK_CMYK_HINT #define GL_PACK_CMYK_HINT GL_PACK_CMYK_HINT_EXT #endif #ifndef GL_UNPACK_CMYK_HINT #define GL_UNPACK_CMYK_HINT GL_UNPACK_CMYK_HINT_EXT #endif #ifndef GL_BLEND_EQUATION_EXT #define GL_BLEND_EQUATION_EXT 0x8009 #endif #ifndef GL_BLEND_COLOR_EXT #define GL_BLEND_COLOR_EXT 0x8005 #endif /* 2.1 defintions */ #if defined(HAVE_VER) || defined(_WIN32) #ifndef NO_GL_VERSION_2_1 #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #endif #define CURRENT_RASTER_SECONDARY_COLOR 0x845F #define FLOAT_MAT2x3 0x8B65 #define FLOAT_MAT2x4 0x8B66 #define FLOAT_MAT3x2 0x8B67 #define FLOAT_MAT3x4 0x8B68 #define FLOAT_MAT4x2 0x8B69 #define FLOAT_MAT4x3 0x8B6A #define SRGB 0x8C40 #define SRGB8 0x8C41 #define SRGB_ALPHA 0x8C42 #define SRGB8_ALPHA8 0x8C43 #define SLUMINANCE_ALPHA 0x8C44 #define SLUMINANCE8_ALPHA8 0x8C45 #define SLUMINANCE 0x8C46 #define SLUMINANCE8 0x8C47 #define COMPRESSED_SRGB 0x8C48 #define COMPRESSED_SRGB_ALPHA 0x8C49 #define COMPRESSED_SLUMINANCE 0x8C4A #define COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #define PIXEL_PACK_BUFFER 0x88EB #define PIXEL_UNPACK_BUFFER 0x88EC #define PIXEL_PACK_BUFFER_BINDING 0x88ED #define PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROCS static PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv = NULL; static PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv = NULL; static PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv = NULL; static PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv = NULL; static PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv = NULL; static PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv = NULL; #endif /* GL_GLEXT_PROCS */ #endif #endif #define MAX_GL_TEXPARAMETER_COUNT 4 extern int gl_texparameter_count(GLenum pname); #define MAX_GL_TEXENV_COUNT 4 extern int gl_texenv_count(GLenum pname); #define MAX_GL_TEXGEN_COUNT 4 extern int gl_texgen_count(GLenum pname); #define MAX_GL_MATERIAL_COUNT 4 extern int gl_material_count(GLenum pname); #define MAX_GL_MAP_COUNT 4 extern int gl_map_count(GLenum target, GLenum query); #define MAX_GL_LIGHT_COUNT 4 extern int gl_light_count(GLenum pname); #define MAX_GL_LIGHTMODEL_COUNT 4 extern int gl_lightmodel_count(GLenum pname); #define MAX_GL_FOG_COUNT 4 extern int gl_fog_count(GLenum pname); #define MAX_GL_GET_COUNT 16 extern int gl_get_count(GLenum param); extern int gl_pixelmap_size(GLenum map); extern int gl_state_count(GLenum state); enum { gl_pixelbuffer_pack = 1, gl_pixelbuffer_unpack = 2, }; extern unsigned long gl_pixelbuffer_size( GLenum format, GLsizei width, GLsizei height, GLenum type, int mode); extern GLvoid * pack_image_ST(SV ** stack, int count, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern GLvoid * allocate_image_ST(GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern SV ** unpack_image_ST(SV ** SP, void * data, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode); extern GLvoid * ELI(SV * sv, GLsizei width, GLsizei height, GLenum format, GLenum type, int mode); extern GLvoid * EL(SV * sv, int needlen); extern int gl_type_size(GLenum type); extern int gl_component_count(GLenum format, GLenum type); struct oga_struct { int type_count, item_count; GLint bind; GLenum * types; GLint * type_offset; int total_types_width; void * data; int data_length; GLuint target, pixel_type, pixel_format, element_size; GLuint affine_handle; GLuint tex_handle[2]; GLuint fbo_handle; int fbo_w, fbo_h; int free_data; }; typedef struct oga_struct oga_struct; typedef oga_struct * OpenGL__Array; libopengl-perl-0.6704+dfsg.orig/pogl_gl_Prog_Clam.xs0000644000175000017500000012553612334200655021633 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:10:05 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::ProgClam PACKAGE = OpenGL #ifdef HAVE_GL #ifdef GL_ARB_vertex_program #//# glProgramLocalParameter4dARB($target,$index,$x,$y,$z,$w); void glProgramLocalParameter4dARB(target,index,x,y,z,w) GLenum target GLuint index GLdouble x GLdouble y GLdouble z GLdouble w INIT: loadProc(glProgramLocalParameter4dARB,"glProgramLocalParameter4dARB"); #//# glProgramLocalParameter4dvARB_c($target,$index,(CPTR)v); void glProgramLocalParameter4dvARB_c(target,index,v) GLenum target GLuint index void * v INIT: loadProc(glProgramLocalParameter4dvARB,"glProgramLocalParameter4dvARB"); CODE: glProgramLocalParameter4dvARB(target,index,(GLdouble*)v); #//# glProgramLocalParameter4dvARB_s($target,$index,(PACKED)v); void glProgramLocalParameter4dvARB_s(target,index,v) GLenum target GLuint index SV * v INIT: loadProc(glProgramLocalParameter4dvARB,"glProgramLocalParameter4dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glProgramLocalParameter4dvARB(target,index,v_s); } #//!!! Do we really need this? It duplicates glProgramLocalParameter4dARB #//# glProgramLocalParameter4dvARB_p($target,$index,$x,$y,$z,$w); void glProgramLocalParameter4dvARB_p(target,index,x,y,z,w) GLenum target GLuint index GLdouble x GLdouble y GLdouble z GLdouble w INIT: loadProc(glProgramLocalParameter4dvARB,"glProgramLocalParameter4dvARB"); CODE: { GLdouble param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glProgramLocalParameter4dvARB(target,index,param); } #//# glProgramLocalParameter4fARB($target,$index,$x,$y,$z,$w); void glProgramLocalParameter4fARB(target,index,x,y,z,w) GLenum target GLuint index GLfloat x GLfloat y GLfloat z GLfloat w INIT: loadProc(glProgramLocalParameter4fARB,"glProgramLocalParameter4fARB"); #//# glProgramLocalParameter4fvARB_c($target,$index,(CPTR)v); void glProgramLocalParameter4fvARB_c(target,index,v) GLenum target GLuint index void * v INIT: loadProc(glProgramLocalParameter4fvARB,"glProgramLocalParameter4fvARB"); CODE: glProgramLocalParameter4fvARB(target,index,(GLfloat*)v); #//# glProgramLocalParameter4fvARB_s($target,$index,(PACKED)v); void glProgramLocalParameter4fvARB_s(target,index,v) GLenum target GLuint index SV * v INIT: loadProc(glProgramLocalParameter4fvARB,"glProgramLocalParameter4fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glProgramLocalParameter4fvARB(target,index,v_s); } #//!!! Do we really need this? It duplicates glProgramLocalParameter4fARB #//# glProgramLocalParameter4fvARB_p($target,$index,$x,$y,$z,$w); void glProgramLocalParameter4fvARB_p(target,index,x,y,z,w) GLenum target GLuint index GLfloat x GLfloat y GLfloat z GLfloat w INIT: loadProc(glProgramLocalParameter4fvARB,"glProgramLocalParameter4fvARB"); CODE: { GLfloat param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glProgramLocalParameter4fvARB(target,index,param); } #//# glGetProgramEnvParameterdvARB_c($target,$index,(CPTR)params); void glGetProgramEnvParameterdvARB_c(target,index,params) GLenum target GLint index void * params INIT: loadProc(glGetProgramEnvParameterdvARB,"glGetProgramEnvParameterdvARB"); CODE: glGetProgramEnvParameterdvARB(target,index,(GLdouble*)params); #//# glGetProgramEnvParameterdvARB_s($target,$index,(PACKED)params); void glGetProgramEnvParameterdvARB_s(target,index,params) GLenum target GLint index SV * params INIT: loadProc(glGetProgramEnvParameterdvARB,"glGetProgramEnvParameterdvARB"); CODE: { GLdouble * params_s = EL(params, sizeof(GLdouble) * 4); glGetProgramEnvParameterdvARB(target,index,params_s); } #//# @params = glGetProgramEnvParameterdvARB_p($target,$index); void glGetProgramEnvParameterdvARB_p(target,index) GLenum target GLint index INIT: loadProc(glGetProgramEnvParameterdvARB,"glGetProgramEnvParameterdvARB"); PPCODE: { GLdouble params[4]; glGetProgramEnvParameterdvARB(target,index,params); EXTEND(sp, 4); PUSHs(sv_2mortal(newSVnv(params[0]))); PUSHs(sv_2mortal(newSVnv(params[1]))); PUSHs(sv_2mortal(newSVnv(params[2]))); PUSHs(sv_2mortal(newSVnv(params[3]))); } #//# glGetProgramEnvParameterfvARB_c($target,$index,(CPTR)params); void glGetProgramEnvParameterfvARB_c(target,index,params) GLenum target GLint index void * params INIT: loadProc(glGetProgramEnvParameterfvARB,"glGetProgramEnvParameterfvARB"); CODE: glGetProgramEnvParameterfvARB(target,index,(GLfloat*)params); #//# glGetProgramEnvParameterfvARB_s($target,$index,(PACKED)params); void glGetProgramEnvParameterfvARB_s(target,index,params) GLenum target GLint index SV * params INIT: loadProc(glGetProgramEnvParameterfvARB,"glGetProgramEnvParameterfvARB"); CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat) * 4); glGetProgramEnvParameterfvARB(target,index,params_s); } #//# @params = glGetProgramEnvParameterfvARB_p($target,$index); void glGetProgramEnvParameterfvARB_p(target,index) GLenum target GLint index INIT: loadProc(glGetProgramEnvParameterfvARB,"glGetProgramEnvParameterfvARB"); PPCODE: { GLfloat params[4]; glGetProgramEnvParameterfvARB(target,index,params); EXTEND(sp, 4); PUSHs(sv_2mortal(newSVnv(params[0]))); PUSHs(sv_2mortal(newSVnv(params[1]))); PUSHs(sv_2mortal(newSVnv(params[2]))); PUSHs(sv_2mortal(newSVnv(params[3]))); } #//# glGetProgramLocalParameterdvARB_c($target,$index,(CPTR)params); void glGetProgramLocalParameterdvARB_c(target,index,params) GLenum target GLint index void * params INIT: loadProc(glGetProgramLocalParameterdvARB,"glGetProgramLocalParameterdvARB"); CODE: glGetProgramLocalParameterdvARB(target,index,(GLdouble*)params); #//# glGetProgramLocalParameterdvARB_s($target,$index,(PACKED)params); void glGetProgramLocalParameterdvARB_s(target,index,params) GLenum target GLint index SV * params INIT: loadProc(glGetProgramLocalParameterdvARB,"glGetProgramLocalParameterdvARB"); CODE: { GLdouble * params_s = EL(params, sizeof(GLdouble) * 4); glGetProgramLocalParameterdvARB(target,index,params_s); } #//# @params = glGetProgramLocalParameterdvARB_p($target,$index); void glGetProgramLocalParameterdvARB_p(target,index) GLenum target GLint index INIT: loadProc(glGetProgramLocalParameterdvARB,"glGetProgramLocalParameterdvARB"); PPCODE: { GLdouble params[4]; glGetProgramLocalParameterdvARB(target,index,params); EXTEND(sp, 4); PUSHs(sv_2mortal(newSVnv(params[0]))); PUSHs(sv_2mortal(newSVnv(params[1]))); PUSHs(sv_2mortal(newSVnv(params[2]))); PUSHs(sv_2mortal(newSVnv(params[3]))); } #//# glGetProgramLocalParameterfvARB_c($target,$index,(CPTR)params); void glGetProgramLocalParameterfvARB_c(target,index,params) GLenum target GLint index void * params INIT: loadProc(glGetProgramLocalParameterfvARB,"glGetProgramLocalParameterfvARB"); CODE: glGetProgramLocalParameterfvARB(target,index,(GLfloat*)params); #//# glGetProgramLocalParameterfvARB_s($target,$index,(PACKED)params); void glGetProgramLocalParameterfvARB_s(target,index,params) GLenum target GLint index SV * params INIT: loadProc(glGetProgramLocalParameterfvARB,"glGetProgramLocalParameterfvARB"); CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat) * 4); glGetProgramLocalParameterfvARB(target,index,params_s); } #//# @params = glGetProgramLocalParameterfvARB_p($target,$index); void glGetProgramLocalParameterfvARB_p(target,index) GLenum target GLint index INIT: loadProc(glGetProgramLocalParameterfvARB,"glGetProgramLocalParameterfvARB"); PPCODE: { GLfloat params[4]; glGetProgramLocalParameterfvARB(target,index,params); EXTEND(sp, 4); PUSHs(sv_2mortal(newSVnv(params[0]))); PUSHs(sv_2mortal(newSVnv(params[1]))); PUSHs(sv_2mortal(newSVnv(params[2]))); PUSHs(sv_2mortal(newSVnv(params[3]))); } #//# glGetProgramivARB_c($target,$pname,(CPTR)params); void glGetProgramivARB_c(target,pname,params) GLenum target GLenum pname void * params INIT: loadProc(glGetProgramivARB,"glGetProgramivARB"); CODE: glGetProgramivARB(target,pname,params); #//# glGetProgramivARB_s($target,$pname,(PACKED)params); void glGetProgramivARB_s(target,pname,params) GLenum target GLenum pname SV * params INIT: loadProc(glGetProgramivARB,"glGetProgramivARB"); CODE: { GLint * params_s = EL(params, sizeof(GLint)*gl_get_count(pname)); glGetProgramivARB(target,pname,params_s); } #//# $value = glGetProgramivARB_p($target,$pname); GLuint glGetProgramivARB_p(target,pname) GLenum target GLenum pname INIT: loadProc(glGetProgramivARB,"glGetProgramivARB"); CODE: { GLuint param; glGetProgramivARB(target,pname,(void *)¶m); RETVAL = param; } OUTPUT: RETVAL #//# glGetProgramStringARB_c(target,pname,(CPTR)string); void glGetProgramStringARB_c(target,pname,string) GLenum target GLenum pname void * string INIT: loadProc(glGetProgramStringARB,"glGetProgramStringARB"); CODE: glGetProgramStringARB(target,pname,string); #//# glGetProgramStringARB_s(target,pname,(PACKED)string); void glGetProgramStringARB_s(target,pname,string) GLenum target GLenum pname SV * string INIT: loadProc(glGetProgramivARB,"glGetProgramivARB"); loadProc(glGetProgramStringARB,"glGetProgramStringARB"); CODE: { GLint len; glGetProgramivARB(target,GL_PROGRAM_LENGTH_ARB,(GLvoid *)&len); if (len) { GLubyte * string_s = EL(string, sizeof(GLubyte)*len); glGetProgramStringARB(target,pname,string_s); } } #//# $string = glGetProgramStringARB_p(target[,pname]); #//- Defaults to GL_PROGRAM_STRING_ARB SV * glGetProgramStringARB_p(target,pname=GL_PROGRAM_STRING_ARB) GLenum target GLenum pname INIT: loadProc(glGetProgramivARB,"glGetProgramivARB"); loadProc(glGetProgramStringARB,"glGetProgramStringARB"); CODE: { GLint len; glGetProgramivARB(target,GL_PROGRAM_LENGTH_ARB,(GLvoid *)&len); if (len) { char * string = malloc(len+1); glGetProgramStringARB(target,pname,(GLubyte*)string); string[len] = 0; if (*string) RETVAL = newSVpv(string, 0); else RETVAL = newSVsv(&PL_sv_undef); free(string); } else { RETVAL = newSVsv(&PL_sv_undef); } } OUTPUT: RETVAL #//# glIsProgramARB(program); GLboolean glIsProgramARB(program) GLuint program INIT: loadProc(glIsProgramARB,"glIsProgramARB"); CODE: { RETVAL = glIsProgramARB(program); } OUTPUT: RETVAL #endif #if defined(GL_ARB_vertex_program) || defined(GL_ARB_vertex_shader) #//# glVertexAttrib1dARB($index,$x); void glVertexAttrib1dARB(index,x) GLuint index GLdouble x INIT: loadProc(glVertexAttrib1dARB,"glVertexAttrib1dARB"); #//# glVertexAttrib1dvARB_c($index,(CPTR)v); void glVertexAttrib1dvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib1dvARB,"glVertexAttrib1dvARB"); CODE: glVertexAttrib1dvARB(index,(GLdouble*)v); #//# glVertexAttrib1dvARB_s($index,(PACKED)v); void glVertexAttrib1dvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib1dvARB,"glVertexAttrib1dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*1); glVertexAttrib1dvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib1dARB #//# glVertexAttrib1dvARB_p($index,$x); void glVertexAttrib1dvARB_p(index,x) GLuint index GLdouble x INIT: loadProc(glVertexAttrib1dvARB,"glVertexAttrib1dvARB"); CODE: { GLdouble param[1]; param[0] = x; glVertexAttrib1dvARB(index,param); } #//# glVertexAttrib1fARB($index,$x); void glVertexAttrib1fARB(index,x) GLuint index GLfloat x INIT: loadProc(glVertexAttrib1fARB,"glVertexAttrib1fARB"); #//# glVertexAttrib1sARB($index,$x); void glVertexAttrib1sARB(index,x) GLuint index GLshort x INIT: loadProc(glVertexAttrib1s,"glVertexAttrib1s"); #//# glVertexAttrib1svARB_c($index,(CPTR)v); void glVertexAttrib1svARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib1svARB,"glVertexAttrib1svARB"); CODE: glVertexAttrib1svARB(index,(GLshort*)v); #//# glVertexAttrib1svARB_s($index,(PACKED)v); void glVertexAttrib1svARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib1svARB,"glVertexAttrib1svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*1); glVertexAttrib1svARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib1sARB #//# glVertexAttrib1svARB_p($index,$x); void glVertexAttrib1svARB_p(index,x) GLuint index GLshort x INIT: loadProc(glVertexAttrib1svARB,"glVertexAttrib1svARB"); CODE: { GLshort param[1]; param[0] = x; glVertexAttrib1svARB(index,param); } #//# glVertexAttrib2dARB($index,$x,$y); void glVertexAttrib2dARB(index,x,y) GLuint index GLdouble x GLdouble y INIT: loadProc(glVertexAttrib2dARB,"glVertexAttrib2dARB"); #//# glVertexAttrib2dvARB_c($index,(CPTR)v); void glVertexAttrib2dvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib2dvARB,"glVertexAttrib2dvARB"); CODE: glVertexAttrib2dvARB(index,(GLdouble*)v); #//# glVertexAttrib2dvARB_s($index,(PACKED)v); void glVertexAttrib2dvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib2dvARB,"glVertexAttrib2dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*2); glVertexAttrib2dvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib2dARB #//# glVertexAttrib2dvARB_p($index,$x,$y); void glVertexAttrib2dvARB_p(index,x,y) GLuint index GLdouble x GLdouble y INIT: loadProc(glVertexAttrib2dvARB,"glVertexAttrib2dvARB"); CODE: { GLdouble param[2]; param[0] = x; param[1] = y; glVertexAttrib2dvARB(index,param); } #//# glVertexAttrib2fARB($index,$x,$y); void glVertexAttrib2fARB(index,x,y) GLuint index GLfloat x GLfloat y INIT: loadProc(glVertexAttrib2fARB,"glVertexAttrib2fARB"); #//# glVertexAttrib2sARB($index,$x,$y); void glVertexAttrib2sARB(index,x,y) GLuint index GLshort x GLshort y INIT: loadProc(glVertexAttrib2sARB,"glVertexAttrib2sARB"); #//# glVertexAttrib2svARB_c($index,(CPTR)v); void glVertexAttrib2svARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib2svARB,"glVertexAttrib2svARB"); CODE: glVertexAttrib2svARB(index,(GLshort*)v); #//# glVertexAttrib2svARB_s($index,(PACKED)v); void glVertexAttrib2svARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib2svARB,"glVertexAttrib2svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*2); glVertexAttrib2svARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib2sARB #//# glVertexAttrib2svARB_p($index,$x,$y); void glVertexAttrib2svARB_p(index,x,y) GLuint index GLshort x GLshort y INIT: loadProc(glVertexAttrib2svARB,"glVertexAttrib2svARB"); CODE: { GLshort param[2]; param[0] = x; param[1] = y; glVertexAttrib2svARB(index,param); } #//# glVertexAttrib3dARB($index,$x,$y,$z); void glVertexAttrib3dARB(index,x,y,z) GLuint index GLdouble x GLdouble y GLdouble z INIT: loadProc(glVertexAttrib3dARB,"glVertexAttrib3dARB"); #//# glVertexAttrib3dvARB_c($index,(CPTR)v); void glVertexAttrib3dvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib3dvARB,"glVertexAttrib3dvARB"); CODE: glVertexAttrib3dvARB(index,(GLdouble*)v); #//# glVertexAttrib3dvARB_s($index,(PACKED)v); void glVertexAttrib3dvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib3dvARB,"glVertexAttrib3dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glVertexAttrib3dvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib3dARB #//# glVertexAttrib3dvARB_p($index,$x,$y,$z); void glVertexAttrib3dvARB_p(index,x,y,z) GLuint index GLdouble x GLdouble y GLdouble z INIT: loadProc(glVertexAttrib3dvARB,"glVertexAttrib3dvARB"); CODE: { GLdouble param[3]; param[0] = x; param[1] = y; param[2] = z; glVertexAttrib3dvARB(index,param); } #//# glVertexAttrib3fARB($index,$x,$y,$z); void glVertexAttrib3fARB(index,x,y,z) GLuint index GLfloat x GLfloat y GLfloat z INIT: loadProc(glVertexAttrib3fARB,"glVertexAttrib3fARB"); #//# glVertexAttrib3fvARB_c($index,(CPTR)v); void glVertexAttrib3fvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib3fvARB,"glVertexAttrib3fvARB"); CODE: glVertexAttrib3fvARB(index,(GLfloat*)v); #//# glVertexAttrib3fvARB_s($index,(PACKED)v); void glVertexAttrib3fvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib3fvARB,"glVertexAttrib3fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glVertexAttrib3fvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib3fARB #//# glVertexAttrib3fvARB_p($index,$x,$y,$z); void glVertexAttrib3fvARB_p(index,x,y,z) GLuint index GLfloat x GLfloat y GLfloat z INIT: loadProc(glVertexAttrib3fvARB,"glVertexAttrib3fvARB"); CODE: { GLfloat param[3]; param[0] = x; param[1] = y; param[2] = z; glVertexAttrib3fvARB(index,param); } #//# glVertexAttrib3sARB($index,$x,$y,$z); void glVertexAttrib3sARB(index,x,y,z) GLuint index GLshort x GLshort y GLshort z INIT: loadProc(glVertexAttrib3sARB,"glVertexAttrib3sARB"); #//# glVertexAttrib3svARB_c($index,(CPTR)v); void glVertexAttrib3svARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib3svARB,"glVertexAttrib3svARB"); CODE: glVertexAttrib3svARB(index,(GLshort*)v); #//# glVertexAttrib3svARB_s($index,(PACKED)v); void glVertexAttrib3svARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib3svARB,"glVertexAttrib3svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glVertexAttrib3svARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib3sARB #//# glVertexAttrib3svARB_p($index,$x,$y,$z); void glVertexAttrib3svARB_p(index,x,y,z) GLuint index GLshort x GLshort y GLshort z INIT: loadProc(glVertexAttrib3svARB,"glVertexAttrib3svARB"); CODE: { GLshort param[3]; param[0] = x; param[1] = y; param[2] = z; glVertexAttrib3svARB(index,param); } #//# glVertexAttrib4NbvARB_c($index,(CPTR)v); void glVertexAttrib4NbvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NbvARB,"glVertexAttrib4NbvARB"); CODE: glVertexAttrib4NbvARB(index,(GLbyte*)v); #//# glVertexAttrib4NbvARB_s($index,(PACKED)v); void glVertexAttrib4NbvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NbvARB,"glVertexAttrib4NbvARB"); CODE: { GLbyte * v_s = EL(v, sizeof(GLbyte)*4); glVertexAttrib4NbvARB(index,v_s); } #//# glVertexAttrib4NbvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NbvARB_p(index,x,y,z,w) GLuint index GLbyte x GLbyte y GLbyte z GLbyte w INIT: loadProc(glVertexAttrib4NbvARB,"glVertexAttrib4NbvARB"); CODE: { GLbyte param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NbvARB(index,param); } #//# glVertexAttrib4NivARB_c($index,(CPTR)v); void glVertexAttrib4NivARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NivARB,"glVertexAttrib4NivARB"); CODE: glVertexAttrib4NivARB(index,(GLint*)v); #//# glVertexAttrib4NivARB_s($index,(PACKED)v); void glVertexAttrib4NivARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NivARB,"glVertexAttrib4NivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glVertexAttrib4NivARB(index,v_s); } #//# glVertexAttrib4NivARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NivARB_p(index,x,y,z,w) GLuint index GLint x GLint y GLint z GLint w INIT: loadProc(glVertexAttrib4NivARB,"glVertexAttrib4NivARB"); CODE: { GLint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NivARB(index,param); } #//# glVertexAttrib4NsvARB_c($index,(CPTR)v); void glVertexAttrib4NsvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NsvARB,"glVertexAttrib4NsvARB"); CODE: glVertexAttrib4NsvARB(index,(GLshort*)v); #//# glVertexAttrib4NsvARB_s($index,(PACKED)v); void glVertexAttrib4NsvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NsvARB,"glVertexAttrib4NsvARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glVertexAttrib4NsvARB(index,v_s); } #//# glVertexAttrib4NsvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NsvARB_p(index,x,y,z,w) GLuint index GLshort x GLshort y GLshort z GLshort w INIT: loadProc(glVertexAttrib4NsvARB,"glVertexAttrib4NsvARB"); CODE: { GLshort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NsvARB(index,param); } #//# glVertexAttrib4NubARB($index,$x,$y,$z,$w); void glVertexAttrib4NubARB(index,x,y,z,w) GLuint index GLubyte x GLubyte y GLubyte z GLubyte w INIT: loadProc(glVertexAttrib4NubARB,"glVertexAttrib4NubARB"); #//# glVertexAttrib4NubvARB_c($index,(CPTR)v); void glVertexAttrib4NubvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NubvARB,"glVertexAttrib4NubvARB"); CODE: glVertexAttrib4NubvARB(index,(GLubyte*)v); #//# glVertexAttrib4NubvARB_s($index,(PACKED)v); void glVertexAttrib4NubvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NubvARB,"glVertexAttrib4NubvARB"); CODE: { GLubyte * v_s = EL(v, sizeof(GLubyte)*4); glVertexAttrib4NubvARB(index,v_s); } #//# glVertexAttrib4NubvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NubvARB_p(index,x,y,z,w) GLuint index GLubyte x GLubyte y GLubyte z GLubyte w INIT: loadProc(glVertexAttrib4NubvARB,"glVertexAttrib4NubvARB"); CODE: { GLubyte param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NubvARB(index,param); } #//# glVertexAttrib4NuivARB_c($index,(CPTR)v); void glVertexAttrib4NuivARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NuivARB,"glVertexAttrib4NuivARB"); CODE: glVertexAttrib4NuivARB(index,(GLuint*)v); #//# glVertexAttrib4NuivARB_s($index,(PACKED)v); void glVertexAttrib4NuivARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NuivARB,"glVertexAttrib4NuivARB"); CODE: { GLuint * v_s = EL(v, sizeof(GLuint)*4); glVertexAttrib4NuivARB(index,v_s); } #//# glVertexAttrib4NuivARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NuivARB_p(index,x,y,z,w) GLuint index GLuint x GLuint y GLuint z GLuint w INIT: loadProc(glVertexAttrib4NuivARB,"glVertexAttrib4NuivARB"); CODE: { GLuint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NuivARB(index,param); } #//# glVertexAttrib4NusvARB_c($index,(CPTR)v); void glVertexAttrib4NusvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4NusvARB,"glVertexAttrib4NusvARB"); CODE: glVertexAttrib4NusvARB(index,(GLushort*)v); #//# glVertexAttrib4NusvARB_s($index,(PACKED)v); void glVertexAttrib4NusvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4NusvARB,"glVertexAttrib4NusvARB"); CODE: { GLushort * v_s = EL(v, sizeof(GLushort)*4); glVertexAttrib4NusvARB(index,v_s); } #//# glVertexAttrib4NusvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4NusvARB_p(index,x,y,z,w) GLuint index GLushort x GLushort y GLushort z GLushort w INIT: loadProc(glVertexAttrib4NusvARB,"glVertexAttrib4NusvARB"); CODE: { GLushort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4NusvARB(index,param); } #//# glVertexAttrib4bvARB_c($index,(CPTR)v); void glVertexAttrib4bvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4bvARB,"glVertexAttrib4bvARB"); CODE: glVertexAttrib4bvARB(index,(GLbyte*)v); #//# glVertexAttrib4bvARB_s($index,(PACKED)v); void glVertexAttrib4bvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4bvARB,"glVertexAttrib4bvARB"); CODE: { GLbyte * v_s = EL(v, sizeof(GLbyte)*4); glVertexAttrib4bvARB(index,v_s); } #//# glVertexAttrib4bvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4bvARB_p(index,x,y,z,w) GLuint index GLbyte x GLbyte y GLbyte z GLbyte w INIT: loadProc(glVertexAttrib4bvARB,"glVertexAttrib4bvARB"); CODE: { GLbyte param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4bvARB(index,param); } #//# glVertexAttrib4dARB($index,$x,$y,$z,$w); void glVertexAttrib4dARB(index,x,y,z,w) GLuint index GLdouble x GLdouble y GLdouble z GLdouble w INIT: loadProc(glVertexAttrib4dARB,"glVertexAttrib4dARB"); #//# glVertexAttrib4dvARB_c($index,(CPTR)v); void glVertexAttrib4dvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4dvARB,"glVertexAttrib4dvARB"); CODE: glVertexAttrib4dvARB(index,(GLdouble*)v); #//# glVertexAttrib4dvARB_s($index,(PACKED)v); void glVertexAttrib4dvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4dvARB,"glVertexAttrib4dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glVertexAttrib4dvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib4dARB #//# glVertexAttrib4dvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4dvARB_p(index,x,y,z,w) GLuint index GLdouble x GLdouble y GLdouble z GLdouble w INIT: loadProc(glVertexAttrib4dvARB,"glVertexAttrib4dvARB"); CODE: { GLdouble param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4dvARB(index,param); } #//# glVertexAttrib4fARB($index,$x,$y,$z,$w); void glVertexAttrib4fARB(index,x,y,z,w) GLuint index GLfloat x GLfloat y GLfloat z GLfloat w INIT: loadProc(glVertexAttrib4fARB,"glVertexAttrib4fARB"); #//# glVertexAttrib4fvARB_c($index,(CPTR)v); void glVertexAttrib4fvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4fvARB,"glVertexAttrib4fvARB"); CODE: glVertexAttrib4fvARB(index,(GLfloat*)v); #//# glVertexAttrib4fvARB_s($index,(PACKED)v); void glVertexAttrib4fvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4fvARB,"glVertexAttrib4fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glVertexAttrib4fvARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib4fARB #//# glVertexAttrib4fvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4fvARB_p(index,x,y,z,w) GLuint index GLfloat x GLfloat y GLfloat z GLfloat w INIT: loadProc(glVertexAttrib4fvARB,"glVertexAttrib4fvARB"); CODE: { GLfloat param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4fvARB(index,param); } #//# glVertexAttrib4ivARB_c($index,(CPTR)v); void glVertexAttrib4ivARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4ivARB,"glVertexAttrib4ivARB"); CODE: glVertexAttrib4ivARB(index,(GLint*)v); #//# glVertexAttrib4ivARB_s($index,(PACKED)v); void glVertexAttrib4ivARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4ivARB,"glVertexAttrib4ivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glVertexAttrib4ivARB(index,v_s); } #//# glVertexAttrib4ivARB_p($index,$x,$y,$z,$w); void glVertexAttrib4ivARB_p(index,x,y,z,w) GLuint index GLint x GLint y GLint z GLint w INIT: loadProc(glVertexAttrib4ivARB,"glVertexAttrib4ivARB"); CODE: { GLint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4ivARB(index,param); } #//# glVertexAttrib4sARB($index,$x,$y,$z,$w); void glVertexAttrib4sARB(index,x,y,z,w) GLuint index GLshort x GLshort y GLshort z GLshort w INIT: loadProc(glVertexAttrib4sARB,"glVertexAttrib4sARB"); #//# glVertexAttrib4svARB_c($index,(CPTR)v); void glVertexAttrib4svARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4svARB,"glVertexAttrib4svARB"); CODE: glVertexAttrib4svARB(index,(GLshort*)v); #//# glVertexAttrib4svARB_s($index,(PACKED)v); void glVertexAttrib4svARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4svARB,"glVertexAttrib4svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glVertexAttrib4svARB(index,v_s); } #//!!! Do we really need this? It duplicates glVertexAttrib4sARB #//# glVertexAttrib4svARB_p($index,$x,$y,$z,$w); void glVertexAttrib4svARB_p(index,x,y,z,w) GLuint index GLshort x GLshort y GLshort z GLshort w INIT: loadProc(glVertexAttrib4svARB,"glVertexAttrib4svARB"); CODE: { GLshort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4svARB(index,param); } #//# glVertexAttrib4ubvARB_c($index,(CPTR)v); void glVertexAttrib4ubvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4ubvARB,"glVertexAttrib4ubvARB"); CODE: glVertexAttrib4ubvARB(index,(GLubyte*)v); #//# glVertexAttrib4ubvARB_s($index,(PACKED)v); void glVertexAttrib4ubvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4ubvARB,"glVertexAttrib4ubvARB"); CODE: { GLubyte * v_s = EL(v, sizeof(GLubyte)*4); glVertexAttrib4ubvARB(index,v_s); } #//# glVertexAttrib4ubvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4ubvARB_p(index,x,y,z,w) GLuint index GLubyte x GLubyte y GLubyte z GLubyte w INIT: loadProc(glVertexAttrib4ubvARB,"glVertexAttrib4ubvARB"); CODE: { GLubyte param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4ubvARB(index,param); } #//# glVertexAttrib4uivARB_c($index,(CPTR)v); void glVertexAttrib4uivARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4uivARB,"glVertexAttrib4uivARB"); CODE: glVertexAttrib4uivARB(index,(GLuint*)v); #//# glVertexAttrib4uivARB_s($index,(PACKED)v); void glVertexAttrib4uivARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4uivARB,"glVertexAttrib4uivARB"); CODE: { GLuint * v_s = EL(v, sizeof(GLuint)*4); glVertexAttrib4uivARB(index,v_s); } #//# glVertexAttrib4uivARB_p($index,$x,$y,$z,$w); void glVertexAttrib4uivARB_p(index,x,y,z,w) GLuint index GLuint x GLuint y GLuint z GLuint w INIT: loadProc(glVertexAttrib4uivARB,"glVertexAttrib4uivARB"); CODE: { GLuint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4uivARB(index,param); } #//# glVertexAttrib4usvARB_c($index,(CPTR)v); void glVertexAttrib4usvARB_c(index,v) GLuint index void * v INIT: loadProc(glVertexAttrib4usvARB,"glVertexAttrib4usvARB"); CODE: glVertexAttrib4usvARB(index,(GLushort*)v); #//# glVertexAttrib4usvARB_c($index,(PACKED)v); void glVertexAttrib4usvARB_s(index,v) GLuint index SV * v INIT: loadProc(glVertexAttrib4usvARB,"glVertexAttrib4usvARB"); CODE: { GLushort * v_s = EL(v, sizeof(GLushort)*4); glVertexAttrib4usvARB(index,v_s); } #//# glVertexAttrib4usvARB_p($index,$x,$y,$z,$w); void glVertexAttrib4usvARB_p(index,x,y,z,w) GLuint index GLushort x GLushort y GLushort z GLushort w INIT: loadProc(glVertexAttrib4usvARB,"glVertexAttrib4usvARB"); CODE: { GLushort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertexAttrib4usvARB(index,param); } #//# glVertexAttribPointerARB_c($index,$size,$type,$normalized,$stride,(CPTR)pointer); void glVertexAttribPointerARB_c(index,size,type,normalized,stride,pointer) GLuint index GLint size GLenum type GLboolean normalized GLsizei stride void * pointer INIT: loadProc(glVertexAttribPointerARB,"glVertexAttribPointerARB"); CODE: glVertexAttribPointerARB(index,size,type, normalized,stride,pointer); #//# glVertexAttribPointerARB_p($index,$type,$normalized,$stride,@attribs); void glVertexAttribPointerARB_p(index,type,normalized,stride,...) GLuint index GLenum type GLboolean normalized GLsizei stride INIT: loadProc(glVertexAttribPointerARB,"glVertexAttribPointerARB"); CODE: { GLuint count = items - 4; GLuint size = gl_type_size(type); void * pointer = malloc(count * size); SvItems(type,4,count,pointer); glVertexAttribPointerARB(index,count,type, normalized,stride,pointer); free(pointer); } #//# glEnableVertexAttribArrayARB($index); void glEnableVertexAttribArrayARB(index) GLuint index INIT: loadProc(glEnableVertexAttribArrayARB,"glEnableVertexAttribArrayARB"); #//# glDisableVertexAttribArrayARB($index); void glDisableVertexAttribArrayARB(index) GLuint index INIT: loadProc(glDisableVertexAttribArrayARB,"glDisableVertexAttribArrayARB"); #//# glGetVertexAttribdvARB_c($index,$pname,(CPTR)params); void glGetVertexAttribdvARB_c(index,pname,params) GLuint index GLenum pname void * params INIT: loadProc(glGetVertexAttribdvARB,"glGetVertexAttribdvARB"); CODE: glGetVertexAttribdvARB(index,pname,(GLdouble*)params); #//# glGetVertexAttribdvARB_s($index,$pname,(PACKED)params); void glGetVertexAttribdvARB_s(index,pname,params) GLuint index GLenum pname SV * params INIT: loadProc(glGetVertexAttribdvARB,"glGetVertexAttribdvARB"); CODE: { GLdouble * params_s = EL(params, sizeof(GLdouble) * 4); glGetVertexAttribdvARB(index,pname,params_s); } #//# $param = glGetVertexAttribdvARB_p($index,$pname); GLdouble glGetVertexAttribdvARB_p(index,pname) GLuint index GLenum pname INIT: loadProc(glGetVertexAttribdvARB,"glGetVertexAttribdvARB"); CODE: { GLdouble param; glGetVertexAttribdvARB(index,pname,(void *)¶m); RETVAL = param; } OUTPUT: RETVAL #//# glGetVertexAttribfvARB_c($index,$pname,(CPTR)params); void glGetVertexAttribfvARB_c(index,pname,params) GLuint index GLenum pname void * params INIT: loadProc(glGetVertexAttribfvARB,"glGetVertexAttribfvARB"); CODE: glGetVertexAttribfvARB(index,pname,(GLfloat*)params); #//# glGetVertexAttribfvARB_s($index,$pname,(PACKED)params); void glGetVertexAttribfvARB_s(index,pname,params) GLuint index GLenum pname SV * params INIT: loadProc(glGetVertexAttribfvARB,"glGetVertexAttribfvARB"); CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat) * 4); glGetVertexAttribfvARB(index,pname,params_s); } #//# $param = glGetVertexAttribfvARB_p($index,$pname); GLfloat glGetVertexAttribfvARB_p(index,pname) GLuint index GLenum pname INIT: loadProc(glGetVertexAttribfvARB,"glGetVertexAttribfvARB"); CODE: { GLfloat param; glGetVertexAttribfvARB(index,pname,(void *)¶m); RETVAL = param; } OUTPUT: RETVAL #//# glGetVertexAttribivARB_c($index,$pname,(CPTR)params); void glGetVertexAttribivARB_c(index,pname,params) GLuint index GLenum pname void * params INIT: loadProc(glGetVertexAttribivARB,"glGetVertexAttribivARB"); CODE: glGetVertexAttribivARB(index,pname,(GLint*)params); #//# glGetVertexAttribivARB_s($index,$pname,(PACKED)params); void glGetVertexAttribivARB_s(index,pname,params) GLuint index GLenum pname SV * params INIT: loadProc(glGetVertexAttribivARB,"glGetVertexAttribivARB"); CODE: { GLint * params_s = EL(params, sizeof(GLint) * 4); glGetVertexAttribivARB(index,pname,params_s); } #//# $param = glGetVertexAttribivARB_p($index,$pname); GLuint glGetVertexAttribivARB_p(index,pname) GLuint index GLenum pname INIT: loadProc(glGetVertexAttribivARB,"glGetVertexAttribivARB"); CODE: { GLuint param; glGetVertexAttribivARB(index,pname,(void *)¶m); RETVAL = param; } OUTPUT: RETVAL #//# glGetVertexAttribPointervARB_c($index,$pname,(CPTR)pointer); void glGetVertexAttribPointervARB_c(index,pname,pointer) GLuint index GLenum pname void * pointer INIT: loadProc(glGetVertexAttribPointervARB,"glGetVertexAttribPointervARB"); CODE: glGetVertexAttribPointervARB(index,pname,pointer); #//# $param = glGetVertexAttribPointervARB_p($index,$pname); void glGetVertexAttribPointervARB_p(index,pname) GLuint index GLenum pname INIT: loadProc(glGetVertexAttribPointervARB,"glGetVertexAttribPointervARB"); loadProc(glGetVertexAttribivARB,"glGetVertexAttribivARB"); PPCODE: { void * pointer; GLuint i,count,type; glGetVertexAttribPointervARB(index,pname,&pointer); glGetVertexAttribivARB(index,GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB,(void *)&count); glGetVertexAttribivARB(index,GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB,(void *)&type); EXTEND(sp, count); switch (type) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: for (i=0;i #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" #endif #ifdef HAVE_GLX #include "glx_util.h" #endif #ifdef HAVE_GLU #include "glu_util.h" #endif #if defined(HAVE_GLUT) || defined(HAVE_FREEGLUT) #ifndef GLUT_API_VERSION #define GLUT_API_VERSION 4 #endif #include "glut_util.h" #endif #ifdef IN_POGL_CONST_XS /* These macros used in neoconstant */ #define i(test) if (strEQ(name, #test)) return newSViv((int)test); #define f(test) if (strEQ(name, #test)) return newSVnv((double)test); #define p(test) if (strEQ(name, #test)) return newSViv(PTR2IV(test)); static SV * neoconstant(char * name, int arg) { #include "gl_const.h" #include "glu_const.h" #include "glut_const.h" #include "glx_const.h" ; return 0; } #undef i #undef f #endif /* defined IN_POGL_CONST_XS */ MODULE = OpenGL::Const PACKAGE = OpenGL #ifdef IN_POGL_CONST_XS #// Define a POGL Constant SV * constant(name,arg) char * name int arg CODE: { RETVAL = neoconstant(name, arg); if (!RETVAL) RETVAL = newSVsv(&PL_sv_undef); } OUTPUT: RETVAL #endif /* End IN_POGL_CONST_XS */ libopengl-perl-0.6704+dfsg.orig/glut_util.h0000644000175000017500000000220612334200655020056 0ustar gregoagregoa#if defined(IS_STRAWBERRY) #undef exit #include #elif defined(HAVE_FREEGLUT) && (defined(_WIN32) || defined(HAVE_W32API)) #include "./include/GL/freeglut.h" #elif defined(HAVE_FREEGLUT_H) #include #else #if defined(HAVE_AGL_GLUT) #include #else #include #endif #if 0 # define GLUT_ACTION_EXIT 0 # define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1 # define GLUT_ACTION_CONTINUE_EXECUTION 2 # define GLUT_CREATE_NEW_CONTEXT 0 # define GLUT_USE_CURRENT_CONTEXT 1 # define GLUT_FORCE_INDIRECT_CONTEXT 0 # define GLUT_ALLOW_DIRECT_CONTEXT 1 # define GLUT_TRY_DIRECT_CONTEXT 2 # define GLUT_FORCE_DIRECT_CONTEXT 3 # define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9 # define GLUT_WINDOW_BORDER_WIDTH 0x01FA # define GLUT_WINDOW_HEADER_HEIGHT 0x01FB # define GLUT_VERSION 0x01FC # define GLUT_RENDERING_CONTEXT 0x01FD # define GLUT_DIRECT_RENDERING 0x01FE #endif #endif libopengl-perl-0.6704+dfsg.orig/test.tga0000644000175000017500000020005412334200655017352 0ustar gregoagregoa€€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüûûûûûûüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýùùùõõõ ñññ ííí ëëëëëëììì ððð ôôô øøøûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýøøøñññ çççÜÜÜÒÑÒ ÉÈÉ'ÄÄÄ*ÃÃÃ+ÇÆÇ(ÎÍÎ#×××âââìììôôô úúúþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþûûûóóó çççÕÕÕÁÀÁ-­¬­>›š›NŽZˆ‡ˆa†…†bŒ‹Œ]–•–T¥¤¥E¶µ¶6ÉÈÉ&ÛÛÛêêêõõõ ûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùððð ÝÝÝÄÄÄ)§¦§CŠˆŠ_popz][]POPJIJ¥HGH¦MLM¡WVW•fef„zyzo“’“V¯®¯<ÉÉÉ&ßàßððð ùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùîîî ØØØ¹¸¹4“’“Unmn{PMP858¸*&*Ê  ÕÚÛ  ×&%&Ð101ÂA@A®XWX”vuvs˜—˜Qº¹º2×××ìììøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþúúúîîî ×××´³´8ˆ‡ˆ`_Z^‹>7=³'%'Ñ!ãìòô  ô  ò ïéÝ+)+ÊA?A®a_aŠˆ‡ˆ`°°°:ÔÔÔìììùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüòòò ÜÜÜ·¶·5‰…‰^ZX[“6G6Ë'U(ë b#÷&)û(…*ü(„+û#o&üS û7ùö  ô  ñêÚ323¿VTV—h¯¯¯;ÕÖÕîîî úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùçèçÇÅÇ(˜“˜N[j[-m/è$‰'ÿ'Ÿ*ÿ)¨-ý+¬.ü,¯/û-®0û.¬2ü0¨4û/š2û,/û%Q&õ"ï ð ïá/-/ÅTRT™„ƒ„e¶µ¶6ÜÜÜóóó ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþöööâàâ·µ·/`‚a¡+‡-ø%Ÿ(ÿ(­+ü*¶.ü,½/û,À/û-Á1û/À2û/½4ü0¸5û1³5û3¬7û4¡8ü0€4ù$@&îí  ðâ101Â\[\’‘’WÃÃÃ+çççùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýúúú÷÷÷÷÷÷÷÷÷úúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþø÷øÞÞÞ y {+Ž-ÿ'£*ÿ*³-ü*¿.ü,È/û-Í0û.Ï2ü/Ï3ü1Î4û1Ê5û2Æ6ü3Á7ü5º9û7³;ü8«<ý7•;û-X.òï  ñÝ;:;¶nmn|§¦§CÕÕÕñññ üüüÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùïïï åååàààáááçççððð õõõ úúúüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüüùùùøøøöööõõõ õõõøøøùùùüüüýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ö÷—¹™s1Œ3ÿ'*þ+±.ü,Á/ý,Ì/ü-Ó0û/Õ3ü/Ö4ü1Ô5û2Ñ6ü3Î7û5Ì8ü6È:ý7Æ;ý9À=ü:·=ü;®?ü;Ÿ?ü,[/õ ó í%$%ÑPOPЉŠ_ÁÁÁ-æææøøøûûûúúúøøøøøøùùùúúúûûûüüüüüüýýýþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûððð ÜÜÜÄÄÄ*µ´µ6¶´¶6ÀÀÀ-ÏÏÏ!ÞÞÞêêêõõõ ûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüøøøòòò ìììæææßßßÜÜÜÙÙÙÚÚÚßßßåååíííôôô ùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½Ò¾>A‹Cõ'*ÿ+§/ü-¹0ü.È1ü.Ò2ü/Õ3ü0Ö4ü2Ó5ü2Ï6û2Ì6ý2É7ÿ4Ç8ÿ7È;ý9É=ü;Æ?ü;Â@ü<ºAü>°Bü<œAü$E&÷  ôã989¹pnp{«ª«?ÙÙÙïïï ððð éééãããâââãããæææéééìììîîî ñññ òòò ôôô öööøøøúúúüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùæææÅÄÅ*žžL€h{z{n†…†c›š›N³²³9ÍÌÍ$äääôôô ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüüüöööîîî âââÕÕÕÈÇÈ'»»»2±°±;©¨©A¦¦¦D¨§¨B¯®¯=»»»2ÉÉÉ%ÚÚÚéééôôô ûûûþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìðìj˜lÚ'z*ÿ*’-ü.©1ü/»3ü0Ç3ü0Ï5ü1Ñ5ü2Ï6ü3Ê8ü2Ä7ÿ:½>ÿLÀOïMÂQð>ÀCÿ8Ã=ÿ<Ç@û=ÈCü?ÄDü@»Dü?¯Eü@Eü#ø í)')ÌZYZ“—–—RÊÉÊ%àààÛÛÛÉÈÉ&º¹º2µ´µ7·¶·5»º»2ÀÀÀ-ÅÅÅ)ËÊË&ÏÏÏ!ÔÓÔ×××ÜÛÜáááéééòòò ùùùþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ÷÷÷ßßß²±²:|{|mSRSšDCD«KJK£a`aŠ€h©¨©BÏÏÏ!ìììûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýùùùððð âââÏÎÏ!¸¸¸4¢¢¢GŽZ~}~kqpqxhghfef…hghƒpopz~j“““U­¬­>ÇÇÇ'ÞÞÞïïï ùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿøùø­Å®hW–YÞ.‘2ÿ,£0þ0µ4û2Á6ü2Æ6ü3Ç8ü4Ã8û4½9ÿI¯Kè…¯‡¿Ë¿.ÎßÏ%©×«d[Æ_ã=ÃBÿ?ÉDüAÊFüBÄGûAºFûG¯Lü4c7û  óÙIGI¦„ƒ„eº¹º3ÏÏÏ!ÀÀÀ-ŸžŸJƒ‚ƒfwvwrxwxq}|}lƒ‚ƒeЉŠ_Y–•–SœM£¢£F«ª«@¶µ¶6ÈÈÈ'ÝÝÝïïï úúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþðñð ÓÓÓ¦¥¦;feg545»  Ö" "Õ646¼ZXZ’Œ‹Œ]ÀÀÀ-æææùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüü÷÷÷êêêÖÖÖ»»»1œLiede…QPQœBAA­767¹101Á/-/Ä0/0Ã757»CCC«WVW”srsv•”•T···4ÖÕÖìììøøøýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞéÞ¾ŽB£Fø0¬4ÿ2·6ý4»8ü5»9û6·:ÿH¦Lè‚“‚q­§­6ÉÅÉ%âÞâôîóÀßÁ?SÂXñ?ÇDþCÌGýDÊIûDÃHûF·JûG˜Jü%÷â<;<´ututª©ªA¿¾¿/§¦§CyxyoRPR›?=?±=;=´A?A¯FDF©KJK£QPQœVUV–][]cbcˆlkl~~}~kœ›œNÁÀÁ-âââöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÒÎ=•‹¾ˆ‹…dec¡313Éé í  ÖGFG¨~j¸·¸4áááööö üüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüõõõ æææÍÌÍ#¬«¬?†††bdcc‡HFF§321À&$$ÒÞåéëëæÝ)()Ë>>>±^]^…„…c¯®¯<ÒÒÒëëëøøøýýýÿÿÿÿÿÿÿÿÿüüüù÷ùå俦½§Q[§]Í9­=ÿ6³:þ7²;ý<£@û^y_¥vqvo‡…‡cŸžŸK¸·¸4ÐÏÐ!ÝÜÝ ~Ũ@ÃFÿEÍJüEÏKûFÊLûG¾LüP±Sü1U1úé313¿ihi‚Ÿž F²³´.–—˜M`ab†123¾ÛâáÝØ! "Ô%$%Ð)')Ì-,-Æ656»LJL£tstv§¦§CÕÕÕòòò ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁþYowhÿs{lÿw|røae]ñ@B=õ##!ô! !ß?>?±tstuªªª?ÒÒÒèèèòòò øøøüüüþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüööö åååÉÈÉ&¢¢¢GxwvqSRPš76:¿&%5Ù5ë@ôK÷KùEú1ù ø ø óìÝ202ÁSRS™}j¬«¬>ÒÒÒìììùùùþþþÿÿÿüüüôôô ãããÇÆÇ(§£§>hPxQ»:“=ó8¢<ÿ=r@àA>A±DAD¬RQRœfef„~jœšœN¼¶»'Œ¾Ž‹EÂJÿFÍLüHÒNüIÏNüKÅOüQ¹SüGGûí,),Çaab†”‹Œ} Š‹›Žz~‡jVY±B37×& íöö õ ô ò ð îìá.,.ÆZYZ’–•–SÍÌÍ$ïïï üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ¼¾¸v|‚tÿ…‹€ýŒ’†üŠ‘„ý€…yýkrdý>A:î203½^]^Œ‹Š‹]­­­>ÅÄÅ*ÕÕÕãããîîî öööüüüþþþÿÿÿÿÿÿÿÿÿýýý÷÷÷èèèÊÉÊ% ŸŸItspuIGPª(&NÙ\ósü‚ýý–ý—ü’ý‚üoüOû(÷ ô ðã-,-ÇQPQœ~j°¯°;×××ððð ûûûüüüöööåååÅÅÅ)›š›Nnkn{KEK¢5.5¼,9,Ù*R,ñ!+"äÞÙ(&(Î535½HFH§cbcˆ‡†]}§“OÃTÿIÏNüJÕOüLÔQüMÊRüS¾TüUšRü!' ð)%)Ë[\]†yx´–]_ÿšW]ü›OYûšIUû˜FQû•DOüz8Aüq5>ûg1:ûZ/7ûT.5û>$)ú/"ù$ò#"#ÔONOžŽŽ[ÈÈÈ'ííí üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùù®²ªˆ€ÿ˜’û ¤™û¢—û–›üƒ‰|ý895ð" "Ó?=?²\Z\uuutŒ\£¢£G¹¸¹3ÏÎÏ"âââððð øøøýýýÿÿÿÿÿÿúúúìììÏÏÐ"§¦¤Butsv=;]¿oó‰ÿ›þ§ü°ü³û´ü´ü²ü«ü¢ü“ütûEôï ðä.,.ÆTST˜‡†‡b¹¸¹3ßÞßóóó öööêêêÌËÌ$  HnhnzGGF°/?0Ø#=$ì8 ò-òðéáÝ  Ø('(Î868»SNS–]`ºOÅTÿOÒUüLØQüNÙTüQÐTüWÂVüZ§Tý0A.ò&"'ÍWWYŠpo½¤``ÿ­U\ý¸Q]üÀQ]üÄQ^ûÅQ`ûÅR`üÃR`üÀR`üºR`ü¯Q^üLYüKWýZ4>ù#!#ÙJIJ¢Š‰Š_ÅÅÅ)ìììüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõª­¤Ÿ”™ÿ¦«¡û¯³©û®²©û¨­¢û}‚xûðâ$"$Ó1/1Â@>@±QPQfef…€€iœL»º»1ÕÕÕéééööö üüüûûûòòò ÙÙÙ²±¯7wv{u11rÖ‡ÿ Ÿÿ®ü¹üÀüÅûÈüÈüÇüÃü¾ü·û®û¡û!‹ü$"]ñ"è íá313À_^_”””UÅÄÅ*äääëëë××ׯ«¯9txuzBiDÍ4‚7õ5œ9ý5¡9ý6 :ý8š=ü7ˆ:ù3j6ò5R7Þ7:8Ã405»-*-Ç+)*É505¼G}JÛLÊRÿS×YûOÜUûQÜVüTÔVüYÆXüb³Zý?W:ó%!&ÍVVX“mlȱddÿ½ZbüÆT`ûÎS`ûÓSaüÕSbüÖTbüÔTbüÐTbûÊSbûÁSbû·Tbû¬Udüm…Aé4 8ÿ8±<þ:º>û<½Aü>¾Bü?»DüA¶FûC°IýE¤JýK‘PìVuY»XYX•C>B«677ÀBˆFëNÑTþSÛYûUà[ûTßYûVØYü]Ê[üg¸]ýC^<ô'#)ÍXXY•šolÒ»ffÿÉ^füÔXcüÝVdûâVeüåVeüåWfüãWfüßWfüÙWeûÏVeüÃVeû·Wfüy@Jú$!#ÝDDE¨…ƒ…cÂÂÂ,êêêûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîî ©¬£Í¥¨žÿ¸¼³üžûÄÆÀû¿Â»ü’–õmokâ[[XÌHGG»535¿!!Òââ  ×323¿POPvtvtŸžŸJÅÄÅ)ßßßäääÑÑΙW+-â ™ÿ¯üÀüÌûÖüÝüàûàüÞüÚûÖûÑûÍüÉüÄü!¾ý" µü# ©ü(%˜ü(&[íéë%$%ÐNMN ƒ‚ƒf¯®¯<¼¹¼,ŒŽj@’Dð3¥8ÿ8´=ü:¾?ü<ÄAü=ÄBü?ÃDûAÀEûC»HûF´KûG°LüH¯NÿO®UÿdžgÇntn}U]VžI¨OóPØWýQßXüWå]üWã\ûYÙ\üaÌ^ük¼`ýHd@ô*',Ê]Z[–¦rmÜÄggÿÒbjüÞ[fûçYgüìYhüïYhûðZiûîZiüêZiûäZiûÛZiüÎYiüÀZiü‡EQû&"$ßCBDª‚‚fÀÀÀ.éééûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèé礦œê¨¬¢ÿ¼¾¶ûÆÇÁûÈÊÄüÃÅ¿û¾À¸ü³¸­ÿ¡¦›û“–‹õx{qÝWXTÒ,*+Ù ê ïä('(ÍEDEªnmn|›š›N¾½¾.ËÊÊ#¥¥ª=:;†Ï˜ÿ±û ÃüÒüÝûäüçüæüãûÝü×üÑüÌþÇÿÄþ Ãü" Áü$!¼ü$!´ü&$©ü((“û Dîîä424¿a_a‹Œˆ‹\‹‘Œ_H‘Nâ3¥9ÿ8¸=ü:Ã=ü;ËAû=ÎBü?ÌCüAÈEüCÃHûE¾JýF·LþI´MýK³PüL¶RýP¼Vÿm®pÁo“qQÆWûRÞXüTä[üXè^ü]åbü\Ü^üdÏaûo¾cýNiDõ.,0Æd_`–°tnéÉiiÿØfnûä^jüî\küó\küö\kü÷\lûö\lüò\lüì\lûâ\lüÖ\lüÈ]mû’KWû(#%à@@A¬€i¿¾¿/èèèúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÙÖ'œŸ”󪮣ÿ¼¿·ûÅÇÁûÇÉÄüÄÆÀû¾Á¹üµ¹±ü®²©ý¨¬¡ý¡¦™ÿ•šüwzqò>?=îôôê#"#ÓBAB®lkl~“““U¡ ŸBTTŽ­—ÿ®ý ÃûÓüàüéüíüìûèüáûØüÎüÀý)'µõ64»ð.+»û ºÿ"½ü%"¾ü&#»ü*)´ü,,©ý(+†ú*ð í!!ÖB@B®cad…OUÆ4£>ÿ7¸>ü9Æ?û;Ñ@û=ÕBû?ÔCûBÏEûCËGûEÂJýGµNûL³RúJ³PÿJ´PÿN¸TýP¿VüUÅ\û]ÈcåUÙ[ýUã\üWè]üYê_ûbéfüaÞcügÐcüs¿eþPkEô214¿icc–´woóÌkkýÝiqüèbnûñ_nû÷_oûú_oüû_püú_pûö_pûð_pûç_püÚ_pûÍ`qüšP^û*$&á=>?®~}~l¼»¼2çççúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÒÐ=—œ”ù©¬¤ÿ¹¼µüÀ¼ûÄÆÀüÞÿ¼¿·ÿ¶º²ÿµ¸°û³¶­û¬°¨ü§«£ü ¤ ý‘ûVXVùù÷ ì#!#ÓCAC¬hgd]]y–’ý«ýÀû ÓûáüêüïüðüîûæüÜüÏü¯ý-*zÚdd€†Ÿž²E¦¥ÌIdb÷(%¸ÿ%"½ý'%¾ü*)»ü02³ü06§ü#)cøóç*&*Ê>RCÂ7”Fû7´Cý9Å@û;ÓAü=ÚCû?ÜCûA×EüCÑHü>²CüáDûAàEüBÛGüAÇGý(Z+õ##×D?D©vrvp«¦«7ÀÄÁ(™Äœ‚^¿døTÉ[þXÖ_üYá`üZéaû\îcû^ïeüaéfühàküoÑkûy¿kÿPfGì=:?«srœ½{vùÒptþákvüíixûõdvûúdwûýdxûýexûýeyüùeyüõeyüëeyüßeyûÓfzü¦Yjü,%'ã9::³xwxp¸¶¸4äääùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÇÅjŽ‘‰ÿ¡¤žý­¯«ü²´°ÿmnlãKIKŸ‹ŠŒ^»¼»J»½ºº¸º¶ÿ½¿ºýÀÁ¾ü¿Á½û¸º·û¬®¯üœ¥ûmnzü#"'û  ôç&%Næ ¡ý»üÌüÜüèûñûöû÷üôüíûàüÓü¢ü6ð&%"ÑONOž†…†c¹¸¹4áàÝÌÌÛIG¸Ù%#ºÿ++Áü,1Àü-9¶û/G©ü&;iû÷'ô1ŒPü9¸Rü:ÊHü<ÚFü>äEü@æFûBâGûEÝJû?¸Dü.÷ é(&(ÌLJL£tstvœ™œM¶²¶*“¸•~[ÇbûYÖ`þ[âbü]ëdû^ïfü`ïhüdéiûjÞkûuÐpûz¼lÿQeIåGEIžŒ{zÄ€}ýÔqwþâlyüïl}üöh{üúh|ûýh|ûýh}ûýi~üúi~üõi~üíi~ûài~üÕjü§\mü-#'å889´wvws¶µ¶6ãããùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüü³´±ˆŠ‹…ÿ šü¦¨£ûŸ ›þVVTÙNLN›‰ˆ‰^¾½¾$ÉÊÈ)·¸´Þ¿À¼ÿÈÉÆüËÌÊüÇÈÈû½½Âü¬­ºü—™±ü__züùô$$vú&%½üËüÙüæüïüöûùûøûôûëûßûÑüœü&õâ545½`_`‹ŽŽZ³²³8ÉÈÄsr·—%$ºÿ+,Ãü-3Åû.=½ü1M°û-Tû$5û$J8û:¨cû:ÀTü;ÓLû>áIû@èGüBêGüDåIûFÞKûC¿Hû< ú  ôæ)()ÌCBC¬_]_wuwq†„…ae°jÕZØaÿ]ãdû_ëfûaðiücïkügélülÝmüwÐtü{µpþKYFÛRQUŽ›…ƒ¡É„„ÿ×t|ýån}ûðoû÷lüûk€üýküýl‚üýlƒûúlƒûõlƒüíl‚ûâl‚üÖn„ü¨]qü2&,ç778¶utuu´³´8âââøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööö£¤¡œˆŠ†ÿšœ—ü¢£Ÿü‘Žü???ÖHGI£|{|m¥¤¥D¯®¯2¨¨§´Á¿ÿÍÎÍüÓÔÔûÒÔÖûÊËÓûº»Ìü¥¦Æû‰‰¼üECeû;ú11¦ü-,ÏüØüäüíüôûùûúüúüôûìûßûÑû£ü$ù ïÚ:9:·\[\zyzo‹Ulj˜‘*)¹ÿ+-Çü.6Éû/BÄü2R·û3h¤ü&Oaû*oUü=µkûAÊ^ü>ÚQü?çJûAíIûCíHûEèKüGßMüIÓOü1w5ü úôéØ/-/Å=;=³H@G£T‡XÐ]Ûeÿ_ägü`ìiûdïjûfîmûjçoünÜqüxÎuü}®rþHNFÎ`ad{¦‹Š§Ì„„ÿÚyƒüæpûñq…üøp†ûüm…üýo‡ûýn‡üýoˆüúoˆûõoˆüîo‡ûão‡û×p‡ü§^sü;+1è768¹rrrv±²±9àààøøøþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóó󞜯‰Š†ÿ™š—üŸ¡ü†‡„ù312Ú757¸\[\vuvryxyj’‘‘ÊÃÃÃÿÑÒÑûÚÛÛûÜÜáûÕÕàüÇÆÜü±±Öü——Õülk±ü=;ŠüBAÎü21Ýû#"äüìûôûøûûûûüúû÷üîüâüÔû»üJû ÷ îÜ0/0ÃCBB¬SRM™GFv½**¼þ,0Ëü/9Íü1GÉü2X»û4o©ü4ƒû7yü:»jû>Ð^üBáVüCìPûBñJüDñJüFìLüIâMüJØPüJÁPü,]/ü ú÷  ñéàÙG‚JìbáiþbæjûcíküfðnüiîqûlæsûqÙtüzËwýy¥pûKLJ¹qqtk«ŽŽ®Í…ÿÜ}Šüçr…ûñrˆüùtŒüüq‹üýrŒüþrüýsüûsüösüïsŒüãsŒü×sü¨`vü@.5é657ºqoqy°°°;àààøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðð𠙚˜ÄŠ‹‰ÿ››™ü¡¡ üqrpö  å!!Ô545½A?A¬LKL®”””ìÈÈÈþÖÖÖüßàâüâãèüÝÝêüÏÏèûººäü  áüƒ‚ÞücbÛûKKãü65èü&%íüóûøûúüüüüûûüøüñûæûØüËû—ü#û÷ ñçÜ&$"Ó+*zê++Èý.3Ðû0=Òü2KÌü3^¿û5u¬û8–ü:ª€û<Álü=Ö]ü?åSûDðQüHôPüGôNüGðNüLèPûOßSûQ×UûQÄVü:~>ü0ûú øö-M/öXÀ^ücãküeélüeînühðqükítûoävüu×xüÊ}þkgóPNP£„„†]´’•·Ï‡ÿßüêv‹üótŒûùx’üüuüþuüþv’üþv’üûv’ü÷v’üïv‘üåv‘üÚw”ü¬e|ýD18ê445»nmn|®®®<ßßßøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêê‘厎ŽÿŸŸŸû§¦¥ü_^^õ ï ëâÚSQR寯¯üÎÎÎüÛÚÜûääçüççîüããñûÖÖñûÁÁïû§§íûЉìûllíüPPíü:9ðû('õûøüúüüûýüýüüüúüóûëüßüÓüÆü…ü*û ù öóDô'%­ü-.Ðü/5Õû1@Öü3OÏü5dÁü7{­ü9•–ü;°€ü<Èmû?Û_üAéUûBòOûF÷OûNøTûUôUüZïUü_çWûaàYûbØ]û`Ó_üV¿ZüGšLü?‚CûHšNü\ËbýcáküdælûfínûhñrûkðuünëwürâzüyÔ|û‚Å€ÿ`v]ãYVZ––—P½•š¾Ñ‹ÿà“üì~”ûôv‘ûú|—ûýy—ûþy—ûþz˜ûþy™ûûy™ü÷y™üïy˜üæy˜ûÛ{™ü²j…ýD1:ë223½kjl~¬«¬>ÝÝÝ÷÷÷þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÚ"ЉŠñ––•ÿ¦¦¦ü¬¬­ûZYZó õ ÷õKJKõœ››üÇÇÇüÖÕÖûááãûééìûëëóüççöüÚÚöüÅÅöü¬¬ôüŽŽôüooôüTSõü<;÷û*)ùûúüüüþûþûþüýûûû÷üðüèûÝü Òû!Èû¤üqûbûuû%"°ü,+Ðû-/×ü/7Ûü1BÚü3SÑû6iÂü8®ü:œ—ü<¶ü=Ìnü@ß_ûBìUüCõQüGùOûRúPû`øXügô]ûfî[üfé\ügã^ûiÞaûgÜdûaÜeü_Þgûaàiûcâjüdælûfínûhñrûkòuûmðwüqê{üuß~ü}Òü}¶}ÿWcWÌkhlx§¦§EŘŸÉÓ€ÿá”üíšüôz—üú|šüýƒ¡üþ‡¤üþ†¤üþ~žûü}žû÷}žüñ}üç}ûÝ~žüºqýF2=í//0Àjhiª¨ªAÜÜÜöööþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐÐ6‹‹‹öÿ¯¯¯ü···ü”’“ùutuûwvwû‘‘û³²³üÉÈÉüÔÔÔûßßßûèèéüîîñüïï÷ûêéúûÜÜúüÈÈúü¯¯ùû‘‘ùürrùûVUùü>=úû++üûýüýüþûÿûÿüýüüüùüõüïûçü ßû"×ü$ Òü%"Ïü'$Îü(%Ñü+'Öü,+Ûû/0àû19âü2EÝû4WÒû6mÂü9†­û:¡–ü<ºü?ÑmüAâ_üCïWûEöRüOúQû]ûTü`ûVücøYûiõ_üjñbüiíaükébûmæfûiäfûaågû`çiücêlûfînûhórûkôuûlôxüpð{ütèûxÜ‚üÏ…ýt¢uûSVT±~e·´µ>˘£ÜÕ€•ÿã˜ûüöŸüú~Ÿüý†¥üþ‹ªûþ‹«üþ‚¤ûü¤üø¤üò£ûé£û߃¤üÁx—ýL6Aî,,-Äfef„§§§CÚÚÚõõõþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËJý¥¥¥þ¸¹¹üÄÄÄüËËËüÎÎÎüÍÍÍûÏÏÏûÒÒÓü×××üßßàüèèèüïïðûòòöûññùûëëüûÞÞýûÊÊýü°°ýü“’üûssüûWVýü>>ýü,+ýü þüÿüÿûÿüÿûþûýûûûùüõü$!ðû"!êû"äü# àü%"Ýü(%Ýü)&ßû,(âû-,æü01èü2;æü4Hàû6ZÓû7pÁü9‰¬û<¤•ü=½û@ÓmûBå_üDðWüHøSüWüTü`üVüaýXûdûZüfù\üo÷bûzõiû|òjüxïiûqïiûgïjücðküfònühõqük÷uüm÷wûpô{üsîüvå‚ü{Ù…û€È‡ÿe„hìZYZ—’‘’RÀ¼¾;Ì–¥î׃œÿäœûî„¢û÷‡§üû¤ûý‡©üÿŒ®üÿŒ®ûý…ªûü…©üø„©ûòƒ¨ûꄨûᆪüÇ|ŸýR:Gð*++Æcbc‡¤¤¤EÙÙÙõõõþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÆÇi’’’ÿ­­­ýÃÂÂûÏÏÏûÖÖÖüÙÙÙüÚÚÚûÜÜÜüàààüäääüêêëûðððüôôõûõõùüóóüüëëþûÞÞþüÊÊþü±±þû“’þûttþüXWþü?>þü-,ÿü ÿûÿûÿüÿûÿûÿüþüýûüüùü"öü)'óü)'ïü+(ìû(%êü(%êü)&ëû,)íû.-ïû03îü2;êü4Iâü6[Ôû8rÁû:Œ«ü<§”ü?Àû@ÕmüCæ`üEñWûKøTû[üUüaþWücþYüeþ[ülü_ûyúdû~úhü‚ùmü…÷rü~÷oül÷küe÷mûgøpûjùtülùxüpøzüsôûví‚üyã…ü~Ö‰û¾†ÿZm^Öebe¥¥¦@ÇÀÅ?Ì‘¤òÛ‡¢ÿæ‚¢üðƒ¥ûøŠ­üü…«üý‰®ûÿ’µüÿ’µûý‰°ûýˆ¯ûùˆ¯üó‡®û뇯û∯ü̧ýZ@Oñ(()Èa`aŠ£¢£G×××õõõ þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüü¸¸¸‚•••ÿ´´´üËËËûÙÙÙûâââüæææüèèèüéééüìììûïïïûóóóûöööüøøúûøøüûõõþüííþüßßÿüËËÿü²±ÿû“”ÿüutÿüXWÿû?>ÿû-,ÿû!ÿûÿûÿüÿûÿûÿüÿüþûýûûû úü ùü%"öü(%õü/,ôû0-ôû1.ôü/-õü..õü/2óû2<íü4Käü7]Ôü9sÁû;«ü=¨”ü?ÁüBÖnüDç`üFòYûLùUû\üWûbþYüdþZüfþ]üsþbû}ýgû~üiû~ükûƒûoü‡ûtütûqûfûoûiürûküwüoûzûrø~ûuó‚üxê…ü|àˆû‚Óü{°‚þU\V½wtvnµ¶¶0ÏÄÊKΧøÜ‰§þ鈩üñ„©ûøŒ±üüŒ²üýвûÿ“¹üÿ˜¼üþ‘¸üý‹µüùŒµûô‹´ü쌵û㌵üц®ý`DUò&'(Ê^^^Œ Ÿ JÖÖÖôôô þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõ©©©–šššÿºººüÏÏÏûàààûéééüîîîüñññüóóóüõõõûöööûøøùûúúúüûûüûúúþûõõÿüííÿüßßÿüËËÿü²±ÿü””ÿüutÿûXXÿû@?ÿü-,ÿû! ÿûÿüÿüÿüÿûÿûÿüÿûþûýû ýü" üü#!ûü%"úû&#ùü+'ùü.*ùü53úü66ùû;>öü7Bðü6Låü6]Õü9tÂü<Ž«ü>©•û@ÁûCÖnüFçaüGòZüMùVü\üXûcþZüeÿ\ûfÿ^üvþdü~þhü~þkü€þmüƒþoü…þqüuþtülþvümýwünýyüqû}ütøûwò…ûzèˆüÜŒü…Ð’þq˜xóVVV¢ŠˆŠ\ÄÆÆ!ÕÆÍUÑŽ©ü݈©þê°üòˆ°ûùŒ´üü“ºüþ·üÿ–½üÿœÂüþ•¿ûýºüúºüõºüí»üå»û׌¶ýiJ^ó&&'Ë\\\ŽžžLÕÓÕóóó þþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðð𦦦©ŸŸŸÿ¾¾¾üÕÕÕüåååûïïïûôôôü÷÷÷üùùùüúúúüûûûüüüüûýýýüüüýûûûÿüööÿüîíÿüßßÿûÌÌÿû²±ÿü”“ÿûutÿûXXÿû@?ÿü.,ÿü! ÿûÿüÿûÿûÿüÿüÿûÿüÿüÿû!þü# ýü$!ýü&#ýü(%ýü)&ýû,(üü,*üû10ûü58øü>GñûAUçûBeØü>wÄü>­ü>¨•ü@Á€üCÖoüFæbüHñZüLùWûXüXüdþ[ügÿ]ügÿ_üsÿdü~ÿjü€ÿlü‚ÿoü…þqü‚þrümþqûjþuürþ|üuý€ûtûûu÷„üxï‡ü}æ‹üÚ‘û…Ê”ÿb{iá^[^‹œKÑÓÒÚÆÏdÒ¬ÿ߉­þë´ûô·ûù¸üý—¿üþ’½üÿ–Áüÿ¡ÈûþšÄüý“Áüú”Áüö”Áüî”Àüå“¿üÛ’¿ýqThó$%%ÍYYY‘›š›NÓÒÓòòò ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïï襤¥À¤¤£ÿÃÃÂüØØØûèèèüòòòûøøøûûûûüüüüüýýýüþþþüýýþüþþþüýýÿûûûÿüööÿüîíÿüààÿüÍÌþü³³þü˜–þüyxþüZZþûBAþü0/ÿü" ÿûÿüÿûÿüÿüÿûÿüÿüÿü ÿû!ÿü# ÿû$!ÿû'$þü)%þü+'þü-(þü/+ýü1/üû24øü3<ñü8Lçû=`ØüEyÇüH“²ûI¬œûFÁ…üEÕqüFåcûHñ[ûKøXüRüWü`þ[ügÿ^üiÿaûmÿdüyÿiü€ÿmü„ÿpûƒÿqüsÿqüiÿrükþvüoþzüuýûzú‡ûyõ‰û{íŠû€ãŽûƒ×•ü€»ÿWc\Éoknw®­®<ÛÞÝ ßÉÓ}Ö²ÿ⌲ü펶üõ“¼ûù‘½ûý—Âûþ™Äüÿ™Æüÿ¥Ìüþ¡Ëüý™Çüû™Çûö™Çûð˜Æüç—Äüà™Èýx]qô##$ÎXVX”˜—˜QÐÐÐ ñññ ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìì쟟ŸÝ§§§ÿÆÆÆûÜÜÜûëëëûõõõüúúúüýýýûþþþüþþþüÿÿÿüÿÿÿûþþÿüþþÿüûûÿüööÿûííþüÞÞýûËÊýû±°ýû””ýûvuýû[ZýûFEýü43ýü'%þû"!þûÿüÿûÿûÿûÿüÿüÿû ÿü!ÿû# ÿü%"ÿû($ÿû*&ÿü+'ÿü,*ÿü/,þü1/üü35øü5=òü8Jçü9[Øü:qÆû?‹°üD§›üLÁŠüPÖzûQåmûOðaûNøZüNüWüVþYüaÿ^ûiÿbülÿeüpÿhüuÿküvÿnüpÿoûhÿpüjÿtünþyüqþ}ütüûwù†û}óûë‘ü‚à“û†Ó—ýw§…ùSUU®€e¾½¾/ãåäÛÀÐÚ™ºÿ呹üî»üõ”Àüû˜Äûý˜Æüþ ËüÿœÊûÿ©Òûþ«ÓüýŸÍûûžÍû÷žÍüñžÍüèœËüä¤Ñý}bxõ#"$ÐUUU•—–—RÏÏÏ"ñññ ýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÜ–––𬬬ÿÈÈÈûÞÞÞûìììüöööüûûûüþþþûÿÿÿûÿÿÿüÿÿÿûÿÿÿûÿÿÿüþþÿûûûÿûööþüííýüÞÞüüÊÉûû°°úü’’ùütsùûWVùû>=úü-,ûû#!ýûýûÿüÿû ÿû ÿû$!ÿü"ÿû!ÿü"ÿü"ÿû# ÿü%"ÿü(%ÿü*&ÿü,(ÿü.)ÿü0,þü2/ýü44ùü6=òû8Ièû:ZÙü=÷ü-+øü!ûûüûþüÿüÿûÿûÿû!ÿû%#ÿû(&ÿû)&ÿû-*ÿû+(ÿü+(ÿû,)ÿû,)ÿü-)ÿü/,þü1/ýû44ùü6<òû8Hèû;XÙû=lÇü?„±ûBž›üE·†ûGÎtüHàgüJí^ûOö[ûTû]ü[ýbü^þeüaÿhü`ÿgû`ÿgüaÿhücÿkügÿpüjÿtünÿxûqþ}ütýüwû…û{öŠû~ïŽûå“û†ÙšüˆÇ›ÿ`rgÕfce€¦¥¦DÙÙÙíîîس˪ܔ¾ÿê¡Èüñ¡Êû÷›Éüü Ïüþ¥Òüÿ§Ôüÿ­Ûûÿ´ãüÿ¿ëüýµëüü³êüø²éüó°åüì¯âüëºâý†j„÷%$&ÓRQRš“’“WÌËÌ$ïïï üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌI–––ý´´´ÿÎÎÎüâââûïïïûøøøüüüüûþþþûÿÿÿûÿÿÿûÿÿÿüÿÿÿûþþÿüýýþüùùýüóóûüêê÷ûÚÚôûÄÄñûªªîûŒìüoníüSSíû=<ðü+*ôü!÷üúüüûýûÿüÿüÿûÿûÿû ÿü#!ÿü'$ÿû*'ÿû/,ÿû2.ÿû3.ÿû62ÿü74þü64üü77øû7=òü9Fçü;UØü=iÄü@€¯üB›™ýE³…ýGÊtüJÝhüMë`üOô[ûQùZûTý[üWþ^û]ÿdücÿjühÿoükÿrüjÿrüjÿsûjÿuünÿyürþ~üuýƒüyùˆû}õŒû€íûƒâ–ü‡Öü~´ýU[Yºxvwn·¶·5ãäãðïï ٮ˾ݓ¿ÿë›Çüó¨Ñüø§Òüü¢Òûý¬Ûüÿ²çüÿºîüÿºìûÿÄìûý¼èûü¶çûø¶æûô´æûï»ìüîÅôýs”÷'%'ÕONOœYËÊË%îîî üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÉÈc–––ÿ···ýÑÑÑûäääûñññüøøøüüüüûþþþûÿÿÿûÿÿÿûÿÿÿüþþÿüýýþüûûýûøøúüññ÷üææóûÕÕíü¿¿çü¥¤ãû‡…ÞûggÛüPOãû;:èü+*ìüñûöüúûüûþûÿüÿüÿü ÿû!ÿü# ÿü$"ÿû&#ÿû(%ÿü*'ÿû-*ÿû1.ÿû30þü85ûû=<øû>Aðü@LæüBY×üBiÃûC~®ýC‘÷E­‚úHÆtüKÙgüMè`üPò[ûRù[üUý\ûXþ_ûZÿaû]ÿdüaÿhüfÿnümÿuûqÿ{ûuÿ~ûuþüuþ‚üvü„üyøŠü~òŽûê“û„Þ™ü‰ÓŸþršòVVW ‹‰‹[ÇÆÇ(ëìë ñïñÙ©ÊÔß—Äÿë›Êüó£Ðûú²Úüý²ãûþ´ëûÿ¹êüÿºåüÿ¼åûÿÇéüþÂéûýºæüú»åüõ¹äûòÂæûîÁêý”xšø)&*ÖMKMžŽŽŽ[ÈÉÈ&îîî üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¿¿———ÿºººüÓÓÓûåååûòòòûùùùüýýýüþþþüþþþüþþþûþþþûýýþüüüüûøøùüôôöüììñüßßêüÎÎãü··ÛüœœÖý}}Àñdc°ÊLKÔÿ76Ûü*(âüêüñüöüûûýûþüÿüÿü ÿü!ÿü$!ÿü%"ÿû'$ÿü)%ÿü+(ÿû,*ÿû/+þû1-ýû30ûû54öû8;íûÂÂÂ'ÓÓÓçççöööýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®®®€XYYÿppoüùŠŠŠö–––Ÿà©ª©­²²²—ÇÆÇvÕÔÕ=æçæ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïôš™ÉpCA¦Ý ÿªÿ¶þ#½ü%"Äü'$Æü)&Çü+&Åü,)Áü-*¹þ-(¯ÿ2-¥ÿ\X­×¶µÒMôôòüýûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËßÍO‚»ˆÁg°mõa³hÿ]µeÿa¹iÿg½pÿsÂ}ü‡ÌäºÞ¿o¤Ò­”vƆÿ}ÇŽý‚Ä”ü„¾™ÿš¿¬ßÍÒÑ%àßàëëêöööýýýÿÿÿÿÿÿüûýúôú ÷ñüõìù4õèö\õå÷ôåøšöçù±÷êûéúïüñü÷ýøýþþÿÿÿÿÿÿÿÿÿÿÿÿÿýþÿÿû÷þÿöêüÿîßõñæãé(çèç ííí ööö üüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑF°°°€ÉÉÉDÒÒÒ9ÙÙÙ1îíîóóó øøøüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæåïš™ÊqPN¬Ò(&Ÿÿ¡ÿ §ÿ"«ÿ$!¬ÿ&"ªÿ(%§ÿ63¥ÿWT­Ü˜–Ç|àßêÿÿüÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýüýáêâ'ÇÞÉ^¸Ø»ºÚ¾¾ÝÂ{ÒåÕBìóîùúú¤Î¬Á€ºŽû~¸ÿ€µ’ÿ…±šÿµË ïððöööùùùýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿþýþýûþüúþ7þýþbÿÿÿþÿÿŸþÿÿ·üúþëøñýóõêûýòèùûöóù$ùùùûûûüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôøÀ¿ÞIˆ†Â’URªØGD¥îSR¬àrp¸¬Å‘º¹ÚNææî ÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùöÞéá6ÌßÒk·Î”¬ÅºÆØâßYþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿýúþ$úôý=øòüeüûýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõôø îîöðð÷ ùùúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿúûûýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTRUEVISION-XFILE.libopengl-perl-0.6704+dfsg.orig/genvars.pl0000644000175000017500000000315312334200655017701 0ustar gregoagregoa#!/usr/bin/perl # This is a simple one-off script to generate the various # coordinate function definitions. %shorttype = ("double" => "d", "float" => "f", "int" => "i", "short" => "s", "byte" => "b", "uint" => "ui", "ushort" => "us", "ubyte" => "ub"); sub doit { foreach $dim ($mindim..$maxdim) { @nn = @n[0..$dim-1]; foreach $type (@types) { $t = $shorttype{$type}; print "void\n$name$dim$t(", join(', ', @nn), ")\n"; print map("\tGL$type\t$_\n", @nn); print "\n"; print "void\n$name$dim${t}v_p(", join(', ', @nn), ")\n"; print map("\tGL$type\t$_\n", @nn); print "\tCODE:\n\t{\n"; print "\t\tGL$type param[$dim];\n"; print map("\t\tparam[$_] = $n[$_];\n", 0..$dim-1); print "\t\t$name$dim${t}v(param);\n\t}\n"; print "\n"; print "void\n$name$dim${t}v_s(v)\n\tSV *\tv\n\tCODE:\n\t{\n"; print "\t\tGL$type * v_s = EL(v, sizeof(GL$type)*$dim);\n\t\t$name$dim${t}v(v_s);\n\t}\n"; print "\n"; print "void\n$name$dim${t}v_c(v)\n\tvoid *\tv\n\tCODE:\n\t$name$dim${t}v(v);\n"; print "\n"; } } } @n = qw(x y z w); $name = "glVertex"; $mindim = 2; $maxdim = 4; @types = qw(double float int short); doit; @n = qw(nx ny nz); $name = "glNormal"; $mindim = 3; $maxdim = 3; @types = qw(byte double float int short); doit; @n = qw(red green blue alpha); $name = "glColor"; $mindim = 3; $maxdim = 4; @types = qw(byte double float int short ubyte uint ushort); doit; @n = qw(s t r q); $name = "glTexCoord"; $mindim = 1; $maxdim = 4; @types = qw(double float int short); doit; @n = qw(x y z w); $name = "glRasterPos"; $mindim = 2; $maxdim = 4; @types = qw(double float int short); doit; libopengl-perl-0.6704+dfsg.orig/fragment.cg0000644000175000017500000000062212334200655020013 0ustar gregoagregoa// input fragment struct FragIn { float2 texcoord : TEXCOORD0; }; // output fragment struct FragOut { float4 color : COLOR; }; uniform float4 surfacecolor; // fragment shader main entry FragOut main(FragIn IN) { FragOut OUT; float1 v = 2.0 * IN.texcoord.y; v = 1.01f - abs(1.0f - v); // Some cards have a rounding error OUT.color = float4(v,v,v, 1.0f) * surfacecolor; return OUT; } libopengl-perl-0.6704+dfsg.orig/vertex.glsl0000644000175000017500000000072312334200655020077 0ustar gregoagregoauniform vec4 center; uniform mat4 xform; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position *= xform; // Calc texcoord values vec4 pos = gl_Vertex; float d = sqrt(pos.x * pos.x + pos.y * pos.y); float a = atan(pos.x/pos.y) / 3.1415; if (a < 0.0) a += 1.0; a *= 2.0; a -= float(int(a)); pos -= center; float h = pos.z; h = abs(2.0 * atan(h/d) / 3.1415); gl_TexCoord[0].x = a; gl_TexCoord[0].y = h; } libopengl-perl-0.6704+dfsg.orig/pogl_gl_Ver3_Tex1.xs0000644000175000017500000005172312334200655021504 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:10:11 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::Ver3Tex1 PACKAGE = OpenGL #ifdef HAVE_GL #//# glVertex3d($x, $y, $z); void glVertex3d(x, y, z) GLdouble x GLdouble y GLdouble z #//# glVertex3dv_c((CPTR)v); void glVertex3dv_c(v) void * v CODE: glVertex3dv(v); #//# glVertex3dv_s((PACKED)v); void glVertex3dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glVertex3dv(v_s); } #//!!! Do we really need this? It duplicates glVertex3d #//# glVertex3dv_p($x, $y, $z); void glVertex3dv_p(x, y, z) GLdouble x GLdouble y GLdouble z CODE: { GLdouble param[3]; param[0] = x; param[1] = y; param[2] = z; glVertex3dv(param); } #//# glVertex3f($x, $y, $z); void glVertex3f(x, y, z) GLfloat x GLfloat y GLfloat z #//# glVertex3fv_c((CPTR)v); void glVertex3fv_c(v) void * v CODE: glVertex3fv(v); #//# glVertex3fv_s((PACKED)v); void glVertex3fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glVertex3fv(v_s); } #//!!! Do we really need this? It duplicates glVertex3f #//# glVertex3fv_p($x, $y, $z); void glVertex3fv_p(x, y, z) GLfloat x GLfloat y GLfloat z CODE: { GLfloat param[3]; param[0] = x; param[1] = y; param[2] = z; glVertex3fv(param); } #//# glVertex3i(x, y, z); void glVertex3i(x, y, z) GLint x GLint y GLint z #//# glVertex3iv_c((CPTR)v); void glVertex3iv_c(v) void * v CODE: glVertex3iv(v); #//# glVertex3iv_s((PACKED)v); void glVertex3iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*3); glVertex3iv(v_s); } #//!!! Do we really need this? It duplicates glVertex3i #//# glVertex3iv_p($x, $y, $z); void glVertex3iv_p(x, y, z) GLint x GLint y GLint z CODE: { GLint param[3]; param[0] = x; param[1] = y; param[2] = z; glVertex3iv(param); } #//# glVertex3s($x, $y, $z); void glVertex3s(x, y, z) GLshort x GLshort y GLshort z #//# glVertex3sv_c((CPTR)v); void glVertex3sv_c(v) void * v CODE: glVertex3sv(v); #//# glVertex3sv_s((PACKED)v); void glVertex3sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glVertex3sv(v_s); } #//!!! Do we really need this? It duplicates glVertex3s #//# glVertex3sv_p($x, $y, $z); void glVertex3sv_p(x, y, z) GLshort x GLshort y GLshort z CODE: { GLshort param[3]; param[0] = x; param[1] = y; param[2] = z; glVertex3sv(param); } #//# glVertex4d($x, $y, $z, $w); void glVertex4d(x, y, z, w) GLdouble x GLdouble y GLdouble z GLdouble w #//# glVertex4dv_c((CPTR)v); void glVertex4dv_c(v) void * v CODE: glVertex4dv(v); #//# glVertex4dv_s((PACKED)v); void glVertex4dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glVertex4dv(v_s); } #//!!! Do we really need this? It duplicates glVertex4d #//# glVertex4dv_p($x, $y, $z, $w); void glVertex4dv_p(x, y, z, w) GLdouble x GLdouble y GLdouble z GLdouble w CODE: { GLdouble param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertex4dv(param); } #//# glVertex4f($x, $y, $z, $w); void glVertex4f(x, y, z, w) GLfloat x GLfloat y GLfloat z GLfloat w #//# glVertex4fv_c((CPTR)v); void glVertex4fv_c(v) void * v CODE: glVertex4fv(v); #//# glVertex4fv_s((PACKED)v); void glVertex4fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glVertex4fv(v_s); } #//!!! Do we really need this? It duplicates glVertex4f #//# glVertex4fv_p($x, $y, $z, $w); void glVertex4fv_p(x, y, z, w) GLfloat x GLfloat y GLfloat z GLfloat w CODE: { GLfloat param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertex4fv(param); } #//# glVertex4i($x, $y, $z, $w); void glVertex4i(x, y, z, w) GLint x GLint y GLint z GLint w #//# glVertex4iv_c((CPTR)v); void glVertex4iv_c(v) void * v CODE: glVertex4iv(v); #//# glVertex4iv_s((PACKED)v); void glVertex4iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glVertex4iv(v_s); } #//!!! Do we really need this? It duplicates glVertex4i #//# glVertex4iv_p($x, $y, $z, $w); void glVertex4iv_p(x, y, z, w) GLint x GLint y GLint z GLint w CODE: { GLint param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertex4iv(param); } #//# glVertex4s($x, $y, $z, $w); void glVertex4s(x, y, z, w) GLshort x GLshort y GLshort z GLshort w #//# glVertex4sv_s((PACKED)v); void glVertex4sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glVertex4sv(v_s); } #//# glVertex4sv_c((CPTR)v); void glVertex4sv_c(v) void * v CODE: glVertex4sv(v); #//!!! Do we really need this? It duplicates glVertex4s #//# glVertex4sv_p($x, $y, $z, $w); void glVertex4sv_p(x, y, z, w) GLshort x GLshort y GLshort z GLshort w CODE: { GLshort param[4]; param[0] = x; param[1] = y; param[2] = z; param[3] = w; glVertex4sv(param); } #//# glNormal3b($nx, $ny, $nz); void glNormal3b(nx, ny, nz) GLbyte nx GLbyte ny GLbyte nz #//# glNormal3bv_c((CPTR)v); void glNormal3bv_c(v) void * v CODE: glNormal3bv(v); #//# glNormal3bv_s((PACKED)v); void glNormal3bv_s(v) SV * v CODE: { GLbyte * v_s = EL(v, sizeof(GLbyte)*3); glNormal3bv(v_s); } #//!!! Do we really need this? It duplicates glNormal3b #//# glNormal3bv_p($nx, $ny, $nz); void glNormal3bv_p(nx, ny, nz) GLbyte nx GLbyte ny GLbyte nz CODE: { GLbyte param[3]; param[0] = nx; param[1] = ny; param[2] = nz; glNormal3bv(param); } #//# glNormal3d($nx, $ny, $nz); void glNormal3d(nx, ny, nz) GLdouble nx GLdouble ny GLdouble nz #//# glNormal3dv_c((CPTR)v); void glNormal3dv_c(v) void * v CODE: glNormal3dv(v); #//# glNormal3dv_s((PACKED)v); void glNormal3dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glNormal3dv(v_s); } #//!!! Do we really need this? It duplicates glNormal3d #//# glNormal3dv_p($nx, $ny, $nz); void glNormal3dv_p(nx, ny, nz) GLdouble nx GLdouble ny GLdouble nz CODE: { GLdouble param[3]; param[0] = nx; param[1] = ny; param[2] = nz; glNormal3dv(param); } #//# glNormal3f($nx, $ny, $nz); void glNormal3f(nx, ny, nz) GLfloat nx GLfloat ny GLfloat nz #//# glNormal3fv_c((CPTR)v); void glNormal3fv_c(v) void * v CODE: glNormal3fv(v); #//# glNormal3fv_s((PACKED)v); void glNormal3fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glNormal3fv(v_s); } #//!!! Do we really need this? It duplicates glNormal3f #//# glNormal3fv_p($nx, $ny, $nz); void glNormal3fv_p(nx, ny, nz) GLfloat nx GLfloat ny GLfloat nz CODE: { GLfloat param[3]; param[0] = nx; param[1] = ny; param[2] = nz; glNormal3fv(param); } #//# glNormal3i($nx, $ny, $nz); void glNormal3i(nx, ny, nz) GLint nx GLint ny GLint nz #//# glNormal3iv_c((CPTR)v); void glNormal3iv_c(v) void * v CODE: glNormal3iv(v); #//# glNormal3iv_s((PACKED)v); void glNormal3iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*3); glNormal3iv(v_s); } #//!!! Do we really need this? It duplicates glNormal3i #//# glNormal3iv_p($nx, $ny, $nz); void glNormal3iv_p(nx, ny, nz) GLint nx GLint ny GLint nz CODE: { GLint param[3]; param[0] = nx; param[1] = ny; param[2] = nz; glNormal3iv(param); } #//# glNormal3s($nx, $ny, $nz); void glNormal3s(nx, ny, nz) GLshort nx GLshort ny GLshort nz #//# glNormal3sv_c((CPTR)v); void glNormal3sv_c(v) void * v CODE: glNormal3sv(v); #//# glNormal3sv_s((PACKED)v); void glNormal3sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glNormal3sv(v_s); } #//!!! Do we really need this? It duplicates glNormal3s #//# glNormal3sv_p($nx, $ny, $nz); void glNormal3sv_p(nx, ny, nz) GLshort nx GLshort ny GLshort nz CODE: { GLshort param[3]; param[0] = nx; param[1] = ny; param[2] = nz; glNormal3sv(param); } #//# glColor3b($red, $green, $blue); void glColor3b(red, green, blue) GLbyte red GLbyte green GLbyte blue #//# glColor3bv_c((CPTR)v); void glColor3bv_c(v) void * v CODE: glColor3bv(v); #//# glColor3bv_s((PACKED)v); void glColor3bv_s(v) SV * v CODE: { GLbyte * v_s = EL(v, sizeof(GLbyte)*3); glColor3bv(v_s); } #//!!! Do we really need this? It duplicates glColor3b #//# glColor3bv_p($red, $green, $blue); void glColor3bv_p(red, green, blue) GLbyte red GLbyte green GLbyte blue CODE: { GLbyte param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3bv(param); } #//# glColor3d($red, $green, $blue); void glColor3d(red, green, blue) GLdouble red GLdouble green GLdouble blue #//# glColor3dv_c((CPTR)v); void glColor3dv_c(v) void * v CODE: glColor3dv(v); #//# glColor3dv_s((PACKED)v); void glColor3dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*3); glColor3dv(v_s); } #//!!! Do we really need this? It duplicates glColor3d #//# glColor3dv_p($red, $green, $blue); void glColor3dv_p(red, green, blue) GLdouble red GLdouble green GLdouble blue CODE: { GLdouble param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3dv(param); } #//# glColor3f($red, $green, $blue); void glColor3f(red, green, blue) GLfloat red GLfloat green GLfloat blue #//# glColor3fv_c((CPTR)v); void glColor3fv_c(v) void * v CODE: glColor3fv(v); #//# glColor3fv_s((PACKED)v); void glColor3fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*3); glColor3fv(v_s); } #//!!! Do we really need this? It duplicates glColor3s #//# glColor3sv_p($red, $green, $blue); void glColor3fv_p(red, green, blue) GLfloat red GLfloat green GLfloat blue CODE: { GLfloat param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3fv(param); } #//# glColor3i($red, $green, $blue); void glColor3i(red, green, blue) GLint red GLint green GLint blue #//# glColor3iv_c((CPTR)v); void glColor3iv_c(v) void * v CODE: glColor3iv(v); #//# glColor3iv_s((PACKED)v); void glColor3iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*3); glColor3iv(v_s); } #//!!! Do we really need this? It duplicates glColor3i #//# glColor3iv_p($red, $green, $blue); void glColor3iv_p(red, green, blue) GLint red GLint green GLint blue CODE: { GLint param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3iv(param); } #//# glColor3s($red, $green, $blue); void glColor3s(red, green, blue) GLshort red GLshort green GLshort blue #//# glColor3sv_c((CPTR)v); void glColor3sv_c(v) void * v CODE: glColor3sv(v); #//# glColor3sv_s((PACKED)v); void glColor3sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*3); glColor3sv(v_s); } #//!!! Do we really need this? It duplicates glColor3s #//# glColor3sv_p($red, $green, $blue); void glColor3sv_p(red, green, blue) GLshort red GLshort green GLshort blue CODE: { GLshort param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3sv(param); } #//# glColor3ub($red, $green, $blue); void glColor3ub(red, green, blue) GLubyte red GLubyte green GLubyte blue #//# glColor3ubv_c((CPTR)v); void glColor3ubv_c(v) void * v CODE: glColor3ubv(v); #//# glColor3ubv_s((PACKED)v); void glColor3ubv_s(v) SV * v CODE: { GLubyte * v_s = EL(v, sizeof(GLubyte)*3); glColor3ubv(v_s); } #//!!! Do we really need this? It duplicates glColor3ub #//# glColor3ubv_p($red, $green, $blue); void glColor3ubv_p(red, green, blue) GLubyte red GLubyte green GLubyte blue CODE: { GLubyte param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3ubv(param); } #//# glColor3ui($red, $green, $blue); void glColor3ui(red, green, blue) GLuint red GLuint green GLuint blue #//# glColor3uiv_c((CPTR)v); void glColor3uiv_c(v) void * v CODE: glColor3uiv(v); #//# glColor3uiv_s((PACKED)v); void glColor3uiv_s(v) SV * v CODE: { GLuint * v_s = EL(v, sizeof(GLuint)*3); glColor3uiv(v_s); } #//!!! Do we really need this? It duplicates glColor3ui #//# glColor3uiv_p($red, $green, $blue); void glColor3uiv_p(red, green, blue) GLuint red GLuint green GLuint blue CODE: { GLuint param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3uiv(param); } #//# glColor3us($red, $green, $blue); void glColor3us(red, green, blue) GLushort red GLushort green GLushort blue #//# glColor3usv_c((CPTR)v); void glColor3usv_c(v) void * v CODE: glColor3usv(v); #//# glColor3usv_s((PACKED)v); void glColor3usv_s(v) SV * v CODE: { GLushort * v_s = EL(v, sizeof(GLushort)*3); glColor3usv(v_s); } #//!!! Do we really need this? It duplicates glColor3us #//# glColor3usv_p($red, $green, $blue); void glColor3usv_p(red, green, blue) GLushort red GLushort green GLushort blue CODE: { GLushort param[3]; param[0] = red; param[1] = green; param[2] = blue; glColor3usv(param); } #//# glColor4b($red, $green, $blue, $alpha); void glColor4b(red, green, blue, alpha) GLbyte red GLbyte green GLbyte blue GLbyte alpha #//# glColor4bv_c((CPTR)v); void glColor4bv_c(v) void * v CODE: glColor4bv(v); #//# glColor4bv_s((PACKED)v); void glColor4bv_s(v) SV * v CODE: { GLbyte * v_s = EL(v, sizeof(GLbyte)*4); glColor4bv(v_s); } #//!!! Do we really need this? It duplicates glColor3b #//# glColor3bv_p($red, $green, $blue, $alpha); void glColor4bv_p(red, green, blue, alpha) GLbyte red GLbyte green GLbyte blue GLbyte alpha CODE: { GLbyte param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4bv(param); } #//# glColor4d($red, $green, $blue, $alpha); void glColor4d(red, green, blue, alpha) GLdouble red GLdouble green GLdouble blue GLdouble alpha #//# glColor4dv_c((CPTR)v); void glColor4dv_c(v) void * v CODE: glColor4dv(v); #//# glColor4dv_s((PACKED)v); void glColor4dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*4); glColor4dv(v_s); } #//!!! Do we really need this? It duplicates glColor3d #//# glColor3dv_p($red, $green, $blue, $alpha); void glColor4dv_p(red, green, blue, alpha) GLdouble red GLdouble green GLdouble blue GLdouble alpha CODE: { GLdouble param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4dv(param); } #//# glColor4f($red, $green, $blue, $alpha); void glColor4f(red, green, blue, alpha) GLfloat red GLfloat green GLfloat blue GLfloat alpha #//# glColor4fv_c((CPTR)v); void glColor4fv_c(v) void * v CODE: glColor4fv(v); #//# glColor4fv_s((PACKED)v); void glColor4fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*4); glColor4fv(v_s); } #//!!! Do we really need this? It duplicates glColor3f #//# glColor3fv_p($red, $green, $blue, $alpha); void glColor4fv_p(red, green, blue, alpha) GLfloat red GLfloat green GLfloat blue GLfloat alpha CODE: { GLfloat param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4fv(param); } #//# glColor4i($red, $green, $blue, $alpha); void glColor4i(red, green, blue, alpha) GLint red GLint green GLint blue GLint alpha #//# glColor4iv_c((CPTR)v); void glColor4iv_c(v) void * v CODE: glColor4iv(v); #//# glColor4iv_s((PACKED)v); void glColor4iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*4); glColor4iv(v_s); } #//!!! Do we really need this? It duplicates glColor3i #//# glColor3iv_p($red, $green, $blue, $alpha); void glColor4iv_p(red, green, blue, alpha) GLint red GLint green GLint blue GLint alpha CODE: { GLint param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4iv(param); } #//# glColor4s($red, $green, $blue, $alpha); void glColor4s(red, green, blue, alpha) GLshort red GLshort green GLshort blue GLshort alpha #//# glColor4sv_c((CPTR)v); void glColor4sv_c(v) void * v CODE: glColor4sv(v); #//# glColor4sv_s((PACKED)v); void glColor4sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*4); glColor4sv(v_s); } #//!!! Do we really need this? It duplicates glColor3s #//# glColor3sv_p($red, $green, $blue, $alpha); void glColor4sv_p(red, green, blue, alpha) GLshort red GLshort green GLshort blue GLshort alpha CODE: { GLshort param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4sv(param); } #//# glColor4ub(red, green, blue, alpha); void glColor4ub(red, green, blue, alpha) GLubyte red GLubyte green GLubyte blue GLubyte alpha #//# glColor4ubv_c((CPTR)v); void glColor4ubv_c(v) void * v CODE: glColor4ubv(v); #//# glColor4ubv_s((PACKED)v); void glColor4ubv_s(v) SV * v CODE: { GLubyte * v_s = EL(v, sizeof(GLubyte)*4); glColor4ubv(v_s); } #//!!! Do we really need this? It duplicates glColor3ub #//# glColor3ubv_p($red, $green, $blue, $alpha); void glColor4ubv_p(red, green, blue, alpha) GLubyte red GLubyte green GLubyte blue GLubyte alpha CODE: { GLubyte param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4ubv(param); } #//# glColor4ui($red, $green, $blue, $alpha); void glColor4ui(red, green, blue, alpha) GLuint red GLuint green GLuint blue GLuint alpha #//# glColor4uiv_s((PACKED)v); void glColor4uiv_s(v) SV * v CODE: { GLuint * v_s = EL(v, sizeof(GLuint)*4); glColor4uiv(v_s); } #//# glColor4uiv_c((CPTR)v); void glColor4uiv_c(v) void * v CODE: glColor4uiv(v); #//!!! Do we really need this? It duplicates glColor3ui #//# glColor3uiv_p($red, $green, $blue, $alpha); void glColor4uiv_p(red, green, blue, alpha) GLuint red GLuint green GLuint blue GLuint alpha CODE: { GLuint param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4uiv(param); } #//# glColor4us($red, $green, $blue, $alpha); void glColor4us(red, green, blue, alpha) GLushort red GLushort green GLushort blue GLushort alpha #//# glColor4usv_c((CPTR)v); void glColor4usv_c(v) void * v CODE: glColor4usv(v); #//# glColor4usv_s((PACKED)v); void glColor4usv_s(v) SV * v CODE: { GLushort * v_s = EL(v, sizeof(GLushort)*4); glColor4usv(v_s); } #//!!! Do we really need this? It duplicates glColor3us #//# glColor3usv_p($red, $green, $blue, $alpha); void glColor4usv_p(red, green, blue, alpha) GLushort red GLushort green GLushort blue GLushort alpha CODE: { GLushort param[4]; param[0] = red; param[1] = green; param[2] = blue; param[3] = alpha; glColor4usv(param); } #//# glTexCoord1d($s); void glTexCoord1d(s) GLdouble s #//# glTexCoord1dv_c((CPTR)v); void glTexCoord1dv_c(v) void * v CODE: glTexCoord1dv(v); #//# glTexCoord1dv_c((PACKED)v); void glTexCoord1dv_s(v) SV * v CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)*1); glTexCoord1dv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord1d #//# glTexCoord1dv_p($s); void glTexCoord1dv_p(s) GLdouble s CODE: { GLdouble param[1]; param[0] = s; glTexCoord1dv(param); } #//# glTexCoord1f($s); void glTexCoord1f(s) GLfloat s #//# glTexCoord1fv_c((CPTR)v); void glTexCoord1fv_c(v) void * v CODE: glTexCoord1fv(v); #//# glTexCoord1fv_s((PACKED)v); void glTexCoord1fv_s(v) SV * v CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)*1); glTexCoord1fv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord1f #//# glTexCoord1fv_p($s); void glTexCoord1fv_p(s) GLfloat s CODE: { GLfloat param[1]; param[0] = s; glTexCoord1fv(param); } #//# glTexCoord1i($s); void glTexCoord1i(s) GLint s #//# glTexCoord1iv_c((CPTR)v); void glTexCoord1iv_c(v) void * v CODE: glTexCoord1iv(v); #//# glTexCoord1iv_s((PACKED)v); void glTexCoord1iv_s(v) SV * v CODE: { GLint * v_s = EL(v, sizeof(GLint)*1); glTexCoord1iv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord1i #//# glTexCoord1iv_p($s); void glTexCoord1iv_p(s) GLint s CODE: { GLint param[1]; param[0] = s; glTexCoord1iv(param); } #//# glTexCoord1s($s); void glTexCoord1s(s) GLshort s #//# glTexCoord1sv_c((CPTR)v) void glTexCoord1sv_c(v) void * v CODE: glTexCoord1sv(v); #//# glTexCoord1sv_s((PACKED)v) void glTexCoord1sv_s(v) SV * v CODE: { GLshort * v_s = EL(v, sizeof(GLshort)*1); glTexCoord1sv(v_s); } #//!!! Do we really need this? It duplicates glTexCoord1s #//# glTexCoord1sv_p($s); void glTexCoord1sv_p(s) GLshort s CODE: { GLshort param[1]; param[0] = s; glTexCoord1sv(param); } #endif /* HAVE_GL */ libopengl-perl-0.6704+dfsg.orig/gl_util.c0000644000175000017500000006257512334200655017517 0ustar gregoagregoa #include "gl_util.h" int gl_texparameter_count(GLenum pname) { #ifdef GL_EXT_texture_object switch (pname) { case GL_TEXTURE_PRIORITY_EXT: case GL_TEXTURE_RESIDENT_EXT: return 1; } #endif /* FIXME: Missing stuff? */ #ifdef GL_VERSION_1_2 switch (pname) { case GL_TEXTURE_WRAP_R: case GL_TEXTURE_DEPTH: return 1; case GL_TEXTURE_MIN_LOD: case GL_TEXTURE_MAX_LOD: case GL_TEXTURE_BASE_LEVEL: case GL_TEXTURE_MAX_LEVEL: return 1; } #endif switch (pname) { case GL_TEXTURE_MAG_FILTER: case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_T: case GL_TEXTURE_PRIORITY: case GL_TEXTURE_RESIDENT: return 1; case GL_TEXTURE_BORDER_COLOR: return 4; default: croak("Unknown texparameter parameter"); } return 0; // Just to make the compiler happy } int gl_texenv_count(GLenum pname) { switch (pname) { case GL_TEXTURE_ENV_MODE: return 1; case GL_TEXTURE_ENV_COLOR: return 4; default: croak("Unknown texenv parameter"); } return 0; // Just to make the compiler happy } int gl_texgen_count(GLenum pname) { switch (pname) { case GL_TEXTURE_GEN_MODE: return 1; case GL_OBJECT_PLANE: case GL_EYE_PLANE: return 4; default: croak("Unknown texgen parameter"); } return 0; // Just to make the compiler happy } int gl_material_count(GLenum pname) { switch (pname) { case GL_AMBIENT: case GL_DIFFUSE: case GL_AMBIENT_AND_DIFFUSE: case GL_SPECULAR: case GL_EMISSION: return 4; case GL_COLOR_INDEXES: return 3; case GL_SHININESS: return 1; default: croak("Unknown material parameter"); } return 0; // Just to make the compiler happy } int gl_map_count(GLenum target, GLenum query) { switch (query) { case GL_COEFF: switch (target) { case GL_MAP1_VERTEX_3: case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_3: return 3; case GL_MAP1_VERTEX_4: case GL_MAP1_COLOR_4: case GL_MAP1_TEXTURE_COORD_4: return 4; case GL_MAP1_TEXTURE_COORD_2: return 2; case GL_MAP1_INDEX: case GL_MAP1_TEXTURE_COORD_1: return 1; case GL_MAP2_VERTEX_3: case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_3: return 3; case GL_MAP2_VERTEX_4: case GL_MAP2_COLOR_4: case GL_MAP2_TEXTURE_COORD_4: return 4; case GL_MAP2_TEXTURE_COORD_2: return 2; case GL_MAP2_INDEX: case GL_MAP2_TEXTURE_COORD_1: return 1; default: croak("Unknown map target"); } case GL_ORDER: switch (target) { case GL_MAP1_VERTEX_3: case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_3: case GL_MAP1_VERTEX_4: case GL_MAP1_COLOR_4: case GL_MAP1_TEXTURE_COORD_4: case GL_MAP1_TEXTURE_COORD_2: case GL_MAP1_INDEX: case GL_MAP1_TEXTURE_COORD_1: return 1; case GL_MAP2_VERTEX_3: case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_3: case GL_MAP2_VERTEX_4: case GL_MAP2_COLOR_4: case GL_MAP2_TEXTURE_COORD_4: case GL_MAP2_TEXTURE_COORD_2: case GL_MAP2_INDEX: case GL_MAP2_TEXTURE_COORD_1: return 2; default: croak("Unknown map target"); } case GL_DOMAIN: switch (target) { case GL_MAP1_VERTEX_3: case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_3: case GL_MAP1_VERTEX_4: case GL_MAP1_COLOR_4: case GL_MAP1_TEXTURE_COORD_4: case GL_MAP1_TEXTURE_COORD_2: case GL_MAP1_INDEX: case GL_MAP1_TEXTURE_COORD_1: return 2; case GL_MAP2_VERTEX_3: case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_3: case GL_MAP2_VERTEX_4: case GL_MAP2_COLOR_4: case GL_MAP2_TEXTURE_COORD_4: case GL_MAP2_TEXTURE_COORD_2: case GL_MAP2_INDEX: case GL_MAP2_TEXTURE_COORD_1: return 4; default: croak("Unknown map target"); } default: croak("Unknown map query"); } return 0; // Just to make the compiler happy } int gl_light_count(GLenum pname) { switch (pname) { case GL_AMBIENT: case GL_DIFFUSE: case GL_SPECULAR: case GL_POSITION: return 4; case GL_SPOT_DIRECTION: return 3; case GL_SPOT_EXPONENT: case GL_SPOT_CUTOFF: case GL_CONSTANT_ATTENUATION: case GL_LINEAR_ATTENUATION: case GL_QUADRATIC_ATTENUATION: return 1; default: croak("Unknown light parameter"); } return 0; // Just to make the compiler happy } int gl_lightmodel_count(GLenum pname) { switch (pname) { case GL_LIGHT_MODEL_AMBIENT: return 4; case GL_LIGHT_MODEL_LOCAL_VIEWER: case GL_LIGHT_MODEL_TWO_SIDE: return 1; default: croak("Unknown light model"); } return 0; // Just to make the compiler happy } int gl_fog_count(GLenum pname) { switch (pname) { case GL_FOG_COLOR: return 4; case GL_FOG_MODE: case GL_FOG_DENSITY: case GL_FOG_START: case GL_FOG_END: case GL_FOG_INDEX: return 1; default: croak("Unknown fog parameter"); } return 0; // Just to make the compiler happy } int gl_get_count(GLenum param) { /* 3 */ #ifdef GL_EXT_polygon_offset switch (param) { case GL_POLYGON_OFFSET_EXT: case GL_POLYGON_OFFSET_FACTOR_EXT: case GL_POLYGON_OFFSET_BIAS_EXT: return 1; } #endif #ifdef GL_VERSION_1_2 switch (param) { case GL_TEXTURE_3D: case GL_UNPACK_SKIP_IMAGES: case GL_UNPACK_IMAGE_HEIGHT: case GL_PACK_SKIP_IMAGES: case GL_PACK_IMAGE_HEIGHT: case GL_MAX_3D_TEXTURE_SIZE: return 1; case GL_RESCALE_NORMAL: return 1; case GL_LIGHT_MODEL_COLOR_CONTROL: return 1; case GL_MAX_ELEMENTS_VERTICES: case GL_MAX_ELEMENTS_INDICES: return 1; } #endif #ifdef GL_VERSION_1_1 switch (param) { case GL_TEXTURE_COORD_ARRAY: case GL_TEXTURE_COORD_ARRAY_SIZE: case GL_TEXTURE_COORD_ARRAY_STRIDE: case GL_TEXTURE_COORD_ARRAY_TYPE: case GL_VERTEX_ARRAY: case GL_VERTEX_ARRAY_SIZE: case GL_VERTEX_ARRAY_STRIDE: case GL_VERTEX_ARRAY_TYPE: case GL_POLYGON_OFFSET_FACTOR: case GL_POLYGON_OFFSET_UNITS: case GL_POLYGON_OFFSET_FILL: case GL_POLYGON_OFFSET_LINE: case GL_POLYGON_OFFSET_POINT: case GL_NORMAL_ARRAY: case GL_NORMAL_ARRAY_STRIDE: case GL_NORMAL_ARRAY_TYPE: case GL_INDEX_LOGIC_OP: case GL_INDEX_ARRAY: case GL_INDEX_ARRAY_STRIDE: case GL_INDEX_ARRAY_TYPE: case GL_EDGE_FLAG_ARRAY: case GL_EDGE_FLAG_ARRAY_STRIDE: case GL_COLOR_ARRAY: case GL_COLOR_ARRAY_SIZE: case GL_COLOR_ARRAY_STRIDE: case GL_COLOR_ARRAY_TYPE: case GL_COLOR_LOGIC_OP: return 1; } #endif /* 18 */ #ifdef GL_EXT_cmyka switch (param) { case GL_PACK_CMYK_HINT_EXT: case GL_UNPACK_CMYK_HINT_EXT: return 1; } #endif /* 30 */ #ifdef GL_EXT_vertex_array switch (param) { case GL_VERTEX_ARRAY_EXT: case GL_VERTEX_ARRAY_SIZE_EXT: case GL_VERTEX_ARRAY_STRIDE_EXT: case GL_VERTEX_ARRAY_TYPE_EXT: case GL_VERTEX_ARRAY_COUNT_EXT: case GL_NORMAL_ARRAY_EXT: case GL_NORMAL_ARRAY_STRIDE_EXT: case GL_NORMAL_ARRAY_TYPE_EXT: case GL_NORMAL_ARRAY_COUNT_EXT: case GL_COLOR_ARRAY_EXT: case GL_COLOR_ARRAY_SIZE_EXT: case GL_COLOR_ARRAY_STRIDE_EXT: case GL_COLOR_ARRAY_TYPE_EXT: case GL_COLOR_ARRAY_COUNT_EXT: case GL_INDEX_ARRAY_EXT: case GL_INDEX_ARRAY_STRIDE_EXT: case GL_INDEX_ARRAY_TYPE_EXT: case GL_INDEX_ARRAY_COUNT_EXT: case GL_TEXTURE_COORD_ARRAY_EXT: case GL_TEXTURE_COORD_ARRAY_SIZE_EXT: case GL_TEXTURE_COORD_ARRAY_STRIDE_EXT: case GL_TEXTURE_COORD_ARRAY_TYPE_EXT: case GL_TEXTURE_COORD_ARRAY_COUNT_EXT: case GL_EDGE_FLAG_ARRAY_EXT: case GL_EDGE_FLAG_ARRAY_STRIDE_EXT: case GL_EDGE_FLAG_ARRAY_COUNT_EXT: return 1; } #endif #ifdef GL_EXT_framebuffer_object switch (param) { case GL_FRAMEBUFFER_BINDING_EXT: case GL_RENDERBUFFER_BINDING_EXT: case GL_MAX_COLOR_ATTACHMENTS_EXT: case GL_MAX_RENDERBUFFER_SIZE_EXT: return 1; } #endif #ifdef GL_ARB_point_sprite switch (param) { case GL_POINT_SPRITE_ARB: case GL_COORD_REPLACE_ARB: return 1; } #endif #ifdef GL_ARB_point_parameters switch (param) { case GL_POINT_SIZE_MIN_ARB: case GL_POINT_SIZE_MAX_ARB: case GL_POINT_FADE_THRESHOLD_SIZE_ARB: return 1; case GL_POINT_DISTANCE_ATTENUATION_ARB: return 3; } #endif /* 79 */ #if defined(GL_EXT_clip_volume_hint) && defined(GL_VOLUME_CLIPPING_HINT_EXT) switch (param) { case GL_VOLUME_CLIPPING_HINT_EXT: return 1; } #endif switch (param) { case GL_ACCUM_ALPHA_BITS: case GL_ACCUM_RED_BITS: case GL_ACCUM_BLUE_BITS: case GL_ACCUM_GREEN_BITS: case GL_ALPHA_BIAS: case GL_ALPHA_BITS: case GL_ALPHA_SCALE: case GL_ALPHA_TEST: case GL_ALPHA_TEST_FUNC: case GL_ALPHA_TEST_REF: case GL_ATTRIB_STACK_DEPTH: case GL_AUTO_NORMAL: case GL_AUX_BUFFERS: case GL_BLEND: case GL_BLEND_DST: case GL_BLEND_EQUATION_EXT: case GL_BLEND_SRC: case GL_BLUE_BIAS: case GL_BLUE_BITS: case GL_BLUE_SCALE: case GL_CLIENT_ATTRIB_STACK_DEPTH: case GL_COLOR_MATERIAL: case GL_COLOR_MATERIAL_FACE: case GL_COLOR_MATERIAL_PARAMETER: case GL_CULL_FACE: case GL_CULL_FACE_MODE: case GL_CURRENT_INDEX: case GL_CURRENT_RASTER_DISTANCE: case GL_CURRENT_RASTER_INDEX: case GL_CURRENT_RASTER_POSITION_VALID: case GL_DEPTH_BIAS: case GL_DEPTH_BITS: case GL_DEPTH_CLEAR_VALUE: case GL_DEPTH_FUNC: case GL_DEPTH_SCALE: case GL_DEPTH_TEST: case GL_DEPTH_WRITEMASK: case GL_DITHER: case GL_DOUBLEBUFFER: case GL_DRAW_BUFFER: case GL_EDGE_FLAG: case GL_FOG_DENSITY: case GL_FOG_END: case GL_FOG_HINT: case GL_FOG_INDEX: case GL_FOG_MODE: case GL_FOG_START: case GL_FRONT_FACE: case GL_GREEN_BIAS: case GL_GREEN_BITS: case GL_GREEN_SCALE: case GL_INDEX_BITS: case GL_INDEX_CLEAR_VALUE: case GL_INDEX_MODE: case GL_INDEX_OFFSET: case GL_INDEX_SHIFT: case GL_INDEX_WRITEMASK: case GL_LIGHTING: case GL_LIGHT_MODEL_LOCAL_VIEWER: case GL_LIGHT_MODEL_TWO_SIDE: case GL_LINE_SMOOTH: case GL_LINE_SMOOTH_HINT: case GL_LINE_STIPPLE: case GL_LINE_STIPPLE_PATTERN: case GL_LINE_STIPPLE_REPEAT: case GL_LINE_WIDTH: case GL_LINE_WIDTH_GRANULARITY: case GL_LIST_BASE: case GL_LIST_INDEX: case GL_LIST_MODE: case GL_LOGIC_OP_MODE: case GL_MAP1_COLOR_4: case GL_MAP1_GRID_SEGMENTS: 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_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_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_NORMALIZE: case GL_PACK_ALIGNMENT: case GL_PACK_LSB_FIRST: case GL_PACK_ROW_LENGTH: case GL_PACK_SKIP_PIXELS: case GL_PACK_SKIP_ROWS: case GL_PACK_SWAP_BYTES: 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_SIZE: case GL_POINT_SIZE_GRANULARITY: case GL_POINT_SIZE_RANGE: case GL_POINT_SMOOTH: case GL_POINT_SMOOTH_HINT: case GL_POLYGON_SMOOTH: case GL_POLYGON_SMOOTH_HINT: case GL_POLYGON_STIPPLE: case GL_PROJECTION_STACK_DEPTH: case GL_READ_BUFFER: case GL_RED_BIAS: case GL_RED_BITS: case GL_RED_SCALE: case GL_RENDER_MODE: case GL_RGBA_MODE: case GL_SCISSOR_TEST: 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_TEST: case GL_STENCIL_VALUE_MASK: case GL_STENCIL_WRITEMASK: case GL_STEREO: case GL_SUBPIXEL_BITS: case GL_TEXTURE_1D: case GL_TEXTURE_BINDING_1D: case GL_TEXTURE_2D: case GL_TEXTURE_BINDING_2D: case GL_TEXTURE_GEN_Q: case GL_TEXTURE_GEN_R: case GL_TEXTURE_GEN_S: case GL_TEXTURE_GEN_T: case GL_TEXTURE_STACK_DEPTH: case GL_UNPACK_ALIGNMENT: case GL_UNPACK_LSB_FIRST: case GL_UNPACK_ROW_LENGTH: case GL_UNPACK_SKIP_PIXELS: case GL_UNPACK_SKIP_ROWS: case GL_UNPACK_SWAP_BYTES: case GL_ZOOM_X: case GL_ZOOM_Y: return 1; case GL_DEPTH_RANGE: case GL_LINE_WIDTH_RANGE: case GL_MAP1_GRID_DOMAIN: case GL_MAP2_GRID_SEGMENTS: case GL_MAX_VIEWPORT_DIMS: case GL_POLYGON_MODE: return 2; case GL_CURRENT_NORMAL: return 3; case GL_ACCUM_CLEAR_VALUE: case GL_BLEND_COLOR_EXT: case GL_COLOR_CLEAR_VALUE: case GL_COLOR_WRITEMASK: 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: case GL_SCISSOR_BOX: case GL_VIEWPORT: return 4; case GL_MODELVIEW_MATRIX: case GL_PROJECTION_MATRIX: case GL_TEXTURE_MATRIX: return 16; default: { /* GL_LIGHTi = 1 */ static GLint max_lights = 0; if (!max_lights) glGetIntegerv(GL_MAX_LIGHTS, &max_lights); if ((param > GL_LIGHT0) && (param <= (GLenum)(GL_LIGHT0 + max_lights))) return 1; } { /* GL_CLIP_PLANEi = 1 */ static GLint max_clip_planes = 0; if (!max_clip_planes) glGetIntegerv(GL_MAX_CLIP_PLANES, &max_clip_planes); if ((param > GL_CLIP_PLANE0) && (param <= (GLenum)(GL_CLIP_PLANE0 + max_clip_planes))) return 1; } croak("Unknown param"); } return 0; // Just to make the compiler happy } int gl_pixelmap_size(GLenum map) { GLint s; switch (map) { case GL_PIXEL_MAP_I_TO_I: glGetIntegerv(GL_PIXEL_MAP_I_TO_I_SIZE, &s); return s; case GL_PIXEL_MAP_S_TO_S: glGetIntegerv(GL_PIXEL_MAP_S_TO_S_SIZE, &s); return s; case GL_PIXEL_MAP_I_TO_R: glGetIntegerv(GL_PIXEL_MAP_I_TO_R_SIZE, &s); return s; case GL_PIXEL_MAP_I_TO_G: glGetIntegerv(GL_PIXEL_MAP_I_TO_G_SIZE, &s); return s; case GL_PIXEL_MAP_I_TO_B: glGetIntegerv(GL_PIXEL_MAP_I_TO_B_SIZE, &s); return s; case GL_PIXEL_MAP_I_TO_A: glGetIntegerv(GL_PIXEL_MAP_I_TO_A_SIZE, &s); return s; case GL_PIXEL_MAP_R_TO_R: glGetIntegerv(GL_PIXEL_MAP_R_TO_R_SIZE, &s); return s; case GL_PIXEL_MAP_G_TO_G: glGetIntegerv(GL_PIXEL_MAP_G_TO_G_SIZE, &s); return s; case GL_PIXEL_MAP_B_TO_B: glGetIntegerv(GL_PIXEL_MAP_B_TO_B_SIZE, &s); return s; case GL_PIXEL_MAP_A_TO_A: glGetIntegerv(GL_PIXEL_MAP_A_TO_A_SIZE, &s); return s; default: croak("unknown pixelmap"); } return 0; // Just to make the compiler happy } int gl_state_count(GLenum state) { switch (state) { case GL_CURRENT_COLOR: return 4; case GL_CURRENT_INDEX: return 1; } return 0; } unsigned long gl_pixelbuffer_size( GLenum format, GLsizei width, GLsizei height, GLenum type, int mode); GLvoid * EL(SV * sv, int needlen) { STRLEN skip = 0; SV * svref; if (SvREADONLY(sv)) croak("Readonly value for buffer"); if(SvROK(sv)) { svref = SvRV(sv); sv = svref; } else { #ifdef USE_STRICT_UNGLOB if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV) sv_unglob(sv); #endif SvUPGRADE(sv, SVt_PV); SvGROW(sv, (unsigned int)(needlen + 1)); SvPOK_on(sv); SvCUR_set(sv, needlen); *SvEND(sv) = '\0'; /* Why is this here? -chm */ } return SvPV_force(sv, skip); } GLvoid * ELI(SV * sv, GLsizei width, GLsizei height, GLenum format, GLenum type, int mode) { int needlen = 0; if (!SvROK(sv)) /* don't calc length if arg is a perl ref */ needlen = gl_pixelbuffer_size(format, width, height, type, mode); return EL(sv, needlen); } int gl_type_size(GLenum type) { switch (type) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: return sizeof(GLubyte); case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: return sizeof(GLushort); case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: return sizeof(GLuint); #endif case GL_UNSIGNED_BYTE: return sizeof(GLubyte); break; case GL_BITMAP: return sizeof(GLubyte); break; case GL_BYTE: return sizeof(GLbyte); break; case GL_UNSIGNED_SHORT: return sizeof(GLushort); break; case GL_SHORT: return sizeof(GLshort); break; case GL_UNSIGNED_INT: return sizeof(GLuint); break; case GL_INT: return sizeof(GLint); break; case GL_FLOAT: return sizeof(GLfloat); break; case GL_DOUBLE: return sizeof(GLdouble); break; case GL_2_BYTES: return 2; case GL_3_BYTES: return 3; case GL_4_BYTES: return 4; default: croak("unknown type"); } return 0; // Just to make the compiler happy } int gl_component_count(GLenum format, GLenum type) { int n; switch (format) { #ifdef GL_VERSION_1_2 case GL_BGR: n = 3; break; case GL_BGRA: n = 4; break; #endif /* 18 */ #ifdef GL_EXT_cmyka case GL_CMYK: n = 4; break; case GL_CMYKA: n = 5; break; #endif #ifdef GL_EXT_agbr case GL_AGBR: n = 4; break; #endif case GL_COLOR_INDEX: case GL_STENCIL_INDEX: case GL_DEPTH_COMPONENT: case GL_RED: case GL_GREEN: case GL_BLUE: case GL_ALPHA: case GL_LUMINANCE: n = 1; break; case GL_LUMINANCE_ALPHA: n = 2; break; case GL_RGB: n = 3; break; case GL_RGBA: n = 4; break; default: croak("unknown format"); } #ifdef GL_VERSION_1_2 switch (type) { case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: n = 1; } #endif return n; } /* From Mesa */ /* Compute ceiling of integer quotient of A divided by B: */ #define CEILING( A, B ) ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 ) unsigned long gl_pixelbuffer_size( GLenum format, GLsizei width, GLsizei height, GLenum type, int mode) { GLint n; /* elements in a group */ GLint l; /* number of groups in a row */ GLint r; /* pack/unpack row length (overrides l if nonzero) */ GLint s; /* size (in bytes) of an element */ GLint a; /* alignment */ unsigned long k; /* size in bytes of row */ r = 0; a = 4; if (mode == gl_pixelbuffer_pack) { glGetIntegerv(GL_PACK_ROW_LENGTH, &r); glGetIntegerv(GL_PACK_ALIGNMENT, &a); } else if (mode == gl_pixelbuffer_unpack) { glGetIntegerv(GL_UNPACK_ROW_LENGTH, &r); glGetIntegerv(GL_UNPACK_ALIGNMENT, &a); } l = r > 0 ? r : width; s = gl_type_size(type); n = gl_component_count(format, type); /* From Mesa, more or less */ if (type == GL_BITMAP) { k = a * CEILING( n * l, 8 * a); } else { k = l * s * n; if ( s < a ) { k = (a / s * CEILING(k, a)) * s; } } return k * height; } /* Compute ceiling of integer quotient of A divided by B: */ #define CEILING( A, B ) ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 ) void gl_pixelbuffer_size2( GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode, GLsizei * length, GLsizei * items) { GLint n; /* elements in a group */ GLint l; /* number of groups in a row */ GLint s; /* size (in bytes) of an element */ GLint a; /* alignment */ unsigned long k; /* size in bytes of row */ a = 4; l = width; if (mode == gl_pixelbuffer_pack) { glGetIntegerv(GL_PACK_ROW_LENGTH, &l); glGetIntegerv(GL_PACK_ALIGNMENT, &a); } else if (mode == gl_pixelbuffer_unpack) { glGetIntegerv(GL_UNPACK_ROW_LENGTH, &l); glGetIntegerv(GL_UNPACK_ALIGNMENT, &a); } s = gl_type_size(type); n = gl_component_count(format, type); /* From Mesa, more or less */ if (type == GL_BITMAP) { k = a * CEILING( n * l, 8 * a); } else { k = l * s * n; if ( s < a ) { k = (a / s * CEILING(k, a)) * s; } } *items = l * n * height * depth; *length = (k * height * depth); } void pgl_set_type(SV * sv, GLenum type, void ** ptr) { #define RIV(t) \ (*(t*)*ptr) = (t)SvIV(sv); \ *(unsigned char**)ptr += sizeof(t);\ break; #define RNV(t) \ (*(t*)*ptr) = (t)SvNV(sv); \ *(unsigned char**)ptr += sizeof(t);\ break; switch (type) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: RIV(GLubyte) case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: RIV(GLushort) case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: RIV(GLuint) #endif case GL_UNSIGNED_BYTE: case GL_BITMAP: case GL_BYTE: RIV(GLubyte) case GL_UNSIGNED_SHORT: case GL_SHORT: RIV(GLushort) case GL_UNSIGNED_INT: case GL_INT: RIV(GLuint) case GL_FLOAT: RNV(GLfloat) case GL_DOUBLE: RNV(GLdouble) case GL_2_BYTES: { unsigned long v = SvIV(sv); (*(GLubyte*)*ptr) = (GLubyte)(v >> 8); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)(v & 0xff); *(unsigned char**)ptr++; break; } case GL_3_BYTES: { unsigned long v = SvIV(sv); (*(GLubyte*)*ptr) = (GLubyte)((v >> 16) & 0xff); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)((v >> 8) & 0xff); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)((v >> 0) & 0xff); *(unsigned char**)ptr++; break; } case GL_4_BYTES: { unsigned long v = SvIV(sv); (*(GLubyte*)*ptr) = (GLubyte)((v >> 24) & 0xff); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)((v >> 16) & 0xff); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)((v >> 8) & 0xff); *(unsigned char**)ptr++; (*(GLubyte*)*ptr) = (GLubyte)((v >> 0) & 0xff); *ptr++; break; } default: croak("Unable to set data with unknown type"); } #undef RIV #undef RNV } SV * pgl_get_type(GLenum type, void ** ptr) { SV * result = 0; #define RIV(t) \ result = newSViv((*(t*)*ptr)); \ *(unsigned char**)ptr += sizeof(t); \ break; #define RNV(t) \ result = newSVnv((*(t*)*ptr)); \ *(unsigned char**)ptr += sizeof(t); \ break; switch (type) { #ifdef GL_VERSION_1_2 case GL_UNSIGNED_BYTE_3_3_2: case GL_UNSIGNED_BYTE_2_3_3_REV: RIV(GLubyte) case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_5_6_5_REV: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_4_4_4_4_REV: case GL_UNSIGNED_SHORT_5_5_5_1: case GL_UNSIGNED_SHORT_1_5_5_5_REV: RIV(GLushort) case GL_UNSIGNED_INT_8_8_8_8: case GL_UNSIGNED_INT_8_8_8_8_REV: case GL_UNSIGNED_INT_10_10_10_2: case GL_UNSIGNED_INT_2_10_10_10_REV: RIV(GLuint) #endif case GL_UNSIGNED_BYTE: case GL_BITMAP: case GL_BYTE: RIV(GLubyte) case GL_UNSIGNED_SHORT: case GL_SHORT: RIV(GLushort) case GL_UNSIGNED_INT: case GL_INT: RIV(GLuint) case GL_FLOAT: RNV(GLfloat) case GL_DOUBLE: RNV(GLdouble) case GL_2_BYTES: { unsigned long v; v = (*(GLubyte*)*ptr) << 8; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 0; *(unsigned char**)ptr++; result = newSViv(v); break; } case GL_3_BYTES: { unsigned long v; v = (*(GLubyte*)*ptr) << 16; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 8; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 0; *(unsigned char**)ptr++; result = newSViv(v); break; } case GL_4_BYTES: { unsigned long v; v = (*(GLubyte*)*ptr) << 24; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 16; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 8; *(unsigned char**)ptr++; v |= (*(GLubyte*)*ptr) << 0; *(unsigned char**)ptr++; result = newSViv(v); break; } default: croak("Unable to get data with unknown type"); } return result; #undef RIV #undef RNV } GLvoid * pack_image_ST(SV ** stack, int count, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode) { int i; void * ptr, * optr; GLsizei size, max; gl_pixelbuffer_size2(width, height, depth, format, type, mode, &size, &max); optr = ptr = malloc(size); for (i=0;i= 0) { SV ** sv; sv = av_fetch(ast[level], apos[level]++, 0); if (!sv) { level--; continue; } if (SvROK(*sv)) { if (SvTYPE(SvRV(*sv)) != SVt_PVAV) { croak("Weird nest 2"); } level++; if (level >= 8) goto too_many_levels; ast[level] = (AV*)SvRV(*sv); apos[level] = 0; } else { if (!max--) goto too_much_data; pgl_set_type(*sv, type, &ptr); } } } else { if (!max--) goto too_much_data; pgl_set_type(stack[i], type, &ptr); } } if (max>0) goto too_little_data; return optr; too_little_data: croak("too little data"); too_much_data: croak("too much data"); too_many_levels: croak("too many levels"); return 0; // Just to make the compiler happy } GLvoid * allocate_image_ST(GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode) { //int i; void * ptr; GLsizei size, max; gl_pixelbuffer_size2(width, height, depth, format, type, mode, &size, &max); ptr = malloc(size); return ptr; } SV ** unpack_image_ST(SV ** SP, void * data, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int mode) { #define sp SP int i; GLsizei size, max; gl_pixelbuffer_size2(width, height, depth, format, type, mode, &size, &max); EXTEND(sp, max); for (i=0;i #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ #ifdef IN_POGL_GLX_XS #ifdef HAVE_GLX # define HAVE_GLpc /* Perl interface */ # define nativeWindowId(d, w) (w) static Bool WaitForNotify(Display *d, XEvent *e, char *arg) { return (e->type == MapNotify) && (e->xmap.window == (Window)arg); } # define glpResizeWindow(s1,s2,w,d) XResizeWindow(d,w,s1,s2) # define glpMoveWindow(s1,s2,w,d) XMoveWindow(d,w,s1,s2) # define glpMoveResizeWindow(s1,s2,s3,s4,w,d) XMoveResizeWindow(d,w,s1,s2,s3,s4) #endif /* defined HAVE_GLX */ static int debug = 0; #ifdef HAVE_GLpc # define NUM_ARG 7 /* Number of mandatory args to glpcOpenWindow */ Display *dpy; int dpy_open; XVisualInfo *vi; Colormap cmap; XSetWindowAttributes swa; Window win; GLXContext ctx; static int default_attributes[] = { GLX_DOUBLEBUFFER, GLX_RGBA, None }; #endif /* defined HAVE_GLpc */ static int DBUFFER_HACK = 0; #define __had_dbuffer_hack() (DBUFFER_HACK) #endif /* End IN_POGL_GLX_XS */ /********************/ /* GPGPU Utils */ /********************/ GLint FBO_MAX = -1; /* Get max GPGPU data size */ int gpgpu_size(void) { #if defined(GL_ARB_texture_rectangle) && defined(GL_ARB_texture_float) && \ defined(GL_ARB_fragment_program) && defined(GL_EXT_framebuffer_object) if (FBO_MAX == -1) { if (testProc(glProgramStringARB,"glProgramStringARB") && testProc(glGenProgramsARB,"glGenProgramsARB") && testProc(glBindProgramARB,"glBindProgramARB") && testProc(glIsProgramARB,"glIsProgramARB") && testProc(glProgramLocalParameter4fvARB,"glProgramLocalParameter4fvARB") && testProc(glDeleteProgramsARB,"glDeleteProgramsARB") && testProc(glGenFramebuffersEXT,"glGenFramebuffersEXT") && testProc(glGenRenderbuffersEXT,"glGenRenderbuffersEXT") && testProc(glBindFramebufferEXT,"glBindFramebufferEXT") && testProc(glFramebufferTexture2DEXT,"glFramebufferTexture2DEXT") && testProc(glBindRenderbufferEXT,"glBindRenderbufferEXT") && testProc(glRenderbufferStorageEXT,"glRenderbufferStorageEXT") && testProc(glFramebufferRenderbufferEXT,"glFramebufferRenderbufferEXT") && testProc(glCheckFramebufferStatusEXT,"glCheckFramebufferStatusEXT") && testProc(glDeleteRenderbuffersEXT,"glDeleteRenderbuffersEXT") && testProc(glDeleteFramebuffersEXT,"glDeleteFramebuffersEXT")) { glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT,&FBO_MAX); } else { FBO_MAX = 0; } } return(FBO_MAX); #else return(0); #endif } /* Get max square array width for a given GPGPU data size */ int gpgpu_width(int len) { int max = gpgpu_size(); if (max && len && !(len%3)) { int count = len / 3; int w = (int)sqrt(count); while ((w <= count) && (w <= max)) { if (!(count%w)) return(w); w++; } } return(0); } #ifdef GL_ARB_fragment_program static char affine_prog[] = "!!ARBfp1.0\n" "PARAM affine[4] = {program.local[0..3]};\n" "TEMP decal;\n" "TEX decal, fragment.texcoord[0], texture[0], RECT;\n" "MOV decal.w, 1.0;\n" "DP4 result.color.x, decal, affine[0];\n" "DP4 result.color.y, decal, affine[1];\n" "DP4 result.color.z, decal, affine[2];\n" "END\n"; /* Enable affine shader program */ void enable_affine(oga_struct * oga) { if (!oga) return; if (!oga->affine_handle) { /* Load shader program */ glGenProgramsARB(1,&oga->affine_handle); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB,oga->affine_handle); glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(affine_prog),affine_prog); /* Validate shader program */ if (!glIsProgramARB(oga->affine_handle)) { GLint errorPos; glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB,&errorPos); if (errorPos < 0) errorPos = strlen(affine_prog); croak("Affine fragment program error\n%s",&affine_prog[errorPos]); } } glEnable(GL_FRAGMENT_PROGRAM_ARB); } /* Disable affine shader program */ void disable_affine(oga_struct * oga) { if (!oga) return; if (oga->affine_handle) glDisable(GL_FRAGMENT_PROGRAM_ARB); } #endif #ifdef GL_EXT_framebuffer_object /* Unbind an FBO to an OGA */ void release_fbo(oga_struct * oga) { if (oga->fbo_handle) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glDeleteFramebuffersEXT(1,&oga->fbo_handle); } if (oga->tex_handle) { glBindTexture(oga->target,0); if (oga->tex_handle[0]) glDeleteTextures(1,&oga->tex_handle[0]); if (oga->tex_handle[1]) glDeleteTextures(1,&oga->tex_handle[1]); } } /* Enable an FBO bound to an OGA */ void enable_fbo(oga_struct * oga, int w, int h, GLuint target, GLuint pixel_type, GLuint pixel_format, GLuint element_size) { if (!oga) return; if ((oga->fbo_w != w) || (oga->fbo_h != h) || (oga->target != target) || (oga->pixel_type != pixel_type) || (oga->pixel_format != pixel_format) || (oga->element_size != element_size)) release_fbo(oga); if (!oga->fbo_handle) { GLenum status; /* Save params */ oga->fbo_w = w; oga->fbo_h = h; oga->target = target; oga->pixel_type = pixel_type; oga->pixel_format = pixel_format; oga->element_size = element_size; /* Set up FBO */ glGenTextures(2,oga->tex_handle); glGenFramebuffersEXT(1,&oga->fbo_handle); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,oga->fbo_handle); glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0,w,0,h); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glBindTexture(target,oga->tex_handle[1]); glTexParameteri(target,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(target,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(target,GL_TEXTURE_WRAP_S,GL_CLAMP); glTexParameteri(target,GL_TEXTURE_WRAP_T,GL_CLAMP); glTexImage2D(target,0,pixel_type,w,h,0, pixel_format,element_size,0); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,target,oga->tex_handle[1],0); status = glCheckFramebufferStatusEXT(GL_RENDERBUFFER_EXT); if (status) croak("enable_fbo status: %04X\n",status); } else { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,oga->fbo_handle); } /* Load data */ glBindTexture(target,oga->tex_handle[0]); glTexImage2D(target,0,pixel_type,w,h,0, pixel_format,element_size,oga->data); glEnable(target); //glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); glBindTexture(target,oga->tex_handle[0]); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); } /* Disable an FBO bound to an OGA */ void disable_fbo(oga_struct * oga) { if (!oga) return; if (oga->fbo_handle) { glDisable(oga->target); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0); } } #endif MODULE = OpenGL::GL::Top PACKAGE = OpenGL #// Test for GL int _have_gl() CODE: #ifdef HAVE_GL RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_GL */ OUTPUT: RETVAL #// Test for GLU int _have_glu() CODE: #ifdef HAVE_GLU RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_GLU */ OUTPUT: RETVAL #// Test for GLUT int _have_glut() CODE: #if defined(HAVE_GLUT) || defined(HAVE_FREEGLUT) RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_GLUT or HAVE_FREEGLUT */ OUTPUT: RETVAL #// Test for FreeGLUT int _have_freeglut() CODE: #if defined(HAVE_FREEGLUT) RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_FREEGLUT */ OUTPUT: RETVAL #// Test for GLX int _have_glx() CODE: #ifdef HAVE_GLX RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_GLX */ OUTPUT: RETVAL #// Test for GLpc int _have_glp() CODE: #ifdef HAVE_GLpc RETVAL = 1; #else RETVAL = 0; #endif /* defined HAVE_GLpc */ OUTPUT: RETVAL # /* 13000 lines snipped */ ##################### GLU ######################### ############################## GLUT ######################### # /* This is assigned to GLX for now. The glp*() functions should be split out */ #ifdef IN_POGL_GLX_XS # /* The following material is directly copied from Stan Melax's original OpenGL-0.4 */ int __had_dbuffer_hack() #ifdef HAVE_GLpc /* GLX */ #// $ID = glpcOpenWindow($x,$y,$w,$h,$pw,$steal,$event_mask,@attribs); HV * glpcOpenWindow(x,y,w,h,pw,event_mask,steal, ...) int x int y int w int h int pw long event_mask int steal CODE: { XEvent event; Window pwin = (Window)pw; unsigned int err; int *attributes = default_attributes + 1; int *a_buf = NULL; RETVAL = newHV(); /* Create hash to return GL Object info */ if(items > NUM_ARG){ int i; a_buf = (int *) malloc((items-NUM_ARG+2) * sizeof(int)); a_buf[0] = GLX_DOUBLEBUFFER; /* Preallocate */ attributes = a_buf + 1; for (i=NUM_ARG; iscreen), vi->visual, AllocNone); /* create a window */ swa.colormap = cmap; swa.border_pixel = 0; swa.event_mask = event_mask; #endif /* defined HAVE_GLX */ if (!pwin) { pwin = RootWindow(dpy, vi->screen); if (debug) printf("Using root as parent window 0x%x\n", pwin); } if (steal) { win = nativeWindowId(dpy, pwin); /* What about depth/visual */ } else { win = XCreateWindow(dpy, pwin, x, y, w, h, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); /* NOTE: PDL code had CWBackPixel above */ } if (!win) { croak("No Window"); } else { if (debug) printf("win = 0x%x\n", win); } XMapWindow(dpy, win); #ifndef HAVE_GLX /* For OS/2 GLX emulation stuff -chm 2009.09.14 */ /* On OS/2: cannot create a context before mapping something... */ /* create a GLX context */ ctx = glXCreateContext(dpy, vi, 0, GL_TRUE); if (!ctx) croak("No context!\n"); LastEventMask = event_mask; #else /* HAVE_GLX, this is the default branch */ if ( (event_mask & StructureNotifyMask) && !steal ) { XIfEvent(dpy, &event, WaitForNotify, (char*)win); } #endif /* not defined HAVE_GLX */ /* connect the context to the window */ if (!glXMakeCurrent(dpy, win, ctx)) croak("Non current"); if (debug) printf("Display=0x%x Window=0x%x Context=0x%x\n",dpy, win, ctx); /* Create the GL object hash information */ hv_store(RETVAL, "Display", strlen("Display"), newSViv(PTR2IV(dpy)), 0); hv_store(RETVAL, "Window", strlen("Window"), newSViv( (IV) win ), 0); hv_store(RETVAL, "Context", strlen("Context"), newSViv(PTR2IV(ctx)), 0); hv_store(RETVAL, "GL_Version",strlen("GL_Version"), newSVpv((char *) glGetString(GL_VERSION),0),0); hv_store(RETVAL, "GL_Vendor",strlen("GL_Vendor"), newSVpv((char *) glGetString(GL_VENDOR),0),0); hv_store(RETVAL, "GL_Renderer",strlen("GL_Renderer"), newSVpv((char *) glGetString(GL_RENDERER),0),0); /* clear the buffer */ glClearColor(0,0,0,1); while ( (err = glGetError()) != GL_NO_ERROR ) { printf("ERROR issued in GL %s\n", gluErrorString(err)); } } OUTPUT: RETVAL #// glpRasterFont(name,base,number,d) int glpRasterFont(name,base,number,d) char *name int base int number Display *d CODE: { XFontStruct *fi; int lb; fi = XLoadQueryFont(d,name); if(fi == NULL) { die("No font %s found",name); } lb = glGenLists(number); if(lb == 0) { die("No display lists left for font %s (need %d)",name,number); } glXUseXFont(fi->fid, base, number, lb); RETVAL=lb; } OUTPUT: RETVAL #// glpPrintString(base,str); void glpPrintString(base,str) int base char *str CODE: { glPushAttrib(GL_LIST_BIT); glListBase(base); glCallLists(strlen(str),GL_UNSIGNED_BYTE,(GLubyte*)str); glPopAttrib(); } #// glpDisplay(); Display * glpDisplay(name) char *name CODE: /* get a connection */ if (!dpy_open) { dpy = XOpenDisplay(name); dpy_open = 1; } if (!dpy) croak("No display!"); RETVAL = dpy; OUTPUT: RETVAL #// glpMoveResizeWindow($x, $y, $width, $height[, $winID[, $display]]); void glpMoveResizeWindow(x, y, width, height, w=win, d=dpy) void* d GLXDrawable w int x int y unsigned int width unsigned int height #// glpMoveWindow($x, $y[, $winID[, $display]]); void glpMoveWindow(x, y, w=win, d=dpy) void* d GLXDrawable w int x int y #// glpResizeWindow($width, $height[, $winID[, $display]]) void glpResizeWindow(width, height, w=win, d=dpy) void* d GLXDrawable w unsigned int width unsigned int height # If glpOpenWindow was used then glXSwapBuffers should be called # without parameters (i.e. use the default parameters) #// glXSwapBuffers([$winID[, $display]]) void glXSwapBuffers(w=win,d=dpy) void * d GLXDrawable w CODE: { glXSwapBuffers(d,w); } #// XPending([$display]); int XPending(d=dpy) void * d CODE: { RETVAL = XPending(d); } OUTPUT: RETVAL #// glpXNextEvent([$display]); void glpXNextEvent(d=dpy) void * d PPCODE: { XEvent event; char buf[10]; KeySym ks; XNextEvent(d,&event); switch(event.type) { case ConfigureNotify: EXTEND(sp,3); PUSHs(sv_2mortal(newSViv(event.type))); PUSHs(sv_2mortal(newSViv(event.xconfigure.width))); PUSHs(sv_2mortal(newSViv(event.xconfigure.height))); break; case KeyPress: case KeyRelease: EXTEND(sp,2); PUSHs(sv_2mortal(newSViv(event.type))); XLookupString(&event.xkey,buf,sizeof(buf),&ks,0); buf[0]=(char)ks;buf[1]='\0'; PUSHs(sv_2mortal(newSVpv(buf,1))); break; case ButtonPress: case ButtonRelease: EXTEND(sp,7); PUSHs(sv_2mortal(newSViv(event.type))); PUSHs(sv_2mortal(newSViv(event.xbutton.button))); PUSHs(sv_2mortal(newSViv(event.xbutton.x))); PUSHs(sv_2mortal(newSViv(event.xbutton.y))); PUSHs(sv_2mortal(newSViv(event.xbutton.x_root))); PUSHs(sv_2mortal(newSViv(event.xbutton.y_root))); PUSHs(sv_2mortal(newSViv(event.xbutton.state))); break; case MotionNotify: EXTEND(sp,4); PUSHs(sv_2mortal(newSViv(event.type))); PUSHs(sv_2mortal(newSViv(event.xmotion.state))); PUSHs(sv_2mortal(newSViv(event.xmotion.x))); PUSHs(sv_2mortal(newSViv(event.xmotion.y))); break; case Expose: default: EXTEND(sp,1); PUSHs(sv_2mortal(newSViv(event.type))); break; } } #// glpXQueryPointer([$winID[, $display]]); void glpXQueryPointer(w=win,d=dpy) void * d GLXDrawable w PPCODE: { int x,y,rx,ry; Window r,c; unsigned int m; XQueryPointer(d,w,&r,&c,&rx,&ry,&x,&y,&m); EXTEND(sp,3); PUSHs(sv_2mortal(newSViv(x))); PUSHs(sv_2mortal(newSViv(y))); PUSHs(sv_2mortal(newSViv(m))); } #endif /* defined HAVE_GLpc */ #// glpSetDebug(flag); void glpSetDebug(flag) int flag CODE: { debug = flag; } #//# glpReadTex($file); void glpReadTex(file) char * file CODE: { GLsizei w,h; int d,i; char buf[250]; unsigned char *image; FILE *fp; char *ret; fp=fopen(file,"r"); if(!fp) croak("couldn't open file %s",file); ret = fgets(buf,250,fp); /* P3 */ if (buf[0] != 'P' || buf[1] != '3') croak("Format is not P3 in file %s",file); ret = fgets(buf,250,fp); while (buf[0] == '#' && fgets(buf,250,fp)); /* Empty */ if (2 != sscanf(buf,"%d%d",&w,&h)) croak("couldn't read image size from file %s",file); if (1 != fscanf(fp,"%d",&d)) croak("couldn't read image depth from file %s",file); if(d != 255) croak("image depth != 255 in file %s unsupported",file); if(w>10000 || h>10000) croak("suspicious size w=%d d=%d in file %s", w, d, file); New(1431, image, w*h*3, unsigned char); for(i=0;i #if defined(HAVE_FREEGLUT) #ifdef WIN32 #include "../include/GL/freeglut.h" #else #include #endif #else #ifdef __APPLE__ /* NB: not ideal -- this assumes that we always build with AGL interface on Mac OS X * Ideally, the flag HAVE_AGL_GLUT should be set appropriately by Makefile.PL when building glversion * and used to check here, but this will require substantial changes to the get_extensions() there */ #include #else #include #endif #endif #define PROGRAM "glversion" int main(int argc, char **argv) { char *version = NULL; char *vendor = NULL; char *renderer = NULL; char *extensions = NULL; GLuint idWindow = 0; int glutVersion; glutInit(&argc, argv); glutInitWindowSize(1,1); glutInitDisplayMode(GLUT_RGBA); idWindow = glutCreateWindow(PROGRAM); glutHideWindow(); glutVersion = glutGet(0x01FC); version = (char*)glGetString(GL_VERSION); vendor = (char*)glGetString(GL_VENDOR); renderer = (char*)glGetString(GL_RENDERER); extensions = (char*)glGetString(GL_EXTENSIONS); printf("GLUT=%d\nVERSION=%s\nVENDOR=%s\nRENDERER=%s\nEXTENSIONS=%s\n", glutVersion,version,vendor,renderer,extensions); glutDestroyWindow(idWindow); return(0); } libopengl-perl-0.6704+dfsg.orig/utils/const.pl0000644000175000017500000000026212334200655020520 0ustar gregoagregoamy $file = '../gl_const.h'; die "Unable to open '$file'" if (!open(FILE,$file)); foreach my $line () { next if $line !~ m|i\(([^\)]+)\)|; print "$1\n"; } close(FILE); libopengl-perl-0.6704+dfsg.orig/utils/exports.pl0000644000175000017500000000050612334200655021077 0ustar gregoagregoamy $file = 'opengl32.txt'; die "Unable to read '$file'" if (!open(FILE,$file)); my $exports = 'exports.txt'; die "Unable to write '$exports'" if (!open(EXPORTS,">$exports")); foreach my $line () { next if ($line !~ m|\s+\d+\s+[0-9A-F]+\s+[0-9A-F]+ (gl[\w]+)|); print EXPORTS "$1\n"; } close(EXPORTS); close(FILE); libopengl-perl-0.6704+dfsg.orig/utils/Makefile.macosx0000644000175000017500000000075112334200655021771 0ustar gregoagregoa#!make CC=cc # Should not be using local includes on non-win32 systems # CCFLAGS=-I/usr/X11/include -I../include CCFLAGS= # no includes needed, Apple GCC will automatically pick up system frameworks LINK=cc LDFLAGS=-framework AGL -framework OpenGL -framework GLUT all: glversion.txt clean: rm -f glversion.txt rm -f glversion rm -f glversion.o glversion.txt: glversion ./$< > $@ glversion: glversion.o ${LINK} ${LDFLAGS} -o $@ $< chmod u+x $@ %.o: %.c ${CC} ${CCFLAGS} -c $< libopengl-perl-0.6704+dfsg.orig/utils/opengl32.txt0000644000175000017500000003522212334200655021233 0ustar gregoagregoaMicrosoft (R) COFF Binary File Dumper Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. Dump of file \windows\system32\opengl32.dll File Type: DLL Section contains the following exports for OPENGL32.dll 0 characteristics 41107A48 time date stamp Tue Aug 03 22:55:20 2004 0.00 version 1 ordinal base 368 number of functions 368 number of names ordinal hint RVA name 1 0 0001A6DA GlmfBeginGlsBlock 2 1 0001A868 GlmfCloseMetaFile 3 2 0001A807 GlmfEndGlsBlock 4 3 0001A830 GlmfEndPlayback 5 4 0001A5DB GlmfInitPlayback 6 5 0001A711 GlmfPlayGlsRecord 7 6 0000458C glAccum 8 7 000047FC glAlphaFunc 9 8 000051F0 glAreTexturesResident 10 9 00002F98 glArrayElement 11 A 000028F0 glBegin 12 B 00002FA4 glBindTexture 13 C 0000325C glBitmap 14 D 00004830 glBlendFunc 15 E 000028D8 glCallList 16 F 000028E4 glCallLists 17 10 00003124 glClear 18 11 00003158 glClearAccum 19 12 000031C0 glClearColor 20 13 00003228 glClearDepth 21 14 0000318C glClearIndex 22 15 000031F4 glClearStencil 23 16 00003AFC glClipPlane 24 17 000028FC glColor3b 25 18 00002908 glColor3bv 26 19 00002914 glColor3d 27 1A 00002920 glColor3dv 28 1B 0000292C glColor3f 29 1C 00002938 glColor3fv 30 1D 00002944 glColor3i 31 1E 00002950 glColor3iv 32 1F 0000295C glColor3s 33 20 00002968 glColor3sv 34 21 00002974 glColor3ub 35 22 00002980 glColor3ubv 36 23 0000298C glColor3ui 37 24 00002998 glColor3uiv 38 25 000029A4 glColor3us 39 26 000029B0 glColor3usv 40 27 000029BC glColor4b 41 28 000029C8 glColor4bv 42 29 000029D4 glColor4d 43 2A 000029E0 glColor4dv 44 2B 000029EC glColor4f 45 2C 000029F8 glColor4fv 46 2D 00002A04 glColor4i 47 2E 00002A10 glColor4iv 48 2F 00002A1C glColor4s 49 30 00002A28 glColor4sv 50 31 00002A34 glColor4ub 51 32 00002A40 glColor4ubv 52 33 00002A4C glColor4ui 53 34 00002A58 glColor4uiv 54 35 00002A64 glColor4us 55 36 00002A70 glColor4usv 56 37 000044F0 glColorMask 57 38 00003B30 glColorMaterial 58 39 00002FB0 glColorPointer 59 3A 000032F4 glCopyPixels 60 3B 00005224 glCopyTexImage1D 61 3C 00005258 glCopyTexImage2D 62 3D 0000528C glCopyTexSubImage1D 63 3E 000052C0 glCopyTexSubImage2D 64 3F 00003B64 glCullFace 65 40 00025008 glDebugEntry 66 41 0000358C glDeleteLists 67 42 000052F4 glDeleteTextures 68 43 00004900 glDepthFunc 69 44 00004524 glDepthMask 70 45 00005120 glDepthRange 71 46 00002E48 glDisable 72 47 00002FBC glDisableClientState 73 48 00002FC8 glDrawArrays 74 49 00004488 glDrawBuffer 75 4A 00002FD4 glDrawElements 76 4B 0000335C glDrawPixels 77 4C 00002A7C glEdgeFlag 78 4D 00002FE0 glEdgeFlagPointer 79 4E 00002A88 glEdgeFlagv 80 4F 00002E54 glEnable 81 50 00002FEC glEnableClientState 82 51 00002A94 glEnd 83 52 0000355C glEndList 84 53 00002E78 glEvalCoord1d 85 54 00002E84 glEvalCoord1dv 86 55 00002E90 glEvalCoord1f 87 56 00002E9C glEvalCoord1fv 88 57 00002EA8 glEvalCoord2d 89 58 00002EB4 glEvalCoord2dv 90 59 00002EC0 glEvalCoord2f 91 5A 00002ECC glEvalCoord2fv 92 5B 00004794 glEvalMesh1 93 5C 000047C8 glEvalMesh2 94 5D 00002ED8 glEvalPoint1 95 5E 00002EE4 glEvalPoint2 96 5F 000042E8 glFeedbackBuffer 97 60 00003FA8 glFinish 98 61 000045C0 glFlush 99 62 00003B98 glFogf 100 63 00003BCC glFogfv 101 64 00003C00 glFogi 102 65 00003C34 glFogiv 103 66 00003C68 glFrontFace 104 67 00005154 glFrustum 105 68 000035BC glGenLists 106 69 00005328 glGenTextures 107 6A 00004B08 glGetBooleanv 108 6B 00004B3C glGetClipPlane 109 6C 00004B70 glGetDoublev 110 6D 00004BA4 glGetError 111 6E 00004BD8 glGetFloatv 112 6F 00004C0C glGetIntegerv 113 70 00004C40 glGetLightfv 114 71 00004C74 glGetLightiv 115 72 00004CA8 glGetMapdv 116 73 00004CDC glGetMapfv 117 74 00004D10 glGetMapiv 118 75 00004D44 glGetMaterialfv 119 76 00004D78 glGetMaterialiv 120 77 00004DAC glGetPixelMapfv 121 78 00004DE0 glGetPixelMapuiv 122 79 00004E14 glGetPixelMapusv 123 7A 00003058 glGetPointerv 124 7B 00004E48 glGetPolygonStipple 125 7C 00004E7C glGetString 126 7D 00004EB0 glGetTexEnvfv 127 7E 00004EE4 glGetTexEnviv 128 7F 00004F18 glGetTexGendv 129 80 00004F4C glGetTexGenfv 130 81 00004F80 glGetTexGeniv 131 82 00004FB4 glGetTexImage 132 83 00005050 glGetTexLevelParameterfv 133 84 00005084 glGetTexLevelParameteriv 134 85 00004FE8 glGetTexParameterfv 135 86 0000501C glGetTexParameteriv 136 87 00003C9C glHint 137 88 00004558 glIndexMask 138 89 00002FF8 glIndexPointer 139 8A 00002AA0 glIndexd 140 8B 00002AAC glIndexdv 141 8C 00002AB8 glIndexf 142 8D 00002AC4 glIndexfv 143 8E 00002AD0 glIndexi 144 8F 00002ADC glIndexiv 145 90 00002AE8 glIndexs 146 91 00002AF4 glIndexsv 147 92 00003004 glIndexub 148 93 00003010 glIndexubv 149 94 00004384 glInitNames 150 95 0000301C glInterleavedArrays 151 96 000050B8 glIsEnabled 152 97 000050EC glIsList 153 98 0000535C glIsTexture 154 99 00003DA0 glLightModelf 155 9A 00003DD4 glLightModelfv 156 9B 00003E08 glLightModeli 157 9C 00003E3C glLightModeliv 158 9D 00003CD0 glLightf 159 9E 00003D04 glLightfv 160 9F 00003D38 glLighti 161 A0 00003D6C glLightiv 162 A1 00003E70 glLineStipple 163 A2 00003EA4 glLineWidth 164 A3 000035EC glListBase 165 A4 00002EF0 glLoadIdentity 166 A5 00002F08 glLoadMatrixd 167 A6 00002EFC glLoadMatrixf 168 A7 000043B8 glLoadName 169 A8 00004864 glLogicOp 170 A9 000045F4 glMap1d 171 AA 00004628 glMap1f 172 AB 0000465C glMap2d 173 AC 00004690 glMap2f 174 AD 000046C4 glMapGrid1d 175 AE 000046F8 glMapGrid1f 176 AF 0000472C glMapGrid2d 177 B0 00004760 glMapGrid2f 178 B1 00002E18 glMaterialf 179 B2 00002E24 glMaterialfv 180 B3 00002E30 glMateriali 181 B4 00002E3C glMaterialiv 182 B5 00002F14 glMatrixMode 183 B6 00002F2C glMultMatrixd 184 B7 00002F20 glMultMatrixf 185 B8 00003530 glNewList 186 B9 00002B00 glNormal3b 187 BA 00002B0C glNormal3bv 188 BB 00002B18 glNormal3d 189 BC 00002B24 glNormal3dv 190 BD 00002B30 glNormal3f 191 BE 00002B3C glNormal3fv 192 BF 00002B48 glNormal3i 193 C0 00002B54 glNormal3iv 194 C1 00002B60 glNormal3s 195 C2 00002B6C glNormal3sv 196 C3 00003028 glNormalPointer 197 C4 00005188 glOrtho 198 C5 000043EC glPassThrough 199 C6 00004A38 glPixelMapfv 200 C7 00004A6C glPixelMapuiv 201 C8 00004AA0 glPixelMapusv 202 C9 000049D0 glPixelStoref 203 CA 00004A04 glPixelStorei 204 CB 00004968 glPixelTransferf 205 CC 0000499C glPixelTransferi 206 CD 00004934 glPixelZoom 207 CE 00003ED8 glPointSize 208 CF 00003F0C glPolygonMode 209 D0 00003034 glPolygonOffset 210 D1 00003F40 glPolygonStipple 211 D2 00002E60 glPopAttrib 212 D3 00003064 glPopClientAttrib 213 D4 00002F38 glPopMatrix 214 D5 00004420 glPopName 215 D6 00005390 glPrioritizeTextures 216 D7 00002E6C glPushAttrib 217 D8 00003070 glPushClientAttrib 218 D9 00002F44 glPushMatrix 219 DA 00004454 glPushName 220 DB 0000361C glRasterPos2d 221 DC 00003650 glRasterPos2dv 222 DD 00003684 glRasterPos2f 223 DE 000036B8 glRasterPos2fv 224 DF 000036EC glRasterPos2i 225 E0 00003720 glRasterPos2iv 226 E1 00003754 glRasterPos2s 227 E2 00003788 glRasterPos2sv 228 E3 000037BC glRasterPos3d 229 E4 000037F0 glRasterPos3dv 230 E5 00003824 glRasterPos3f 231 E6 00003858 glRasterPos3fv 232 E7 0000388C glRasterPos3i 233 E8 000038C0 glRasterPos3iv 234 E9 000038F4 glRasterPos3s 235 EA 00003928 glRasterPos3sv 236 EB 0000395C glRasterPos4d 237 EC 00003990 glRasterPos4dv 238 ED 000039C4 glRasterPos4f 239 EE 000039F8 glRasterPos4fv 240 EF 00003A2C glRasterPos4i 241 F0 00003A60 glRasterPos4iv 242 F1 00003A94 glRasterPos4s 243 F2 00003AC8 glRasterPos4sv 244 F3 00004AD4 glReadBuffer 245 F4 00003328 glReadPixels 246 F5 00003390 glRectd 247 F6 000033C4 glRectdv 248 F7 000033F8 glRectf 249 F8 0000342C glRectfv 250 F9 00003460 glRecti 251 FA 00003494 glRectiv 252 FB 000034C8 glRects 253 FC 000034FC glRectsv 254 FD 00004350 glRenderMode 255 FE 00002F50 glRotated 256 FF 00002F5C glRotatef 257 100 00002F68 glScaled 258 101 00002F74 glScalef 259 102 00003F74 glScissor 260 103 0000431C glSelectBuffer 261 104 00003FDC glShadeModel 262 105 00004898 glStencilFunc 263 106 000044BC glStencilMask 264 107 000048CC glStencilOp 265 108 00002B78 glTexCoord1d 266 109 00002B84 glTexCoord1dv 267 10A 00002B90 glTexCoord1f 268 10B 00002B9C glTexCoord1fv 269 10C 00002BA8 glTexCoord1i 270 10D 00002BB4 glTexCoord1iv 271 10E 00002BC0 glTexCoord1s 272 10F 00002BCC glTexCoord1sv 273 110 00002BD8 glTexCoord2d 274 111 00002BE4 glTexCoord2dv 275 112 00002BF0 glTexCoord2f 276 113 00002BFC glTexCoord2fv 277 114 00002C08 glTexCoord2i 278 115 00002C14 glTexCoord2iv 279 116 00002C20 glTexCoord2s 280 117 00002C2C glTexCoord2sv 281 118 00002C38 glTexCoord3d 282 119 00002C44 glTexCoord3dv 283 11A 00002C50 glTexCoord3f 284 11B 00002C5C glTexCoord3fv 285 11C 00002C68 glTexCoord3i 286 11D 00002C74 glTexCoord3iv 287 11E 00002C80 glTexCoord3s 288 11F 00002C8C glTexCoord3sv 289 120 00002C98 glTexCoord4d 290 121 00002CA4 glTexCoord4dv 291 122 00002CB0 glTexCoord4f 292 123 00002CBC glTexCoord4fv 293 124 00002CC8 glTexCoord4i 294 125 00002CD4 glTexCoord4iv 295 126 00002CE0 glTexCoord4s 296 127 00002CEC glTexCoord4sv 297 128 00003040 glTexCoordPointer 298 129 000040E0 glTexEnvf 299 12A 00004114 glTexEnvfv 300 12B 00004148 glTexEnvi 301 12C 0000417C glTexEnviv 302 12D 000041B0 glTexGend 303 12E 000041E4 glTexGendv 304 12F 00004218 glTexGenf 305 130 0000424C glTexGenfv 306 131 00004280 glTexGeni 307 132 000042B4 glTexGeniv 308 133 0000328C glTexImage1D 309 134 000032C0 glTexImage2D 310 135 00004010 glTexParameterf 311 136 00004044 glTexParameterfv 312 137 00004078 glTexParameteri 313 138 000040AC glTexParameteriv 314 139 000053C4 glTexSubImage1D 315 13A 000053F8 glTexSubImage2D 316 13B 00002F80 glTranslated 317 13C 00002F8C glTranslatef 318 13D 00002CF8 glVertex2d 319 13E 00002D04 glVertex2dv 320 13F 00002D10 glVertex2f 321 140 00002D1C glVertex2fv 322 141 00002D28 glVertex2i 323 142 00002D34 glVertex2iv 324 143 00002D40 glVertex2s 325 144 00002D4C glVertex2sv 326 145 00002D58 glVertex3d 327 146 00002D64 glVertex3dv 328 147 00002D70 glVertex3f 329 148 00002D7C glVertex3fv 330 149 00002D88 glVertex3i 331 14A 00002D94 glVertex3iv 332 14B 00002DA0 glVertex3s 333 14C 00002DAC glVertex3sv 334 14D 00002DB8 glVertex4d 335 14E 00002DC4 glVertex4dv 336 14F 00002DD0 glVertex4f 337 150 00002DDC glVertex4fv 338 151 00002DE8 glVertex4i 339 152 00002DF4 glVertex4iv 340 153 00002E00 glVertex4s 341 154 00002E0C glVertex4sv 342 155 0000304C glVertexPointer 343 156 000051BC glViewport 344 157 00026D6A wglChoosePixelFormat 345 158 0001C25D wglCopyContext 346 159 0001BACE wglCreateContext 347 15A 0001B994 wglCreateLayerContext 348 15B 0001BB1C wglDeleteContext 349 15C 0001917D wglDescribeLayerPlane 350 15D 00026581 wglDescribePixelFormat 351 15E 0001BBAD wglGetCurrentContext 352 15F 0001BBC9 wglGetCurrentDC 353 160 0001C38A wglGetDefaultProcAddress 354 161 00019286 wglGetLayerPaletteEntries 355 162 00025DF1 wglGetPixelFormat 356 163 0001C3A2 wglGetProcAddress 357 164 00019BD5 wglMakeCurrent 358 165 000192EC wglRealizeLayerPalette 359 166 00019211 wglSetLayerPaletteEntries 360 167 00026BC0 wglSetPixelFormat 361 168 0001C051 wglShareLists 362 169 000266A4 wglSwapBuffers 363 16A 00019355 wglSwapLayerBuffers 364 16B 0001A95D wglSwapMultipleBuffers 365 16C 0001C348 wglUseFontBitmapsA 366 16D 0001C369 wglUseFontBitmapsW 367 16E 0000E70C wglUseFontOutlinesA 368 16F 0000E742 wglUseFontOutlinesW Summary 21000 .data 5000 .reloc 1000 .rsrc A4000 .text libopengl-perl-0.6704+dfsg.orig/utils/cleanup.pl0000644000175000017500000000226712334200655021030 0ustar gregoagregoa#!/usr/bin/perl -w our $exts = { h => 1, c => 1, xs => 1, pl => 1, pm => 1, pod => 1, ppd => 1, ppm => 1, mak => 1, nff => 1, yml => 1, arb => 1, cg => 1, glsl => 1, txt => 1 }; my($path) = @ARGV; die qq { USAGE: cleanup.pl FILE_PATH | DIRECTORY } if (!$path); clean_path($path); exit 0; sub clean_path { my($dir) = @_; if (!-d $dir) { clean_file($dir); return; } return if (!opendir(DIR,$dir)); foreach my $file (readdir(DIR)) { next if ($file =~ m|^\.|); my $path = "$dir/$file"; clean_path($path); } closedir(DIR); } sub clean_file { my($path) = @_; if ($path =~ m|~$|) { unlink($path); return; } if ($path =~ m|\.([^/\.]+)$|) { my $ext = lc($1); return if (!$exts->{$ext} && $path !~ m|Makefile$| && $path !~ m|readme\.$ext|i); } if (!open(FILE,$path)) { print "Unable to read '$path'\n"; return; } my @data = ; close(FILE); my $data; foreach my $line (@data) { $line =~ s|[\n\r]+||gs; $data .= "$line\n"; } die "Unable to write to $path\n" if (!open(FILE,">$path")); print FILE $data; close(FILE); print "Cleaned '$path'\n"; } libopengl-perl-0.6704+dfsg.orig/utils/strawberry.bat0000644000175000017500000000115712334200655021735 0ustar gregoagregoa@echo off if not "%1"=="clean" goto BUILD if exist glversion.txt del glversion.txt&echo deleted glversion.txt if exist glversion.exe del glversion.exe&echo deleted glversion.exe if exist glversion.o del glversion.o&echo deleted glversion.o goto END :BUILD echo. echo compiling glversion.c gcc -DHAVE_FREEGLUT -DIS_STRAWBERRY -c glversion.c if errorlevel 1 goto ERROR echo linking glversion.o gcc -o glversion.exe glversion.o -lopengl32 -L%drive%/c/lib -lglut if errorlevel 1 goto ERROR echo generating glversion.txt glversion > glversion.txt if errorlevel 1 goto ERROR goto END :ERROR echo build error! echo. :END libopengl-perl-0.6704+dfsg.orig/utils/wgl_ext.txt0000644000175000017500000000540612334200655021254 0ustar gregoagregoaGL_ARB_color_buffer_float GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_half_float_pixel GL_ARB_imaging GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_shadow GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_float GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two GL_ARB_texture_rectangle GL_ARB_transpose_matrix GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_window_pos GL_ATI_draw_buffers GL_ATI_texture_float GL_ATI_texture_mirror_once GL_S3_s3tc GL_EXT_texture_env_add GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_Cg_shader GL_EXT_depth_bounds_test GL_EXT_draw_range_elements GL_EXT_fog_coord GL_EXT_framebuffer_object GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_clear_tag GL_EXT_stencil_two_side GL_EXT_stencil_wrap GL_EXT_texture3D GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_sRGB GL_EXT_timer_query GL_EXT_vertex_array GL_HP_occlusion_test GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_KTX_buffer_region GL_NV_blend_square GL_NV_copy_depth_to_color GL_NV_depth_clamp GL_NV_fence GL_NV_float_buffer GL_NV_fog_distance GL_NV_fragment_program GL_NV_fragment_program_option GL_NV_fragment_program2 GL_NV_half_float GL_NV_light_max_exponent GL_NV_multisample_filter_hint GL_NV_occlusion_query GL_NV_packed_depth_stencil GL_NV_pixel_data_range GL_NV_point_sprite GL_NV_primitive_restart GL_NV_register_combiners GL_NV_register_combiners2 GL_NV_texgen_reflection GL_NV_texture_compression_vtc GL_NV_texture_env_combine4 GL_NV_texture_expand_normal GL_NV_texture_rectangle GL_NV_texture_shader GL_NV_texture_shader2 GL_NV_texture_shader3 GL_NV_vertex_array_range GL_NV_vertex_array_range2 GL_NV_vertex_program GL_NV_vertex_program1_1 GL_NV_vertex_program2 GL_NV_vertex_program2_option GL_NV_vertex_program3 GL_NVX_conditional_render GL_SGIS_generate_mipmap GL_SGIS_texture_lod GL_SGIX_depth_texture GL_SGIX_shadow GL_SUN_slice_accum GL_WIN_swap_hint WGL_EXT_swap_control libopengl-perl-0.6704+dfsg.orig/utils/Makefile0000644000175000017500000000146612334200655020504 0ustar gregoagregoa#!make # Default values for this Makefile GLUT_DEF=HAVE_FREEGLUT GLUT_LIB=glut # Key OpenGL compile/link locations INC=-I/usr/include -I/usr/X11R6/include -I/usr/local/include -I/usr/openwin/include LIBS=-L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -L/usr/openwin/lib -L/usr/lib/xorg/modules -L/usr/X11R6/lib/modules -L/usr/lib/xorg/modules/extensions -L/usr/X11R6/lib/modules/extensions # Compile command CC=cc CCFLAGS=${INC} -D${GLUT_DEF} # Link command LINK=cc LDFLAGS=${LIBS} -lGL -l${GLUT_LIB} EXTRALIBS=-lGLU -lXi -lXmu -lXext -lX11 -lm all: glversion.txt glversion.txt: glversion ./glversion > glversion.txt glversion: glversion.o ${LINK} glversion.o ${LDFLAGS} ${EXTRALIBS} -o glversion chmod u+x glversion clean: rm -f glversion.txt rm -f glversion rm -f glversion.o .c.o: ${CC} ${CCFLAGS} -c $< libopengl-perl-0.6704+dfsg.orig/utils/mingw.bat0000644000175000017500000000114112334200655020643 0ustar gregoagregoa@echo off if not "%1"=="clean" goto BUILD if exist glversion.txt del glversion.txt&echo deleted glversion.txt if exist glversion.exe del glversion.exe&echo deleted glversion.exe if exist glversion.o del glversion.o&echo deleted glversion.o goto END :BUILD echo. echo compiling glversion.c gcc -DHAVE_FREEGLUT -c glversion.c if errorlevel 1 goto ERROR echo linking glversion.o gcc -o glversion.exe glversion.o -lopengl32 -L../FreeGLUT -lfreeglut if errorlevel 1 goto ERROR echo generating glversion.txt glversion > glversion.txt if errorlevel 1 goto ERROR goto END :ERROR echo build error! echo. :END libopengl-perl-0.6704+dfsg.orig/utils/exports.txt0000644000175000017500000001026512334200655021306 0ustar gregoagregoaglAccum glAlphaFunc glAreTexturesResident glArrayElement glBegin glBindTexture glBitmap glBlendFunc glCallList glCallLists glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane glColor3b glColor3bv glColor3d glColor3dv glColor3f glColor3fv glColor3i glColor3iv glColor3s glColor3sv glColor3ub glColor3ubv glColor3ui glColor3uiv glColor3us glColor3usv glColor4b glColor4bv glColor4d glColor4dv glColor4f glColor4fv glColor4i glColor4iv glColor4s glColor4sv glColor4ub glColor4ubv glColor4ui glColor4uiv glColor4us glColor4usv glColorMask glColorMaterial glColorPointer glCopyPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTexSubImage2D glCullFace glDebugEntry glDeleteLists glDeleteTextures glDepthFunc glDepthMask glDepthRange glDisable glDisableClientState glDrawArrays glDrawBuffer glDrawElements glDrawPixels glEdgeFlag glEdgeFlagPointer glEdgeFlagv glEnable glEnableClientState glEnd glEndList glEvalCoord1d glEvalCoord1dv glEvalCoord1f glEvalCoord1fv glEvalCoord2d glEvalCoord2dv glEvalCoord2f glEvalCoord2fv glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer glFinish glFlush glFogf glFogfv glFogi glFogiv glFrontFace glFrustum glGenLists glGenTextures glGetBooleanv glGetClipPlane glGetDoublev glGetError glGetFloatv glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPointerv glGetPolygonStipple glGetString glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glHint glIndexMask glIndexPointer glIndexd glIndexdv glIndexf glIndexfv glIndexi glIndexiv glIndexs glIndexsv glIndexub glIndexubv glInitNames glInterleavedArrays glIsEnabled glIsList glIsTexture glLightModelf glLightModelfv glLightModeli glLightModeliv glLightf glLightfv glLighti glLightiv glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd glLoadMatrixf glLoadName glLogicOp glMap1d glMap1f glMap2d glMap2f glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv glMateriali glMaterialiv glMatrixMode glMultMatrixd glMultMatrixf glNewList glNormal3b glNormal3bv glNormal3d glNormal3dv glNormal3f glNormal3fv glNormal3i glNormal3iv glNormal3s glNormal3sv glNormalPointer glOrtho glPassThrough glPixelMapfv glPixelMapuiv glPixelMapusv glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffset glPolygonStipple glPopAttrib glPopClientAttrib glPopMatrix glPopName glPrioritizeTextures glPushAttrib glPushClientAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv glRasterPos2f glRasterPos2fv glRasterPos2i glRasterPos2iv glRasterPos2s glRasterPos2sv glRasterPos3d glRasterPos3dv glRasterPos3f glRasterPos3fv glRasterPos3i glRasterPos3iv glRasterPos3s glRasterPos3sv glRasterPos4d glRasterPos4dv glRasterPos4f glRasterPos4fv glRasterPos4i glRasterPos4iv glRasterPos4s glRasterPos4sv glReadBuffer glReadPixels glRectd glRectdv glRectf glRectfv glRecti glRectiv glRects glRectsv glRenderMode glRotated glRotatef glScaled glScalef glScissor glSelectBuffer glShadeModel glStencilFunc glStencilMask glStencilOp glTexCoord1d glTexCoord1dv glTexCoord1f glTexCoord1fv glTexCoord1i glTexCoord1iv glTexCoord1s glTexCoord1sv glTexCoord2d glTexCoord2dv glTexCoord2f glTexCoord2fv glTexCoord2i glTexCoord2iv glTexCoord2s glTexCoord2sv glTexCoord3d glTexCoord3dv glTexCoord3f glTexCoord3fv glTexCoord3i glTexCoord3iv glTexCoord3s glTexCoord3sv glTexCoord4d glTexCoord4dv glTexCoord4f glTexCoord4fv glTexCoord4i glTexCoord4iv glTexCoord4s glTexCoord4sv glTexCoordPointer glTexEnvf glTexEnvfv glTexEnvi glTexEnviv glTexGend glTexGendv glTexGenf glTexGenfv glTexGeni glTexGeniv glTexImage1D glTexImage2D glTexParameterf glTexParameterfv glTexParameteri glTexParameteriv glTexSubImage1D glTexSubImage2D glTranslated glTranslatef glVertex2d glVertex2dv glVertex2f glVertex2fv glVertex2i glVertex2iv glVertex2s glVertex2sv glVertex3d glVertex3dv glVertex3f glVertex3fv glVertex3i glVertex3iv glVertex3s glVertex3sv glVertex4d glVertex4dv glVertex4f glVertex4fv glVertex4i glVertex4iv glVertex4s glVertex4sv glVertexPointer glViewport libopengl-perl-0.6704+dfsg.orig/utils/makefile.mak0000644000175000017500000000120312334200655021300 0ustar gregoagregoa#!nmake CC=cl.exe CCFLAGS=/nologo /D "WIN32" /c LINK=link.exe LDFLAGS=/nologo /subsystem:console /incremental:no /machine:I386 !if "$(GLUT_DEF)" == "HAVE_FREEGLUT" GLUT_LIB="..\FreeGLUT\freeglut" !else GLUT_LIB="glut32" !endif all: glversion.txt clean: if exist glversion.txt del glversion.txt if exist glversion.exe del glversion.exe if exist glversion.obj del glversion.obj glversion.txt: glversion.exe glversion > glversion.txt glversion.exe: glversion.obj $(LINK) $(LDFLAGS) /defaultlib:$(GLUT_LIB).lib /out:"glversion.exe" glversion.obj glversion.obj: glversion.c makefile.mak $(CC) $(CCFLAGS) /D $(GLUT_DEF) glversion.c libopengl-perl-0.6704+dfsg.orig/utils/Makefile.cygwin0000644000175000017500000000105312334200655021773 0ustar gregoagregoa#!make # This Makefile was developed with GNU make on cygwin. CC=gcc LINK=g++ # For FreeGLUT over WGL CCFLAGS=-DWIN32 -DHAVE_FREEGLUT -I/usr/include/opengl LDFLAGS=-L../FreeGLUT -lopengl32 -lglu32 -lfreeglut # For FreeGLUT over GLX (set default for now) #### CCFLAGS=-DHAVE_FREEGLUT #### LDFLAGS=-lGL -lglut all: glversion.txt clean: rm -f glversion.txt rm -f glversion.exe rm -f glversion.o glversion.txt: glversion ./$< > $@ glversion: glversion.o ${LINK} -o $@ $< ${LDFLAGS} chmod u+x $@ %.o: %.c Makefile.cygwin ${CC} ${CCFLAGS} -c $< libopengl-perl-0.6704+dfsg.orig/utils/glext_procs.pl0000644000175000017500000000421412334200655021724 0ustar gregoagregoamy $file = '../include/GL/glext.h'; die "Unable to read '$file'" if (!open(FILE,$file)); my $exts = '../glext_procs.h'; die "Unable to write to '$exts'" if (!open(EXTS,">$exts")); my $exps = 'exports.txt'; die "Unable to read '$exps'" if (!open(EXPS,$exps)); my $exports = {}; foreach my $line () { $line =~ s|[\r\n]+||g; next if (!$line); $exports->{$line}++; } close(EXPS); # Header print EXTS qq {#ifndef __glext_procs_h_ #define __glext_procs_h_ #ifdef __cplusplus extern "C" \{ #endif /* ** This file is derived from glext.h and is subject to the same license ** restrictions as that file. ** }; # License while () { my $line = $_; next if ($line !~ m|^\*\* License Applicability.|); print EXTS $line; last; } # Skip to procs while () { my $line = $_; print EXTS $line; last if ($line =~ m|^\#include \|); } # Handle extensions while () { my $line = $_; if ($line =~ m|^\#ifdef __cplusplus|) { print "Found end\n"; print EXTS $line; next; } elsif ($line =~ m|^\#ifndef GL_[^\s]+|) { my $next_line = ; if ($next_line !~ m|^\#define (GL_[^\s]+) 1|) { print EXTS $line.$next_line; next; } my $ext = $1; print "$ext\n"; print EXTS qq {#ifndef NO_$ext #ifndef $ext #define $ext 1 #endif }; my @procs; while () { my $line2 = $_; if ($line2 =~ m|GL_GLEXT_PROTOTYPES|) { print EXTS $line2; next; } if ($line2 !~ m|^\#endif[\r\n]*$|) { print EXTS $line2; if ($line2 =~ m|APIENTRY (gl[^\s]+)|) { my $export = $1; if ($exports->{$export}) { print " Not a wgl export: $export\n"; } else { push(@procs,'static PFN'.uc($1).'PROC '.$1." = NULL;\n"); } } next; } print EXTS "\#ifdef GL_GLEXT_PROCS\n"; foreach my $proc (@procs) { print EXTS $proc; } print EXTS "\#endif /* GL_GLEXT_PROCS */\n"; print EXTS $line2; last; } } else { print EXTS $line; } } close(EXTS); close(FILE); libopengl-perl-0.6704+dfsg.orig/utils/hdr_diff.pl0000644000175000017500000000147612334200655021147 0ustar gregoagregoa#!/usr/bin/perl -w my($hdr) = @ARGV; die qq { Usage: hdr_diff OPENGL_HEADER } if (!$hdr); my $cmp = '../gl_const.h'; die "Const file not found: '$cmp'\n" if (!open(CMP,$cmp)); my $compare; $compare .= $_ while (); close(CMP); $compare =~ s|[\r\n]+| |gs; my $src = "../include/GL/$hdr.h"; die "Header not found: '$src'\n" if (!open(SRC,$src)); my $cnt = 0; my $missing = 0; foreach my $line () { if ($line =~ m|(/\* [^\s\*]+ \*/)|) { print "$1\n"; next; } next if ($line !~ m|\#define ([^\s]+)[^\w\r\n]|); my $const = $1; next if ($const =~ m|GL_VERSION_|); if ($const ne uc($const)) { print "* $1\n"; next; } $cnt++; next if ($compare =~ m|i\($const\)|); print "\ti($const)\n"; $missing++; } close(SRC); print "Missing: $missing of $cnt; ".($cnt - $missing)." found\n"; libopengl-perl-0.6704+dfsg.orig/utils/makefile.mingw0000644000175000017500000000076612334200655021666 0ustar gregoagregoa#!dmake CC=gcc.exe CCFLAGS=-DWIN32 -DHAVE_FREEGLUT LINK=g++.exe LDFLAGS=-L../FreeGLUT -lfreeglut -L/usr/lib/W32API -lopengl32 all: glversion.txt clean: -if exist "glversion.txt" del "glversion.txt" -if exist "glversion.exe" del "glversion.exe" -if exist "glversion.o" del "glversion.o" glversion.txt: glversion.exe glversion > glversion.txt glversion.exe: glversion.o $(LINK) -o glversion.exe glversion.o $(LDFLAGS) glversion.o: glversion.c makefile.mingw $(CC) $(CCFLAGS) -c glversion.c libopengl-perl-0.6704+dfsg.orig/menutest.pl0000644000175000017500000000107412334200655020100 0ustar gregoagregoause OpenGL qw(:all); glutInit(); glutInitWindowPosition(10, 10); glutInitWindowSize(200, 200); glutInitDisplayMode(16); $win = glutCreateWindow("test2"); glutSetWindow($win); glutDisplayFunc(sub { print "Display!\n"; glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) } ); glutReshapeFunc(sub { print "Reshape!\n"; my ($width, $height) = @_; glViewport(0, 0, $width, $height); } ); #glutIdleFunc(sub { print "Idle!\n" } ); glutCreateMenu(sub { print "Got menu ",@_,"\n" } ); glutAddMenuEntry("Hello", 1); glutAttachMenu(0); glutMainLoop(); libopengl-perl-0.6704+dfsg.orig/README0000644000175000017500000002542612334200655016566 0ustar gregoagregoa Copyright (c) 1998,1999 Kenneth Albanowski. All rights reserved. Copyright (c) 2000 Ilya Zakharevich. All rights reserved. Copyright (c) 2007 Bob Free. All rights reserved. Copyright (c) 2009-2013 Chris Marshall. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Perl OpenGL: a.k.a. POGL As of OpenGL-0.57 POGL now requires FreeGLUT (GLUT on Mac OS X) for full functionality: http://freeglut.sourceforge.net/ This was due to licensing constraints and lack of window close events in GLUT. Efforts are being made to support the original GLUT with reduced functionality and limited to the common subset of operations. NOTE: FreeGLUT distributions on Linux are deployed as libglut.so files, making it difficult to detect whether GLUT or FreeGLUT is installed. As such, FreeGLUT is assumed. See INSTALL for options to override this default. NOTE: POGL automatically installs a binary FreeGLUT library on 32bit win32 perl platforms. POGL provides access to most of the OpenGL 1.0, 1.1, and 1.2 APIs, and many OpenGL Extensions, such as Framebuffer Objects (FBOs) and Vertex Array Objects (VBOs). Some amount of GLU is supported, and GLUT is completely supported up to API version 3, with some support for 4.0 and FreeGlut 2.4.0. A small portion of GLX and X11 may still be supported, but this is deprecated in favor of FreeGLUT and will be removed in the future. If you use this functionality, please let us know. Compatibility notes with OpenGL 0.4: The OpenGL 0.4 library, written by Stan Melax, contains more support for some SGI specific functions then 0.5, so you may wish to stay with 0.4 on an SGI system. For other machines, 0.5 should greatly improve compatibility (compiling where 0.4 wouldn't have). Code-level compatibility with OpenGL 0.4 is available if you refer to OpenGL simply via 'use OpenGL;'. If you request specific packages (such as 'use OpenGL qw(glfunctions glconstants glutfunctions);'), you'll get 0.5 specific support. For more information, please read the OpenGL manual, available in OpenGL.pod. Portions of this module that directly derive from Stan's code are marked with "Melax" comments, and his copyright is described in the COPYRIGHT file. As this library is a simple binding between Perl and any library that complies with the OpenGL API, this module should interoperate seamlessly with any other modules that make use of OpenGL directly or (through another library) indirectly. For build instructions, please see the INSTALL file. For a brief description of what functions are supported, please read "SUPPORTS", and better yet read the two sample files, test.pl and isosurf.pl. Thanks for help developing this module goes to Stan Melax, Cass Everitt, Alligator Descarte, and probably others that I've forgotten. Happy Hacking, Kenneth Albanowski As of April 13, 2007, Bob Free has assumed primary ownership of this module. As of July 03, 2011, Chris Marshall started the Perl OpenGL Project at http://sourceforge.net/projects/pogl/ . All development and module support going forward has moved there. Chris Marshall is the current maintainer of this module. DISTRIBUTIONS: CPAN: http://search.cpan.org/~chm/ # for latest CPAN version GIT: git clone git://pogl.git.sourceforge.net/gitroot/pogl/pogl PPM for 32-bit perl 5.8 +: http://www.sisyphusion.tk/ppm/OpenGL.ppd PPM for 64-bit perl 5.10+: http://www.sisyphusion.tk/ppm/OpenGL.ppd Changes: 0.58+: Chris Marshall See GIT_CHANGES file in CPAN releases or use git log --stat on a git repository 0.57: Bob "grafman" Free Updated test.pl to fix fullscreen handling Fixed OpenGL.pod to reflect correct module name Added FBO constants to param enums in gl_util.c Implemented GL_ARB_point_parameters Implemented GL_ARB_multisample Implemented GL_ARB_color_buffer_float Added OGA calc and affine functions Added glpHasGPGPU Added an ATI workaround for GL_ARB_shading_language_100 dependencies Added VBO and FBO caching in OGAs - gl_util.h Fixed gluProject and gluUnProject - was converting matrices to ints Added glutSpecialUpFunc and glutWindowStatusFunc Added dist option to Makefile.PL to support binary distributions Switched from GLUT to FreeGLUT Added FreeGLUT folder for Win32 DLLs Implemented glutSetOption Implemented glutGameModeString Implemented glutEnterGameMode Implemented glutLeaveGameMode Implemented glutGameModeGet Added glpFullScreen and glpRestoreScreen Updated test.pl to support Game Mode Implemented glutCloseFunc Implemented glutLeaveMainLoop Major refactoring of Makefile.PL Renamed WGL interface option to W32API Added help message to Makefile.PL Added verbose option to Makefile.PL Added documentation comments to OpenGL.xs Added glpHasGLUT Updated test.pl to run texhack if no GLUT Added a countdown timer to examples/texhack Fixed GL_X_BYTES in assign Fixed vertex.glsl to work on newer nvidia cards Implemented glutIgnoreKeyRepeat Implemented glutSetKeyRepeat Implemented glutForceJoystickFunc Added FreeGLUT support for cygwin builds Fixed builds for Apple's recent Mac OS changes Added README for building on Mac OS Chris Marshall Added support for building POGL within cygwin Added Config.pm support Sisyphus Added partial support for MinGW/dmake - not yet fully functional Added "clean" target to Makefile.PL Alex Dodge Added glutKeyboardUpFunc 0.56: Bob "grafman" Free Added $BUILD_VERSION Updated OpenGL::Array->new Added OpenGL::Array->length Added OpenGL::Array->bind Added OpenGL::Array->bound Added OpenGL::Array->new_scalar Added OpenGL::Array->new_pointer Added OpenGL::Array->update_pointer Updated OpenGL::Array->retrieve Updated OpenGL::Array->retrieve_data Added glVertexPointer_s Added glNormalPointer_s Added glColorPointer_s Added glIndexPointer_s Added glTexCoordPointer_s Added glEdgeFlagPointer_s Added glVertexPointerEXT_s Added glNormalPointerEXT_s Added glColorPointerEXT_s Added glIndexPointerEXT_s Added glTexCoordPointerEXT_s Added glEdgeFlagPointerEXT_s Added gluBuild1DMipmaps_c Added gluBuild2DMipmaps_c Added OpenGL::Image support to test.pl Updated typemap to add GLcharARB and GLhandleARB Implemented GL_EXT_texture_cube_map Implemented GL_ARB_shader_objects Implemented GL_ARB_fragment_shader Implemented GL_ARB_vertex_shader Implemented GL_ARB_shading_language_100 Implemented GL_EXT_Cg_shader Updated test.pl to use OpenGL::Image and OpenGL::Shader Geoffrey Broadwell Fixed a bug in gl_pixelbuffer_size 0.55: Bob "grafman" Free Added OpenGL::Array->new_list Added OpenGL::Array->elements Added macro abstraction for wgl extensions Implemented GL_ARB_depth_texture Implemented GL_ARB_draw_buffers Implemented GL_ARB_fragment_program Implemented GL_ARB_fragment_program_shadow Implemented GL_ARB_half_float_pixel Implemented GL_ARB_multitexture Implemented GL_ARB_pixel_buffer_object Implemented GL_ARB_point_sprite Implemented GL_ARB_shadow Implemented GL_ARB_texture_border_clamp Implemented GL_ARB_texture_cube_map Implemented GL_ARB_texture_env_add Implemented GL_ARB_texture_float Implemented GL_ARB_texture_mirrored_repeat Implemented GL_ARB_texture_non_power_of_two Implemented GL_ARB_texture_rectangle Implemented GL_ARB_vertex_buffer_object Implemented GL_ARB_vertex_program Implemented GL_ATI_texture_float Implemented GL_ATI_texture_mirror_once Implemented GL_EXT_bgra Implemented GL_EXT_copy_texture Implemented GL_EXT_framebuffer_object Implemented GL_EXT_packed_pixels Implemented GL_EXT_pixel_buffer_object Implemented GL_EXT_rescale_normal Implemented GL_EXT_separate_specular_color Implemented GL_EXT_shadow_funcs Implemented GL_EXT_stencil_wrap Implemented GL_EXT_subtexture Implemented GL_EXT_textureD3 Implemented GL_EXT_texture_env_dot3 Implemented GL_EXT_texture_filter_anisotropic Implemented GL_EXT_texture_lod_bias implemented GL_EXT_texture_mirror_clamp implemented GL_EXT_vertex_array Implemented GL_HP_occlusion_test Implemented GL_IBM_rasterpos_clip Implemented GL_NV_blend_square Implemented GL_NV_copy_depth_to_color Implemented GL_NV_depth_clamp Implemented GL_NV_fog_distance Implemented GL_NV_fragment_program2 Implemented GL_NV_fragment_program_option Implemented GL_NV_light_max_exponent Implemented GL_NV_packed_depth_stencil Implemented GL_NV_texgen_reflection Implemented GL_NV_texture_expand_normal Implemented GL_NV_texture_rectangle Implemented GL_NV_vertex_program2_option Implemented GL_NV_vertex_program3 Implemented GL_S3_s3tc Implemented GL_SGIS_generate_mipmap Implemented GL_SGIS_texture_lod Implemented GL_SGIX_depth_texture Implemented GL_SGIX_shadow Implemented GL_SUN_slice_accum Added glDrawRangeElements_p Added glColorPointer_p Added glEdgeFlagPointer_p Added glIndexPointer_p Added glNormalPointer_p Added glTexCoordPointer_p Added glVertexPointer_p Added 'include' folder for updated GL header files Added 'utils' folder for header processing scripts Added glversion utility to enhance Makefile.PL Fixed compiler warnings in gl_util.c and OpenGL.xs Fixed glPolygonOffsetEXT bias mapping Fixed glDrawRangeElements_s code Fixed glGetPointerv_c params pointer Moved obsolete/deprecated extensions Added $glext_implemented hashref of implemented GL extensions Added glpCheckExtension Updated test.pl Ilya Zakharevich Updated support for SunRay Sherm Pendley Added MacOSX support Daiki Nomura Helped add FreeBSD support 0.54: Martien Verbruggen fixed another Mesa limitation. #ifdef out unglob'ing: symbol not found on Solaris... 0.53: Correct vertex_array detection in isosample.pl. Add more vertex_array constants (and move the definition earlier). Exchange (default) arguments for glp*: move display after window (should not break old stuff, since there was/is no way to query the display and window). New function $d = glpDisplay() (croaks on failure). Make glpOpenWindow() return the window handle. New functions with signatures void glpMoveResizeWindow(int x, int y, unsigned int width, unsigned int height, Window w, Display* display); void glpMoveWindow(int x, int y, Window w, Display* display); void glpResizeWindow(unsigned int width, unsigned int height, Window w, Display* display); (w and display are optional). 0.52: More of the portability, bug fixes, and examples. New option -steal for glpOpenWindow() to allow drawing into an existing window (no "Visual" syncronization yet). GL_EXT_vertex_array done on the level of cpp. 0.51: Portability enhancement (X and OS/2 PM), bug fixes, examples enhanced. _have_glp() should be used instead of _have_glx to test for presence of glp* functions. Remap OpenGL 1.1 functions into GL_EXT_vertex_array interface if needed. libopengl-perl-0.6704+dfsg.orig/TODO0000644000175000017500000002255412334200655016375 0ustar gregoagregoaLast saved: Tue 20 Sep 2011 09:52:40 AM Fix segfault in glutMainLoop() for test.pl on vista * Build debug perl for win32 * Get gdb for MinGW * Same with MSVC 6.0 and latest * Does same code with Prima::OpenGL not segfault? Fix current POGL configuration and build process * Clean up use of configuration information * Make the compile and config results unambiguous * Compile flags have two types * System info flags: HAVE_GLX, HAVE_GLUT, ... * Build flags: BUILD_GLUT, BUILD_FREEGLUT, ... * Exactly what libraries are being used * Library versions and locations/paths * What are the compile and link configuration * split out compile/link by libraries * OpenGL * GLU * GLUT * GLX * What bindings are actually enabled? * Use the same information to build POGL as glversion * Refactor Makefile.PL to be comprehensible. * strip out unused options * remove include and link directories that do not exist * replace make of glversion by perl based functionality * toolkit option: GLUT and FreeGLUT * interface option: GLX/unix, WGL/win32, [ AGL/CGL? ] Refactor config/build for portability and simplicity * use Module::Build framework * use constant rather than XS constant function * use GLEW and autogeneration for bindings * why does GLEW require GLX_VERSION_1_2? Miscellaneous portability improvements * Convert malloc() and calloc() calls to Newx(), Newxc(), and Newxz() * Convert free() to Safefree() to match. Resolve ASPerl PPM build problems: * win32 fails because of the FreeGLUT install during Makefile.PL * linux fails because FreeGLUT is not found * Mac OS X fails because the GLUT compile env is not right * What does ASPerl do re external packages needed to build? Evaluate local include directory usage * needed for win32 since we install * check we're using the systemwide files * if not, why not Evaluate strategy for legacy POGL going forward: * Factor out RPN, OGA, ... * Can implementation be less OGA specific * Support OGA, PDLs, ... * What about using just PDL::Core stuff Enhance CPAN Testers automated testing support * Improve diagnostic output for debugging test results * Add a "compile and link only" build of POGL * Base on GLEW or GLee implementation * Start with GLEW for more cross-platform * Can implementation be made wrapper library independent? Improve library and headers checks in Makefile.PL * Required libraries are OpenGL and a GUI/context providing toolkit * GLUT/FreeGLUT, Prima::OpenGL, GTk+, WxWidgets,... * GLUT is available on *all* GLX platforms * Mac OS X has a non-X11 GLUT library with extensions: * glutCheckLoop() -- same as glutMainLoopEvent() * glutWMCloseFunc() -- same as glutCloseFunc() * what about GLU, GLX, others? * If libraries and headers are not available exit 0 * Devel::CheckLib to check Evaluate backwards compatibility * document compatibility, at a minimum * provide feedback info to report issuues * primary goal is OpenGL, GLUT, GLU support * secondary goal is more perlish interface * move to common, clear choice as default! Clean up glp*() routine support: * add friendlier display selection function (glpInitDisplayString?) * backwards compatible where possible * strip out required GLX or X11 specific code * layer over GLUT or other GUI/context environment * N.B. *GLUT is on *all* GLX systems but may not use GLX * What is needed to support Tk+X11 bindings (just context?) * Investigate Gtk+ or wxWidgets for embedding * GLUI as an easy, simple starter (performance?) Fix examples/ directory * update to use GLUT rather than glp() * make simple toolkit wrapper * hide details of the underlying GUI layer * simplify demo code * verify all examples work (most appear to) * remove broken cruft * redo planets example to be more realistic: * planets aren't spheres * sun has no depth + jaggies * colors are off * animation is jumpy (how to smooth out) * give saturn *real* rings * what is blue wedge in earth view? * basic texture for planets Implement basic template for GLUT/GLUI apps * Simple default/bare bones option * Generic version with typical interaction * Customizable version (runtime?) * Maybe in examples directory as a module to use Add Geometry Shader support Add bindings to GLUI Add support for more GLUT variant export control: * Split GLUT into a separate module * I.e., remove GUI dependencies from POGL * Need generic context interface standard * Should be able to use Prima instead * or WxWidgets or GTk or ... * :freeglutconstants and :freeglutfunctions * :appleglutconstants and :appleglutfunctions Make code handle "missing" windows: * This is for OpenGL::GLUT * Calls glutGetWindow() and assumes win is valid * If win==0, need to handle appropriately and *not* do anything with win Implement safe glutInit * check if done_glutInit before calling glutInit() * carp/croak/quiet error settings Fix OpenGL/GLUT error handling for perl * GLUT errors should not kill the interpreter * Add carp/croak on no glutInit to glut functions to prevent exit(1) * Add carp/croak to glutDisplayFunc() with null callback. * Add carp/croak to glutSetKeyRepeat() with invalid repeat mode * Add carp/croak to glutSetCursor() with unknown cursor type * Investigate addition of adding return values to perl code * This would be great for a debug mode * No return value if not in debug mode (or always undef?) * undef for error; 1 for void or vice versa? * Add toggle & display of OpenGL errors a la glutReportErrors() * Call glGetError in a loop until no errors returned * Do check for all OpenGL commands Finish perl bindings to remaining FreeGLUT functions: * glutGetProcAddress * what does this mean at perl level? * maybe use Inline to generate a new binding * is there a runtime alternative? * glutJoystickFunc * need to add non-callback argument * document current function OpenGLUT support for building * OpenGLUT is a dead project, use FreeGLUT. * Add info to docs re *no* OpenGLUT Make POGL GLUT-proof * Make build work with GLUT-only and GLUT+FreeGLUT configurations * GLUT-only: build and run with reduced functionality * GLUT+FreeGLUT: build should correctly select and use FreeGLUT * Nothing should break if you have GLUT rather than FreeGLUT (as long as you are only using the GLUT subset of FreeGLUT) * Some functionality may be quietly disabled (glutMainLoop extensions) * Some functionality may be emulated (glutBitmapString) * make work with readline event loop for perldl shell * reverse callback strategy * what about a GUI window mode for perldl in that case? Fix current POGL configuration and build process * Clean up use of configuration information * Make the compile and config results unambiguous * Compile flags have two types * System info flags: HAVE_GLX, HAVE_GLUT, ... * Build flags: BUILD_GLUT, BUILD_FREEGLUT, ... * Exactly what libraries are being used * Library versions and locations/paths * What are the compile and link configuration * split out compile/link by libraries * OpenGL * GLU * GLUT * GLX * What bindings are actually enabled? * Use the same information to build POGL as glversion * Refactor Makefile.PL to be comprehensible. * strip out unused options * remove include and link directories that do not exist * replace make of glversion by perl based functionality * toolkit option: GLUT and FreeGLUT * interface option: GLX/unix, WGL/win32, [ AGL/CGL? ] Refactor config/build for portability and simplicity * use Module::Build framework * use constant rather than XS constant function * Extract GL, GLX, and WGL constants from glew.h, glxew.h and wglew.h * Extract GLU constants from glu.h * Extract GLUT and FreeGLUT from glut.h and freeglut_*.h * Verify that these pre-extracted versions work ok * use GLEW and autogeneration for bindings * why does GLEW require GLX_VERSION_1_2? Move test apps to t/ subdirectory from test.pl * Split into interactive and non-interactive tests * Skip interactive tests if no OpenGL context * need to test for each major functionality * GL * GLU * GLUT/FreeGLUT * RPN * Array * back compatibility (glp routines) * PDL object support * NOTE: require_ok() and use_ok() don't like $VERSION w git suffix Improve support for non-standard OpenGL configurations * Add command line options for perl Makefile.PL * set CFLAGS and other build options * Make single point override for INCLUDE information * Document how to edit Makefile.PL Implement complete matrix test capability * document/implement a test matrix for regression and stability tests * setup virtualized test environment for POGL and PDL * factors to include * perl vs activeperl vs strawberry * GLX vs WGL vs CGL/AGL * hardware vs software/Mesa * OS libopengl-perl-0.6704+dfsg.orig/Release_Notes0000644000175000017500000003065412446027761020371 0ustar gregoagregoa+------------------------------------------------------------------------+ | OpenGL-0.6704 +------------------------------------------------------------------------+ General Notes: * Fixes a number of bugs since the last release. Thanks to Christian Walde, Olaf Dabrunz, and Alessandro Ranellucci for their contributions. Highlights: * Fix item_count error in OpenGL::Array implementation * Fix POGL bug #12 re thread safety * Fix POGL bug #16 "Free to wrong pool" caused by calloc() +------------------------------------------------------------------------+ | OpenGL-0.6703 +------------------------------------------------------------------------+ General Notes: * Minor update to tolerate absence of several extensions removed in Mesa 9.2.0. Thanks to Colin Watson for reporting and fixing the problem. Highlights: * Tolerate absence of several extensions removed in Mesa 9.2.0 +------------------------------------------------------------------------+ | OpenGL-0.6702 +------------------------------------------------------------------------+ General Notes: * This release fixes some minor build issures for Strawberry Perl 32bit where the wrong FreeGLUT library would be linked in---this failed at runtime during the 'perl Makefile.PL' step. Highlights: * Clean up INSTALL, README, and bring more up-to-date. * Put util/strawberry.bat under git configuration management. * glutCloseFunc() feature has been disabled. A warning is given the first time the close handler is called. * Strawberry perl builds are now detected and the build configuration is corrected. This should allow for automated builds. +------------------------------------------------------------------------+ | OpenGL-0.6701 +------------------------------------------------------------------------+ General Notes: * This is a work-around release to work around a problem with segfaults during the glutCloseFunc() processing. Until a real fix is found, the feature has been disabled. Highlights: * glutCloseFunc() feature has been disabled. A warning is given the first time the close handler is called. * Strawberry perl builds are now detected and the build configuration is corrected. This should allow for automated builds. +------------------------------------------------------------------------+ | OpenGL-0.67 +------------------------------------------------------------------------+ General Notes: * This is a quick bugfix release to work around a build problem for Debian sid on AMD platforms. Highlights: * Comment out failing tests in t/10_opengl_array.t. Ideally, we could replace this implementation with something using pdls instead. * Some GLUT cleanup for POGL * Remove GL_TYPE_RGBA_FLOAT_ATI support. The sid debian build for AMD has problems with this. * New example/glxgears.pl ported by Brian Medley (thanks!) * Removed OS/2 support code (no longer supported) * Various other fixes (see GIT_CHANGES) +------------------------------------------------------------------------+ | OpenGL-0.66 +------------------------------------------------------------------------+ General Notes: * This test adds skips for some tests from OpenGL::RPN under current development avoiding FAILs in automated builds due to known problems. * It is compatible with the Prima GUI toolkit and the Prima::OpenGL module. +------------------------------------------------------------------------+ | OpenGL-0.65 +------------------------------------------------------------------------+ General Notes: * This is a point release for the Perl OpenGL module (POGL) with new features, bugs fixed and improved documentation. * OS/2 is no longer supported by POGL directly. Highlights: * Paul Seamons contributed full tessellation support, documentation for OpenGL::Tessellation, and a *major* set of fixes and POD for the existing OpenGL::Array module. * The cygwin build of POGL now supports either the native win32 platform drivers or the X11/GLX bindings (default). Use interface=w32api or interface=wgl as args to the perl Makefile.PL to select. NOTE: you have to pick one or the other. If you change, any dependencies such as PDL::Graphics::TriD will need to be recompiled. * The included FreeGLUT DLL has been upgraded to 2.6.0 thanks to Rob/sisyphus. * Prima::OpenGL has been released by Dmitry Karasik which adds support for Perl OpenGL to his cross-platform GUI toolkit in addition to bug fixes and code cleanup. Thanks, Dmitry! See http://search.cpan.org/~karasik/Prima-1.30/ for details. +------------------------------------------------------------------------+ | OpenGL-0.64_004 +------------------------------------------------------------------------+ General Notes: * This is a CPAN developers release for the OpenGL module. - It is a snapshot of the current git development tree and everything may not work correctly or have complete documentation. - These release notes may not be fully complete. Please see the git log for full details. - All tests may not pass, especially ones corresponding to issues in KNOWN_PROBLEMS. - Manual build/install is recommended although the cpan shell may be used by specifying the distribution path rather than just the module name, e.g.: cpan> get CHM/OpenGL-0.64_004.tar.gz cpan> make CHM/OpenGL-0.64_004.tar.gz cpan> test CHM/OpenGL-0.64_004.tar.gz cpan> look CHM/OpenGL-0.64_004.tar.gz Highlights: * Add META.yml information to the build process * Fix bug in test.pl * First POGL code to be placed on new sf.net site. +------------------------------------------------------------------------+ | OpenGL-0.64_003 +------------------------------------------------------------------------+ This is a CPAN developers release for the Perl OpenGL module with some minor fixes to improve buildability and updates and bug fixes to check. Highlights: * Fix interface=w32api to work for cygwin again. Requires a current cygwin install---greater than 1.7.x. * Minor cleanup in Makefile.PL and documentation/readme updates reflecting the newly set up Perl OpenGL project at sf.net: http://sourceforge.net/projects/pogl/ +------------------------------------------------------------------------+ | OpenGL-0.64_002 +------------------------------------------------------------------------+ This is a CPAN developers release for the Perl OpenGL module with some minor fixes to improve buildability and updates and bug fixes to check. Highlights: * win32 freeglut.dll has been updated to 2.6.0, the current stable release. * Many fixes to OpenGL::Array and new tests for the functionality. Still in progress but more complete and correct nonetheless. Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.64_001 +------------------------------------------------------------------------+ This is a point release for the Perl OpenGL module with some minor fixes to improve buildability. Highlights: * Newly revised GLU tesselation support provided by Paul Seamons. See examples/tesselation.pl if you wish to test drive the functionality. Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.64 +------------------------------------------------------------------------+ This is a point release for the Perl OpenGL module with some minor fixes to improve buildability. Highlights: * Add Test::More as a prerequisite for OpenGL (it is used by the tests) * Work around a gcc 3.2.3 optimizer bug which caused build failures on some linux systems. Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.63_002 Release Notes | +------------------------------------------------------------------------+ This is a CPAN Developers release for testing purposes. Feedback welcome. Highlights: * Add Test::More as a prerequisite for OpenGL (it is used by the tests) Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.63_001 Release Notes | +------------------------------------------------------------------------+ This is a CPAN Developers release for testing purposes. Feedback welcome. Highlights: * Work around a gcc 3.2.3 optimizer bug which caused build failures on some linux systems. Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.63 Release Notes | +------------------------------------------------------------------------+ Highlights: * Make glpDisplay() handle all XOpenDisplay input argument and return the Display structure pointer. This allows glpDisplay to be used to check for the ability to open the X display avoiding a problem with glutInit exiting when no display is found. * Remove use Math::Trig from test.pl * Fix typo reported in OpenGL.pod * Add /usr/local/freeglut/* to Makefile.PL location Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.62 Release Notes | +------------------------------------------------------------------------+ Highlights: * Improved build support for Solaris OpenGL and FreeGLUT libraries. * Corrected install for win32 DLL. * Fixed build for AGL to only use AGL, not X11 on Mac OS X. * Fixed _have_freeglut() checks in test.pl and elsewhere. * Fix glut_const.h typos that broke some GLUT macros. Exiting the FreeGLUT event loop should work. Please see the GIT_CHANGES file for more details. Thanks. +------------------------------------------------------------------------+ | OpenGL-0.61_001 Release Notes | +------------------------------------------------------------------------+ * Developers release to check out fix for FreeGLUT constants definitions and some include typos that caused them. If this tests ok on CPAN Testers, it will become the stable release. * The fix means that exiting the FreeGLUT event loop should work. +------------------------------------------------------------------------+ | OpenGL-0.61 Release Notes | +------------------------------------------------------------------------+ * FreeGLUT detection has been improved when both glut.h and freeglut.h are present on a system. * Fixed include path problems for glversion on Mac OS X. * Now builds out of the box on many linux, PC, and Mac OS X systems as a result of the move to FreeGLUT/GLUT for GUI operations. * This is the base release for the upcoming PDL-2.4.5 release with refactored 3D graphics using the Perl OpenGL module. * Improved Mac OS X build support, especially with GLUT (not FreeGLUT) and no X11 installed or server running. * Improved FreeGLUT binding and support for FreeGLUT vs GLUT. A number of bugs stomped. * Improved linux/GLX+X11 build support control although FreeGLUT or GLUT(on Mac OS X) is preferred for full functionality. * Fixed MinGW detection logic for ActivePerl configurations * Code clean up and bugs fixed. Many were discovered as a result of the reconcilliation with PDL::Graphics::OpenGL requirements. * A few glp*() functions from PDL were added to POGL and confirmed consistent API with PDL::Graphics::OpenGL * glpcOpenWindow() is deprecated as an external, user visible function. The use of glpOpenWindow() is recommended. It provides the exact same set of options and control. * Various documentation updates. * The test.pl demo program now works more robustly. * The mysterious freeglut font ... not found bug has been fixed! libopengl-perl-0.6704+dfsg.orig/isosurf.pl0000644000175000017500000001611212334200655017725 0ustar gregoagregoa#!/usr/bin/perl -w use OpenGL qw(:all); $speed_test = GL_FALSE; $use_vertex_arrays = GL_TRUE; $doubleBuffer = GL_TRUE; $smooth = GL_TRUE; $lighting = GL_TRUE; $light0 = GL_TRUE; $light1 = GL_TRUE; $MAXVERTS = 10000; $verts = new OpenGL::Array $MAXVERTS * 3, GL_FLOAT; $norms = new OpenGL::Array $MAXVERTS * 3, GL_FLOAT; $numverts = 0; $xrot=0; $yrot=0; sub read_surface_dat { my ($filename) = @_; open(F, "<$filename") || die "couldn't read $filename\n"; $numverts = 0; while ($numverts < $MAXVERTS and defined($_ = )) { chop; @d = split(/\s+/, $_); $verts->assign($numverts*3, @d[0..2]); $norms->assign($numverts*3, @d[3..5]); $numverts++; } $numverts--; printf "%d vertices, %d triangles\n", $numverts, $numverts-2; close(F); } sub read_surface_bin { my ($filename) = @_; open(F, "<$filename") || die "couldn't read $filename\n"; binmode(F); $numverts = 0; while ($numverts < $MAXVERTS and read(F, $_, 12)==12) { @d = map(($_-32000) / 10000 , unpack("nnnnnn", $_)); $verts->assign($numverts*3, @d[0..2]); $norms->assign($numverts*3, @d[3..5]); $numverts++; } $numverts--; printf "%d vertices, %d triangles\n", $numverts, $numverts-2; close(F); } sub draw_surface { my ($i); # glDrawArrays(GL_TRIANGLE_STRIP, 0, $numverts); if ($use_vertex_arrays) { glDrawArraysEXT( GL_TRIANGLE_STRIP, 0, $numverts ); } else { glBegin( GL_TRIANGLE_STRIP ); for ($i=0;$i<$numverts;$i++) { glNormal3d( $norms->retrieve($i*3, 3) ); glVertex3d( $verts->retrieve($i*3, 3) ); } glEnd(); } } sub draw1 { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glPushMatrix(); glRotated( $yrot, 0.0, 1.0, 0.0 ); glRotated( $xrot, 1.0, 0.0, 0.0 ); draw_surface(); glPopMatrix(); glFlush(); if ($doubleBuffer) { glutSwapBuffers(); } } sub Draw { if ($speed_test) { for ($xrot=0.0;$xrot<=360.0;$xrot+=10.0) { draw1(); } MyExit(0); } else { draw1(); } } sub InitMaterials { my(@ambient) = (0.1, 0.1, 0.1, 1.0); my(@diffuse) = (0.5, 1.0, 1.0, 1.0); my (@position0) = (0.0, 0.0, 20.0, 0.0); my (@position1) = (0.0, 0.0, -20.0, 0.0); my (@front_mat_shininess) = (60.0); my (@front_mat_specular) = (0.2, 0.2, 0.2, 1.0); my (@front_mat_diffuse) = (0.5, 0.28, 0.38, 1.0); # /* # my (@back_mat_shininess) = (60.0); # my (@back_mat_specular) = (0.5, 0.5, 0.2, 1.0); # my (@back_mat_diffuse) = (1.0, 1.0, 0.2, 1.0); # */ my (@lmodel_ambient) = (1.0, 1.0, 1.0, 1.0); my (@lmodel_twoside) = (GL_FALSE); glLightfv_p(GL_LIGHT0, GL_AMBIENT, @ambient); glLightfv_p(GL_LIGHT0, GL_DIFFUSE, @diffuse); glLightfv_p(GL_LIGHT0, GL_POSITION, @position0); glEnable(GL_LIGHT0); glLightfv_p(GL_LIGHT1, GL_AMBIENT, @ambient); glLightfv_p(GL_LIGHT1, GL_DIFFUSE, @diffuse); glLightfv_p(GL_LIGHT1, GL_POSITION, @position1); glEnable(GL_LIGHT1); glLightModelfv_p(GL_LIGHT_MODEL_AMBIENT, @lmodel_ambient); glLightModelfv_p(GL_LIGHT_MODEL_TWO_SIDE, @lmodel_twoside); glEnable(GL_LIGHTING); glMaterialfv_p(GL_FRONT_AND_BACK, GL_SHININESS, @front_mat_shininess); glMaterialfv_p(GL_FRONT_AND_BACK, GL_SPECULAR, @front_mat_specular); glMaterialfv_p(GL_FRONT_AND_BACK, GL_DIFFUSE, @front_mat_diffuse); } sub Init { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); InitMaterials(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum( -1.0, 1.0, -1.0, 1.0, 5, 25 ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslated( 0.0, 0.0, -6.0 ); # glVertexPointer_a( 3, GL_FLOAT, 0, $verts ); # glNormalPointer_a( GL_FLOAT, 0, $norms ); # glEnable( GL_VERTEX_ARRAY ); # glEnable( GL_NORMAL_ARRAY ); if ($use_vertex_arrays) { glVertexPointerEXT_c( 3, GL_FLOAT, 0, $numverts, $verts->ptr ); glNormalPointerEXT_c( GL_FLOAT, 0, $numverts, $norms->ptr ); glEnable( GL_VERTEX_ARRAY_EXT ); glEnable( GL_NORMAL_ARRAY_EXT ); } } sub Reshape { my ($width, $height) = @_; glViewport(0, 0, $width, $height); } sub Key { my ($key, $x, $y ) = @_; if ($key == 27 or $key == ord 'q' or $key == ord 'Q') { MyExit(); } elsif ($key == ord('s')) { $smooth = !$smooth; if ($smooth) { glShadeModel(GL_SMOOTH); } else { glShadeModel(GL_FLAT); } } elsif ($key == ord('0')) { $light0 = !$light0; if ($light0) { glEnable(GL_LIGHT0); } else { glDisable(GL_LIGHT0); } } elsif ($key == ord('1')) { $light1 = !$light1; if ($light1) { glEnable(GL_LIGHT1); } else { glDisable(GL_LIGHT1); } } elsif ($key == ord('l')) { $lighting = !$lighting; if ($lighting) { glEnable(GL_LIGHTING); } else { glDisable(GL_LIGHTING); } } else { return; } glutPostRedisplay(); } sub SpecialKey { my ($key, $x, $y ) = @_; if ($key == GLUT_KEY_LEFT) { $yrot -= 15.0; } elsif ($key == GLUT_KEY_RIGHT) { $yrot += 15.0; } elsif ($key == GLUT_KEY_UP) { $xrot += 15.0; } elsif ($key == GLUT_KEY_DOWN) { $xrot -= 15.0; } else { return; } glutPostRedisplay(); } #sub Args(int argc, char **argv) #{ # GLint i; # # for (i = 1; i < argc; i++) { # if (strcmp(argv[i], "-sb") == 0) { # doubleBuffer = GL_FALSE; # } # else if (strcmp(argv[i], "-db") == 0) { # doubleBuffer = GL_TRUE; # } # else if (strcmp(argv[i], "-speed") == 0) { # speed_test = GL_TRUE; # doubleBuffer = GL_TRUE; # } # else if (strcmp(argv[i], "-va") == 0) { # use_vertex_arrays = GL_TRUE; # } # else { # printf("%s (Bad option).\n", argv[i]); # return GL_FALSE; # } # } # # return GL_TRUE; #} my $WindowId; #int main(int argc, char **argv) #{ # GLenum type; # char *extensions; read_surface_bin( "isosurf.bin" ); # if (Args(argc, argv) == GL_FALSE) { # exit(0); # } glutInit(); glutInitWindowPosition(0, 0); glutInitWindowSize(400, 400); $type = GLUT_DEPTH; $type |= GLUT_RGB; $type |= ($doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; glutInitDisplayMode($type); if (($WindowId = glutCreateWindow("Isosurface")) <= 0) { exit(0); } # /* Make sure server supports the vertex array extension */ # $extensions = glGetString( GL_EXTENSIONS ); # if ($extensions !~ /\bGL_EXT_vertex_array\b/ # or OpenGL::_have_glp and not OpenGL::_have_glx and 0) { # OS/2 reports wrong # $use_vertex_arrays = GL_FALSE; # } # print "Extensions: '$extensions'.\n"; if (defined &OpenGL::glVertexPointerEXT_c) { print "Using Vertex Array...\n"; } else { print "No Vertex Array extension found, using a slow method...\n"; $use_vertex_arrays = 0; } Init(); glutReshapeFunc(\&Reshape); glutKeyboardFunc(\&Key); glutSpecialFunc(\&SpecialKey); glutDisplayFunc(\&Draw); glutMainLoop(); # This leaves GLUT running (at least under OS/2...). #sub MyExit { # exit shift if $WindowId <= 0; # glutDestroyWindow($WindowId); # warn "Exiting...\n"; #} sub MyExit { exit } # Segfaults under OS/2... libopengl-perl-0.6704+dfsg.orig/gl_const.h0000644000175000017500000023617512334200655017674 0ustar gregoagregoa#ifdef GL_VERSION_1_0 if (!strncmp(name, "GL_", 3)) { i(GL_FALSE) i(GL_TRUE) i(GL_BYTE) i(GL_UNSIGNED_BYTE) i(GL_SHORT) i(GL_UNSIGNED_SHORT) i(GL_INT) i(GL_UNSIGNED_INT) i(GL_FLOAT) i(GL_DOUBLE) i(GL_2_BYTES) i(GL_3_BYTES) i(GL_4_BYTES) i(GL_LINES) i(GL_POINTS) i(GL_LINE_STRIP) i(GL_LINE_LOOP) i(GL_TRIANGLES) i(GL_TRIANGLE_STRIP) i(GL_TRIANGLE_FAN) i(GL_QUADS) i(GL_QUAD_STRIP) i(GL_POLYGON) i(GL_EDGE_FLAG) i(GL_V2F) i(GL_V3F) i(GL_C4UB_V2F) i(GL_C4UB_V3F) i(GL_C3F_V3F) i(GL_N3F_V3F) i(GL_C4F_N3F_V3F) i(GL_T2F_V3F) i(GL_T4F_V4F) i(GL_T2F_C4UB_V3F) i(GL_T2F_C3F_V3F) i(GL_T2F_N3F_V3F) i(GL_T2F_C4F_N3F_V3F) i(GL_T4F_C4F_N3F_V4F) i(GL_MATRIX_MODE) i(GL_MODELVIEW) i(GL_PROJECTION) i(GL_TEXTURE) i(GL_POINT_SMOOTH) i(GL_POINT_SIZE) i(GL_POINT_SIZE_GRANULARITY) i(GL_POINT_SIZE_RANGE) i(GL_LINE_SMOOTH) i(GL_LINE_STIPPLE) i(GL_LINE_STIPPLE_PATTERN) i(GL_LINE_STIPPLE_REPEAT) i(GL_LINE_WIDTH) i(GL_LINE_WIDTH_GRANULARITY) i(GL_LINE_WIDTH_RANGE) i(GL_POINT) i(GL_LINE) i(GL_FILL) i(GL_CCW) i(GL_CW) i(GL_FRONT) i(GL_BACK) i(GL_CULL_FACE) i(GL_CULL_FACE_MODE) i(GL_POLYGON_SMOOTH) i(GL_POLYGON_STIPPLE) i(GL_FRONT_FACE) i(GL_POLYGON_MODE) i(GL_COMPILE) i(GL_COMPILE_AND_EXECUTE) i(GL_LIST_BASE) i(GL_LIST_INDEX) i(GL_LIST_MODE) i(GL_NEVER) i(GL_LESS) i(GL_GEQUAL) i(GL_LEQUAL) i(GL_GREATER) i(GL_NOTEQUAL) i(GL_EQUAL) i(GL_ALWAYS) i(GL_DEPTH_TEST) i(GL_DEPTH_BITS) i(GL_DEPTH_CLEAR_VALUE) i(GL_DEPTH_FUNC) i(GL_DEPTH_RANGE) i(GL_DEPTH_WRITEMASK) i(GL_DEPTH_COMPONENT) i(GL_LIGHTING) i(GL_LIGHT0) i(GL_LIGHT1) i(GL_LIGHT2) i(GL_LIGHT3) i(GL_LIGHT4) i(GL_LIGHT5) i(GL_LIGHT6) i(GL_LIGHT7) i(GL_SPOT_EXPONENT) i(GL_SPOT_CUTOFF) i(GL_CONSTANT_ATTENUATION) i(GL_LINEAR_ATTENUATION) i(GL_QUADRATIC_ATTENUATION) i(GL_AMBIENT) i(GL_DIFFUSE) i(GL_SPECULAR) i(GL_SHININESS) i(GL_EMISSION) i(GL_POSITION) i(GL_SPOT_DIRECTION) i(GL_AMBIENT_AND_DIFFUSE) i(GL_COLOR_INDEXES) i(GL_LIGHT_MODEL_TWO_SIDE) i(GL_LIGHT_MODEL_LOCAL_VIEWER) i(GL_LIGHT_MODEL_AMBIENT) i(GL_FRONT_AND_BACK) i(GL_SHADE_MODEL) i(GL_FLAT) i(GL_SMOOTH) i(GL_COLOR_MATERIAL) i(GL_COLOR_MATERIAL_FACE) i(GL_COLOR_MATERIAL_PARAMETER) i(GL_NORMALIZE) i(GL_CLIP_PLANE0) i(GL_CLIP_PLANE1) i(GL_CLIP_PLANE2) i(GL_CLIP_PLANE3) i(GL_CLIP_PLANE4) i(GL_CLIP_PLANE5) i(GL_ACCUM_RED_BITS) i(GL_ACCUM_GREEN_BITS) i(GL_ACCUM_BLUE_BITS) i(GL_ACCUM_ALPHA_BITS) i(GL_ACCUM_CLEAR_VALUE) i(GL_ACCUM) i(GL_ADD) i(GL_LOAD) i(GL_MULT) i(GL_RETURN) i(GL_ALPHA_TEST) i(GL_ALPHA_TEST_REF) i(GL_ALPHA_TEST_FUNC) i(GL_BLEND) i(GL_BLEND_SRC) i(GL_BLEND_DST) i(GL_ZERO) i(GL_ONE) i(GL_SRC_COLOR) i(GL_ONE_MINUS_SRC_COLOR) i(GL_DST_COLOR) i(GL_ONE_MINUS_DST_COLOR) i(GL_SRC_ALPHA) i(GL_ONE_MINUS_SRC_ALPHA) i(GL_DST_ALPHA) i(GL_ONE_MINUS_DST_ALPHA) i(GL_SRC_ALPHA_SATURATE) /* OS/2 PM implementation does not have these constants... */ #if !defined(GL_SRC_ALPHA_SATURATE) || defined(GL_CONSTANT_COLOR) i(GL_CONSTANT_COLOR) i(GL_ONE_MINUS_CONSTANT_COLOR) i(GL_CONSTANT_ALPHA) i(GL_ONE_MINUS_CONSTANT_ALPHA) #endif i(GL_FEEDBACK) i(GL_RENDER) i(GL_SELECT) i(GL_2D) i(GL_3D) i(GL_3D_COLOR) i(GL_3D_COLOR_TEXTURE) i(GL_4D_COLOR_TEXTURE) i(GL_POINT_TOKEN) i(GL_LINE_TOKEN) i(GL_LINE_RESET_TOKEN) i(GL_POLYGON_TOKEN) i(GL_BITMAP_TOKEN) i(GL_DRAW_PIXEL_TOKEN) i(GL_COPY_PIXEL_TOKEN) i(GL_PASS_THROUGH_TOKEN) i(GL_FEEDBACK_BUFFER_SIZE) i(GL_FEEDBACK_BUFFER_TYPE) i(GL_FOG) i(GL_FOG_MODE) i(GL_FOG_DENSITY) i(GL_FOG_COLOR) i(GL_FOG_INDEX) i(GL_FOG_START) i(GL_FOG_END) i(GL_LINEAR) i(GL_EXP) i(GL_EXP2) i(GL_LOGIC_OP) i(GL_LOGIC_OP_MODE) i(GL_CLEAR) i(GL_SET) i(GL_COPY) i(GL_COPY_INVERTED) i(GL_NOOP) i(GL_INVERT) i(GL_AND) i(GL_NAND) i(GL_OR) i(GL_NOR) i(GL_XOR) i(GL_EQUIV) i(GL_AND_REVERSE) i(GL_AND_INVERTED) i(GL_OR_REVERSE) i(GL_OR_INVERTED) i(GL_STENCIL_TEST) i(GL_STENCIL_WRITEMASK) i(GL_STENCIL_BITS) i(GL_STENCIL_FUNC) i(GL_STENCIL_VALUE_MASK) i(GL_STENCIL_REF) i(GL_STENCIL_FAIL) i(GL_STENCIL_PASS_DEPTH_PASS) i(GL_STENCIL_PASS_DEPTH_FAIL) i(GL_STENCIL_CLEAR_VALUE) i(GL_STENCIL_INDEX) i(GL_KEEP) i(GL_REPLACE) i(GL_INCR) i(GL_DECR) i(GL_NONE) i(GL_LEFT) i(GL_RIGHT) i(GL_FRONT) i(GL_BACK) i(GL_FRONT_AND_BACK) i(GL_FRONT_LEFT) i(GL_FRONT_RIGHT) i(GL_BACK_LEFT) i(GL_BACK_RIGHT) i(GL_AUX0) i(GL_AUX1) i(GL_AUX2) i(GL_AUX3) i(GL_COLOR_INDEX) i(GL_RED) i(GL_GREEN) i(GL_BLUE) i(GL_ALPHA) i(GL_LUMINANCE) i(GL_LUMINANCE_ALPHA) i(GL_ALPHA_BITS) i(GL_RED_BITS) i(GL_GREEN_BITS) i(GL_BLUE_BITS) i(GL_INDEX_BITS) i(GL_SUBPIXEL_BITS) i(GL_AUX_BUFFERS) i(GL_READ_BUFFER) i(GL_DRAW_BUFFER) i(GL_DOUBLEBUFFER) i(GL_STEREO) i(GL_BITMAP) i(GL_COLOR) i(GL_DEPTH) i(GL_STENCIL) i(GL_DITHER) i(GL_RGB) i(GL_RGBA) i(GL_MAX_LIST_NESTING) i(GL_MAX_ATTRIB_STACK_DEPTH) i(GL_MAX_MODELVIEW_STACK_DEPTH) i(GL_MAX_NAME_STACK_DEPTH) i(GL_MAX_PROJECTION_STACK_DEPTH) i(GL_MAX_TEXTURE_STACK_DEPTH) i(GL_MAX_EVAL_ORDER) i(GL_MAX_LIGHTS) i(GL_MAX_CLIP_PLANES) i(GL_MAX_TEXTURE_SIZE) i(GL_MAX_PIXEL_MAP_TABLE) i(GL_MAX_VIEWPORT_DIMS) i(GL_ATTRIB_STACK_DEPTH) i(GL_CLIENT_ATTRIB_STACK_DEPTH) i(GL_COLOR_CLEAR_VALUE) i(GL_COLOR_WRITEMASK) i(GL_CURRENT_INDEX) i(GL_CURRENT_COLOR) i(GL_CURRENT_NORMAL) i(GL_CURRENT_RASTER_COLOR) i(GL_CURRENT_RASTER_DISTANCE) i(GL_CURRENT_RASTER_INDEX) i(GL_CURRENT_RASTER_POSITION) i(GL_CURRENT_RASTER_TEXTURE_COORDS) i(GL_CURRENT_RASTER_POSITION_VALID) i(GL_CURRENT_TEXTURE_COORDS) i(GL_INDEX_CLEAR_VALUE) i(GL_INDEX_MODE) i(GL_INDEX_WRITEMASK) i(GL_MODELVIEW_MATRIX) i(GL_MODELVIEW_STACK_DEPTH) i(GL_NAME_STACK_DEPTH) i(GL_PROJECTION_MATRIX) i(GL_PROJECTION_STACK_DEPTH) i(GL_RENDER_MODE) i(GL_RGBA_MODE) i(GL_TEXTURE_MATRIX) i(GL_TEXTURE_STACK_DEPTH) i(GL_VIEWPORT) i(GL_AUTO_NORMAL) i(GL_MAP1_COLOR_4) i(GL_MAP1_GRID_DOMAIN) i(GL_MAP1_GRID_SEGMENTS) i(GL_MAP1_INDEX) i(GL_MAP1_NORMAL) i(GL_MAP1_TEXTURE_COORD_1) i(GL_MAP1_TEXTURE_COORD_2) i(GL_MAP1_TEXTURE_COORD_3) i(GL_MAP1_TEXTURE_COORD_4) i(GL_MAP1_VERTEX_3) i(GL_MAP1_VERTEX_4) i(GL_MAP2_COLOR_4) i(GL_MAP2_GRID_DOMAIN) i(GL_MAP2_GRID_SEGMENTS) i(GL_MAP2_INDEX) i(GL_MAP2_NORMAL) i(GL_MAP2_TEXTURE_COORD_1) i(GL_MAP2_TEXTURE_COORD_2) i(GL_MAP2_TEXTURE_COORD_3) i(GL_MAP2_TEXTURE_COORD_4) i(GL_MAP2_VERTEX_3) i(GL_MAP2_VERTEX_4) i(GL_COEFF) i(GL_DOMAIN) i(GL_ORDER) i(GL_FOG_HINT) i(GL_LINE_SMOOTH_HINT) i(GL_PERSPECTIVE_CORRECTION_HINT) i(GL_POINT_SMOOTH_HINT) i(GL_POLYGON_SMOOTH_HINT) i(GL_DONT_CARE) i(GL_FASTEST) i(GL_NICEST) i(GL_SCISSOR_TEST) i(GL_SCISSOR_BOX) i(GL_MAP_COLOR) i(GL_MAP_STENCIL) i(GL_INDEX_SHIFT) i(GL_INDEX_OFFSET) i(GL_RED_SCALE) i(GL_RED_BIAS) i(GL_GREEN_SCALE) i(GL_GREEN_BIAS) i(GL_BLUE_SCALE) i(GL_BLUE_BIAS) i(GL_ALPHA_SCALE) i(GL_ALPHA_BIAS) i(GL_DEPTH_SCALE) i(GL_DEPTH_BIAS) i(GL_PIXEL_MAP_S_TO_S_SIZE) i(GL_PIXEL_MAP_I_TO_I_SIZE) i(GL_PIXEL_MAP_I_TO_R_SIZE) i(GL_PIXEL_MAP_I_TO_G_SIZE) i(GL_PIXEL_MAP_I_TO_B_SIZE) i(GL_PIXEL_MAP_I_TO_A_SIZE) i(GL_PIXEL_MAP_R_TO_R_SIZE) i(GL_PIXEL_MAP_G_TO_G_SIZE) i(GL_PIXEL_MAP_B_TO_B_SIZE) i(GL_PIXEL_MAP_A_TO_A_SIZE) i(GL_PIXEL_MAP_S_TO_S) i(GL_PIXEL_MAP_I_TO_I) i(GL_PIXEL_MAP_I_TO_R) i(GL_PIXEL_MAP_I_TO_G) i(GL_PIXEL_MAP_I_TO_B) i(GL_PIXEL_MAP_I_TO_A) i(GL_PIXEL_MAP_R_TO_R) i(GL_PIXEL_MAP_G_TO_G) i(GL_PIXEL_MAP_B_TO_B) i(GL_PIXEL_MAP_A_TO_A) i(GL_PACK_ALIGNMENT) i(GL_PACK_LSB_FIRST) i(GL_PACK_ROW_LENGTH) i(GL_PACK_SKIP_PIXELS) i(GL_PACK_SKIP_ROWS) i(GL_PACK_SWAP_BYTES) i(GL_UNPACK_ALIGNMENT) i(GL_UNPACK_LSB_FIRST) i(GL_UNPACK_ROW_LENGTH) i(GL_UNPACK_SKIP_PIXELS) i(GL_UNPACK_SKIP_ROWS) i(GL_UNPACK_SWAP_BYTES) i(GL_ZOOM_X) i(GL_ZOOM_Y) i(GL_TEXTURE_ENV) i(GL_TEXTURE_ENV_MODE) i(GL_TEXTURE_1D) i(GL_TEXTURE_2D) i(GL_TEXTURE_WRAP_S) i(GL_TEXTURE_WRAP_T) i(GL_TEXTURE_MAG_FILTER) i(GL_TEXTURE_MIN_FILTER) i(GL_TEXTURE_ENV_COLOR) i(GL_TEXTURE_GEN_S) i(GL_TEXTURE_GEN_T) i(GL_TEXTURE_GEN_MODE) i(GL_TEXTURE_BORDER_COLOR) i(GL_TEXTURE_WIDTH) i(GL_TEXTURE_HEIGHT) i(GL_TEXTURE_BORDER) i(GL_TEXTURE_COMPONENTS) i(GL_TEXTURE_RED_SIZE) i(GL_TEXTURE_GREEN_SIZE) i(GL_TEXTURE_BLUE_SIZE) i(GL_TEXTURE_ALPHA_SIZE) i(GL_TEXTURE_LUMINANCE_SIZE) i(GL_TEXTURE_INTENSITY_SIZE) i(GL_NEAREST_MIPMAP_NEAREST) i(GL_NEAREST_MIPMAP_LINEAR) i(GL_LINEAR_MIPMAP_NEAREST) i(GL_LINEAR_MIPMAP_LINEAR) i(GL_OBJECT_LINEAR) i(GL_OBJECT_PLANE) i(GL_EYE_LINEAR) i(GL_EYE_PLANE) i(GL_SPHERE_MAP) i(GL_DECAL) i(GL_MODULATE) i(GL_NEAREST) i(GL_REPEAT) i(GL_CLAMP) i(GL_S) i(GL_T) i(GL_R) i(GL_Q) i(GL_TEXTURE_GEN_R) i(GL_TEXTURE_GEN_Q) i(GL_VENDOR) i(GL_RENDERER) i(GL_VERSION) i(GL_EXTENSIONS) i(GL_INVALID_VALUE) i(GL_INVALID_ENUM) i(GL_INVALID_OPERATION) i(GL_STACK_OVERFLOW) i(GL_STACK_UNDERFLOW) i(GL_OUT_OF_MEMORY) #ifdef GL_VERSION_1_1 i(GL_TEXTURE_RESIDENT) i(GL_TEXTURE_BINDING_1D) i(GL_TEXTURE_BINDING_2D) i(GL_TEXTURE_PRIORITY) i(GL_PROXY_TEXTURE_1D) i(GL_PROXY_TEXTURE_2D) i(GL_FEEDBACK_BUFFER_POINTER) i(GL_VERTEX_ARRAY) i(GL_NORMAL_ARRAY) i(GL_COLOR_ARRAY) i(GL_INDEX_ARRAY) i(GL_TEXTURE_COORD_ARRAY) i(GL_EDGE_FLAG_ARRAY) i(GL_VERTEX_ARRAY_SIZE) i(GL_VERTEX_ARRAY_TYPE) i(GL_VERTEX_ARRAY_STRIDE) i(GL_NORMAL_ARRAY_TYPE) i(GL_NORMAL_ARRAY_STRIDE) i(GL_COLOR_ARRAY_SIZE) i(GL_COLOR_ARRAY_TYPE) i(GL_COLOR_ARRAY_STRIDE) i(GL_INDEX_ARRAY_TYPE) i(GL_INDEX_ARRAY_STRIDE) i(GL_TEXTURE_COORD_ARRAY_SIZE) i(GL_TEXTURE_COORD_ARRAY_TYPE) i(GL_TEXTURE_COORD_ARRAY_STRIDE) i(GL_EDGE_FLAG_ARRAY_STRIDE) i(GL_VERTEX_ARRAY_POINTER) i(GL_NORMAL_ARRAY_POINTER) i(GL_COLOR_ARRAY_POINTER) i(GL_INDEX_ARRAY_POINTER) i(GL_TEXTURE_COORD_ARRAY_POINTER) i(GL_EDGE_FLAG_ARRAY_POINTER) i(GL_POLYGON_OFFSET_FACTOR) i(GL_POLYGON_OFFSET_UNITS) i(GL_POLYGON_OFFSET_POINT) i(GL_POLYGON_OFFSET_LINE) i(GL_POLYGON_OFFSET_FILL) i(GL_INDEX_LOGIC_OP) i(GL_COLOR_LOGIC_OP) i(GL_ALPHA4) i(GL_ALPHA8) i(GL_ALPHA12) i(GL_ALPHA16) i(GL_LUMINANCE4) i(GL_LUMINANCE8) i(GL_LUMINANCE12) i(GL_LUMINANCE16) i(GL_LUMINANCE4_ALPHA4) i(GL_LUMINANCE6_ALPHA2) i(GL_LUMINANCE8_ALPHA8) i(GL_LUMINANCE12_ALPHA4) i(GL_LUMINANCE12_ALPHA12) i(GL_LUMINANCE16_ALPHA16) i(GL_INTENSITY) i(GL_INTENSITY4) i(GL_INTENSITY8) i(GL_INTENSITY12) i(GL_INTENSITY16) i(GL_R3_G3_B2) i(GL_RGB4) i(GL_RGB5) i(GL_RGB8) i(GL_RGB10) i(GL_RGB12) i(GL_RGB16) i(GL_RGBA2) i(GL_RGBA4) i(GL_RGB5_A1) i(GL_RGBA8) i(GL_RGB10_A2) i(GL_RGBA12) i(GL_RGBA16) #endif #ifdef GL_VERSION_1_2 /* ADDED in 0.55 */ #ifndef GL_R3_G3_B2_EXT #define GL_R3_G3_B2_EXT GL_R3_G3_B2 #endif #ifndef GL_MISC_BIT_EXT #define GL_MISC_BIT_EXT 0 #endif #ifndef GL_COLOR_TABLE_FORMAT_EXT #define GL_COLOR_TABLE_FORMAT_EXT GL_COLOR_TABLE_FORMAT #endif #ifndef GL_COLOR_TABLE_WIDTH_EXT #define GL_COLOR_TABLE_WIDTH_EXT GL_COLOR_TABLE_WIDTH #endif #ifndef GL_COLOR_TABLE_RED_SIZE_EXT #define GL_COLOR_TABLE_RED_SIZE_EXT GL_COLOR_TABLE_RED_SIZE #endif #ifndef GL_COLOR_TABLE_GREEN_SIZE_EXT #define GL_COLOR_TABLE_GREEN_SIZE_EXT GL_COLOR_TABLE_GREEN_SIZE #endif #ifndef GL_COLOR_TABLE_BLUE_SIZE_EXT #define GL_COLOR_TABLE_BLUE_SIZE_EXT GL_COLOR_TABLE_BLUE_SIZE #endif #ifndef GL_COLOR_TABLE_ALPHA_SIZE_EXT #define GL_COLOR_TABLE_ALPHA_SIZE_EXT GL_COLOR_TABLE_ALPHA_SIZE #endif #ifndef GL_COLOR_TABLE_LUMINANCE_SIZE_EXT #define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT GL_COLOR_TABLE_LUMINANCE_SIZE #endif #ifndef GL_COLOR_TABLE_INTENSITY_SIZE_EXT #define GL_COLOR_TABLE_INTENSITY_SIZE_EXT GL_COLOR_TABLE_INTENSITY_SIZE #endif /* Texture3D */ i(GL_PACK_SKIP_IMAGES) i(GL_PACK_IMAGE_HEIGHT) i(GL_UNPACK_SKIP_IMAGES) i(GL_UNPACK_IMAGE_HEIGHT) i(GL_TEXTURE_3D) i(GL_PROXY_TEXTURE_3D) i(GL_TEXTURE_DEPTH) i(GL_TEXTURE_WRAP_R) i(GL_MAX_3D_TEXTURE_SIZE) i(GL_TEXTURE_BINDING_3D) /* BGR */ i(GL_BGR) i(GL_BGRA) /* Packed pixels */ i(GL_UNSIGNED_BYTE_3_3_2) i(GL_UNSIGNED_BYTE_2_3_3_REV) i(GL_UNSIGNED_SHORT_5_6_5) i(GL_UNSIGNED_SHORT_5_6_5_REV) i(GL_UNSIGNED_SHORT_4_4_4_4) i(GL_UNSIGNED_SHORT_4_4_4_4_REV) i(GL_UNSIGNED_SHORT_5_5_5_1) i(GL_UNSIGNED_SHORT_1_5_5_5_REV) i(GL_UNSIGNED_INT_8_8_8_8) i(GL_UNSIGNED_INT_8_8_8_8_REV) i(GL_UNSIGNED_INT_10_10_10_2) i(GL_UNSIGNED_INT_2_10_10_10_REV) /* Rescale normals */ i(GL_RESCALE_NORMAL) /* Separate specular color */ i(GL_LIGHT_MODEL_COLOR_CONTROL) i(GL_SINGLE_COLOR) i(GL_SEPARATE_SPECULAR_COLOR) /* texture_edge_clamp */ i(GL_CLAMP_TO_EDGE) /* texture_lod */ i(GL_TEXTURE_MIN_LOD) i(GL_TEXTURE_MAX_LOD) i(GL_TEXTURE_BASE_LEVEL) i(GL_TEXTURE_MAX_LEVEL) /* draw_range_elements*/ i(GL_MAX_ELEMENTS_VERTICES) i(GL_MAX_ELEMENTS_INDICES) /* ADDED in 0.55 */ /* ErrorCode */ i(GL_NO_ERROR) /* GetTarget */ i(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH) i(GL_SELECTION_BUFFER_POINTER) i(GL_SELECTION_BUFFER_SIZE) /* GetTextureParameter */ i(GL_TEXTURE_INTERNAL_FORMAT) /* blend_color */ i(GL_BLEND_COLOR) /* blend_minmax */ i(GL_FUNC_ADD) i(GL_MIN) i(GL_MAX) i(GL_BLEND_EQUATION) /* blend_subtract */ i(GL_FUNC_SUBTRACT) i(GL_FUNC_REVERSE_SUBTRACT) /* color_matrix */ i(GL_COLOR_MATRIX) i(GL_COLOR_MATRIX_STACK_DEPTH) i(GL_MAX_COLOR_MATRIX_STACK_DEPTH) i(GL_POST_COLOR_MATRIX_RED_SCALE) i(GL_POST_COLOR_MATRIX_GREEN_SCALE) i(GL_POST_COLOR_MATRIX_BLUE_SCALE) i(GL_POST_COLOR_MATRIX_ALPHA_SCALE) i(GL_POST_COLOR_MATRIX_RED_BIAS) i(GL_POST_COLOR_MATRIX_GREEN_BIAS) i(GL_POST_COLOR_MATRIX_BLUE_BIAS) i(GL_POST_COLOR_MATRIX_ALPHA_BIAS) /* color_table */ i(GL_COLOR_TABLE) i(GL_POST_CONVOLUTION_COLOR_TABLE) i(GL_POST_COLOR_MATRIX_COLOR_TABLE) i(GL_PROXY_COLOR_TABLE) i(GL_PROXY_POST_CONVOLUTION_COLOR_TABLE) i(GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE) i(GL_COLOR_TABLE_SCALE) i(GL_COLOR_TABLE_BIAS) i(GL_COLOR_TABLE_FORMAT) i(GL_COLOR_TABLE_WIDTH) i(GL_COLOR_TABLE_RED_SIZE) i(GL_COLOR_TABLE_GREEN_SIZE) i(GL_COLOR_TABLE_BLUE_SIZE) i(GL_COLOR_TABLE_ALPHA_SIZE) i(GL_COLOR_TABLE_LUMINANCE_SIZE) i(GL_COLOR_TABLE_INTENSITY_SIZE) /* convolution */ i(GL_CONVOLUTION_1D) i(GL_CONVOLUTION_2D) i(GL_SEPARABLE_2D) i(GL_CONVOLUTION_BORDER_MODE) i(GL_CONVOLUTION_FILTER_SCALE) i(GL_CONVOLUTION_FILTER_BIAS) i(GL_REDUCE) i(GL_CONVOLUTION_FORMAT) i(GL_CONVOLUTION_WIDTH) i(GL_CONVOLUTION_HEIGHT) i(GL_MAX_CONVOLUTION_WIDTH) i(GL_MAX_CONVOLUTION_HEIGHT) i(GL_POST_CONVOLUTION_RED_SCALE) i(GL_POST_CONVOLUTION_GREEN_SCALE) i(GL_POST_CONVOLUTION_BLUE_SCALE) i(GL_POST_CONVOLUTION_ALPHA_SCALE) i(GL_POST_CONVOLUTION_RED_BIAS) i(GL_POST_CONVOLUTION_GREEN_BIAS) i(GL_POST_CONVOLUTION_BLUE_BIAS) i(GL_POST_CONVOLUTION_ALPHA_BIAS) i(GL_CONSTANT_BORDER) i(GL_REPLICATE_BORDER) i(GL_CONVOLUTION_BORDER_COLOR) /* histogram */ i(GL_HISTOGRAM) i(GL_PROXY_HISTOGRAM) i(GL_HISTOGRAM_WIDTH) i(GL_HISTOGRAM_FORMAT) i(GL_HISTOGRAM_RED_SIZE) i(GL_HISTOGRAM_GREEN_SIZE) i(GL_HISTOGRAM_BLUE_SIZE) i(GL_HISTOGRAM_ALPHA_SIZE) i(GL_HISTOGRAM_LUMINANCE_SIZE) i(GL_HISTOGRAM_SINK) i(GL_MINMAX) i(GL_MINMAX_FORMAT) i(GL_MINMAX_SINK) i(GL_TABLE_TOO_LARGE) /* GetTarget1_2 */ i(GL_SMOOTH_POINT_SIZE_RANGE) i(GL_SMOOTH_POINT_SIZE_GRANULARITY) i(GL_SMOOTH_LINE_WIDTH_RANGE) i(GL_SMOOTH_LINE_WIDTH_GRANULARITY) i(GL_ALIASED_POINT_SIZE_RANGE) i(GL_ALIASED_LINE_WIDTH_RANGE) /* multitexture */ i(GL_TEXTURE0_ARB) i(GL_TEXTURE1_ARB) i(GL_TEXTURE2_ARB) i(GL_TEXTURE3_ARB) i(GL_TEXTURE4_ARB) i(GL_TEXTURE5_ARB) i(GL_TEXTURE6_ARB) i(GL_TEXTURE7_ARB) i(GL_TEXTURE8_ARB) i(GL_TEXTURE9_ARB) i(GL_TEXTURE10_ARB) i(GL_TEXTURE11_ARB) i(GL_TEXTURE12_ARB) i(GL_TEXTURE13_ARB) i(GL_TEXTURE14_ARB) i(GL_TEXTURE15_ARB) i(GL_TEXTURE16_ARB) i(GL_TEXTURE17_ARB) i(GL_TEXTURE18_ARB) i(GL_TEXTURE19_ARB) i(GL_TEXTURE20_ARB) i(GL_TEXTURE21_ARB) i(GL_TEXTURE22_ARB) i(GL_TEXTURE23_ARB) i(GL_TEXTURE24_ARB) i(GL_TEXTURE25_ARB) i(GL_TEXTURE26_ARB) i(GL_TEXTURE27_ARB) i(GL_TEXTURE28_ARB) i(GL_TEXTURE29_ARB) i(GL_TEXTURE30_ARB) i(GL_TEXTURE31_ARB) i(GL_ACTIVE_TEXTURE_ARB) i(GL_CLIENT_ACTIVE_TEXTURE_ARB) i(GL_MAX_TEXTURE_UNITS_ARB) #endif /* 2, see 37 */ /* 3 */ #if defined(GL_EXT_polygon_offset) i(GL_POLYGON_OFFSET_EXT) i(GL_POLYGON_OFFSET_FACTOR_EXT) i(GL_POLYGON_OFFSET_BIAS_EXT) #endif /* 4 */ #ifdef GL_EXT_texture i(GL_ALPHA4_EXT) i(GL_ALPHA8_EXT) i(GL_ALPHA12_EXT) i(GL_ALPHA16_EXT) i(GL_LUMINANCE4_EXT) i(GL_LUMINANCE8_EXT) i(GL_LUMINANCE12_EXT) i(GL_LUMINANCE16_EXT) i(GL_LUMINANCE4_ALPHA4_EXT) i(GL_LUMINANCE6_ALPHA2_EXT) i(GL_LUMINANCE8_ALPHA8_EXT) i(GL_LUMINANCE12_ALPHA4_EXT) i(GL_LUMINANCE12_ALPHA12_EXT) i(GL_LUMINANCE16_ALPHA16_EXT) i(GL_INTENSITY_EXT) i(GL_INTENSITY4_EXT) i(GL_INTENSITY8_EXT) i(GL_INTENSITY12_EXT) i(GL_INTENSITY16_EXT) i(GL_R3_G3_B2_EXT) i(GL_RGB4_EXT) i(GL_RGB5_EXT) i(GL_RGB8_EXT) i(GL_RGB10_EXT) i(GL_RGB12_EXT) i(GL_RGB16_EXT) i(GL_RGBA2_EXT) i(GL_RGBA4_EXT) i(GL_RGB5_A1_EXT) i(GL_RGBA8_EXT) i(GL_RGB10_A2_EXT) i(GL_RGBA12_EXT) i(GL_RGBA16_EXT) i(GL_TEXTURE_RED_SIZE_EXT) i(GL_TEXTURE_GREEN_SIZE_EXT) i(GL_TEXTURE_BLUE_SIZE_EXT) i(GL_TEXTURE_ALPHA_SIZE_EXT) i(GL_TEXTURE_LUMINANCE_SIZE_EXT) i(GL_TEXTURE_INTENSITY_SIZE_EXT) i(GL_REPLACE_EXT) i(GL_PROXY_TEXTURE_1D) i(GL_PROXY_TEXTURE_2D) i(GL_TEXTURE_TOO_LARGE_EXT) #endif /* 18 */ #ifdef GL_EXT_cmyka i(GL_CMYK_EXT) i(GL_CMYKA_EXT) i(GL_PACK_CMYK_HINT_EXT) i(GL_UNPACK_CMYK_HINT_EXT) i(GL_CMYK) i(GL_CMYKA) i(GL_PACK_CMYK_HINT) i(GL_UNPACK_CMYK_HINT) #endif /* 20 */ #ifdef GL_EXT_texture_object i(GL_TEXTURE_PRIORITY_EXT) i(GL_TEXTURE_RESIDENT_EXT) i(GL_TEXTURE_1D_BINDING_EXT) i(GL_TEXTURE_2D_BINDING_EXT) # ifdef GL_TEXTURE_3D_BINDING_EXT /* GL_EXT_texture3D - A hack for Solaris */ i(GL_TEXTURE_3D_BINDING_EXT) # endif #endif /* 30 */ #if defined(GL_EXT_vertex_array) i(GL_VERTEX_ARRAY_EXT) i(GL_NORMAL_ARRAY_EXT) i(GL_COLOR_ARRAY_EXT) i(GL_INDEX_ARRAY_EXT) i(GL_TEXTURE_COORD_ARRAY_EXT) i(GL_EDGE_FLAG_ARRAY_EXT) i(GL_VERTEX_ARRAY_SIZE_EXT) i(GL_VERTEX_ARRAY_TYPE_EXT) i(GL_VERTEX_ARRAY_STRIDE_EXT) i(GL_NORMAL_ARRAY_TYPE_EXT) i(GL_NORMAL_ARRAY_STRIDE_EXT) i(GL_COLOR_ARRAY_SIZE_EXT) i(GL_COLOR_ARRAY_TYPE_EXT) i(GL_COLOR_ARRAY_STRIDE_EXT) i(GL_INDEX_ARRAY_TYPE_EXT) i(GL_INDEX_ARRAY_STRIDE_EXT) i(GL_TEXTURE_COORD_ARRAY_SIZE_EXT) i(GL_TEXTURE_COORD_ARRAY_TYPE_EXT) i(GL_TEXTURE_COORD_ARRAY_STRIDE_EXT) i(GL_EDGE_FLAG_ARRAY_STRIDE_EXT) i(GL_VERTEX_ARRAY_POINTER_EXT) i(GL_NORMAL_ARRAY_POINTER_EXT) i(GL_COLOR_ARRAY_POINTER_EXT) i(GL_INDEX_ARRAY_POINTER_EXT) i(GL_TEXTURE_COORD_ARRAY_POINTER_EXT) i(GL_EDGE_FLAG_ARRAY_POINTER_EXT) # ifndef GL_EXT_vertex_array_is_faked i(GL_VERTEX_ARRAY_COUNT_EXT) i(GL_NORMAL_ARRAY_COUNT_EXT) i(GL_COLOR_ARRAY_COUNT_EXT) i(GL_INDEX_ARRAY_COUNT_EXT) i(GL_TEXTURE_COORD_ARRAY_COUNT_EXT) i(GL_EDGE_FLAG_ARRAY_COUNT_EXT) # endif #endif /* 31 */ #ifdef GL_EXT_misc_attribute i(GL_MISC_BIT_EXT) #endif /* 37 & 2 */ #if defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_color) i(GL_CONSTANT_COLOR_EXT) i(GL_ONE_MINUS_CONSTANT_COLOR_EXT) i(GL_CONSTANT_ALPHA_EXT) i(GL_ONE_MINUS_CONSTANT_ALPHA_EXT) i(GL_BLEND_EQUATION_EXT) i(GL_MIN_EXT) i(GL_MAX_EXT) i(GL_FUNC_ADD_EXT) i(GL_FUNC_SUBTRACT_EXT) i(GL_FUNC_REVERSE_SUBTRACT_EXT) i(GL_BLEND_COLOR_EXT) #endif /* 44 */ #ifdef GL_EXT_abgr i(GL_ABGR_EXT) #endif /* 79 */ #if defined(GL_EXT_clip_volume_hint) && defined(GL_VOLUME_CLIPPING_HINT_EXT) i(GL_VOLUME_CLIPPING_HINT_EXT) #endif #if defined(GL_EXT_texture_priority) i(GL_TEXTURE_PRIORITY_EXT) i(GL_TEXTURE_RESIDENT_EXT) i(GL_TEXTURE_1D_BINDING_EXT) i(GL_TEXTURE_2D_BINDING_EXT) #endif #if defined(GL_EXT_texture3D) i(GL_PACK_SKIP_IMAGES_EXT) i(GL_PACK_IMAGE_HEIGHT_EXT) i(GL_UNPACK_SKIP_IMAGES_EXT) i(GL_UNPACK_IMAGE_HEIGHT_EXT) i(GL_TEXTURE_3D_EXT) i(GL_PROXY_TEXTURE_3D_EXT) i(GL_TEXTURE_DEPTH_EXT) i(GL_TEXTURE_WRAP_R_EXT) i(GL_MAX_3D_TEXTURE_SIZE_EXT) # ifdef GL_TEXTURE_3D_BINDING_EXT /* GL_EXT_texture3D - A hack for Solaris */ i(GL_TEXTURE_3D_BINDING_EXT) # endif #endif #if defined(GL_EXT_paletted_texture) i(GL_TABLE_TOO_LARGE_EXT) i(GL_COLOR_TABLE_FORMAT_EXT) i(GL_COLOR_TABLE_WIDTH_EXT) i(GL_COLOR_TABLE_RED_SIZE_EXT) i(GL_COLOR_TABLE_GREEN_SIZE_EXT) i(GL_COLOR_TABLE_BLUE_SIZE_EXT) i(GL_COLOR_TABLE_ALPHA_SIZE_EXT) i(GL_COLOR_TABLE_LUMINANCE_SIZE_EXT) i(GL_COLOR_TABLE_INTENSITY_SIZE_EXT) i(GL_TEXTURE_INDEX_SIZE_EXT) i(GL_COLOR_INDEX1_EXT) i(GL_COLOR_INDEX2_EXT) i(GL_COLOR_INDEX4_EXT) i(GL_COLOR_INDEX8_EXT) i(GL_COLOR_INDEX12_EXT) i(GL_COLOR_INDEX16_EXT) #endif #if defined(GL_EXT_shared_texture_palette) i(GL_SHARED_TEXTURE_PALETTE_EXT) #endif #if defined(GL_EXT_point_parameters) i(GL_POINT_SIZE_MIN_EXT) i(GL_POINT_SIZE_MAX_EXT) i(GL_POINT_FADE_THRESHOLD_SIZE_EXT) i(GL_DISTANCE_ATTENUATION_EXT) #endif #if defined(GL_EXT_Cg_shader) i(GL_CG_VERTEX_SHADER_EXT) i(GL_CG_FRAGMENT_SHADER_EXT) #endif /* ADDED in 0.55 */ #if defined(GL_EXT_texture_env_combine) i(GL_COMBINE_EXT) i(GL_COMBINE_RGB_EXT) i(GL_COMBINE_ALPHA_EXT) i(GL_RGB_SCALE_EXT) i(GL_ADD_SIGNED_EXT) i(GL_INTERPOLATE_EXT) i(GL_CONSTANT_EXT) i(GL_PRIMARY_COLOR_EXT) i(GL_PREVIOUS_EXT) i(GL_SOURCE0_RGB_EXT) i(GL_SOURCE1_RGB_EXT) i(GL_SOURCE2_RGB_EXT) i(GL_SOURCE0_ALPHA_EXT) i(GL_SOURCE1_ALPHA_EXT) i(GL_SOURCE2_ALPHA_EXT) i(GL_OPERAND0_RGB_EXT) i(GL_OPERAND1_RGB_EXT) i(GL_OPERAND2_RGB_EXT) i(GL_OPERAND0_ALPHA_EXT) i(GL_OPERAND1_ALPHA_EXT) i(GL_OPERAND2_ALPHA_EXT) #endif /* FROM glext_procs.h */ #if defined(__glext_procs_h_) i(GL_GLEXT_VERSION) i(GL_SMOOTH_POINT_SIZE_RANGE) i(GL_SMOOTH_POINT_SIZE_GRANULARITY) i(GL_SMOOTH_LINE_WIDTH_RANGE) i(GL_SMOOTH_LINE_WIDTH_GRANULARITY) i(GL_ALIASED_POINT_SIZE_RANGE) i(GL_ALIASED_LINE_WIDTH_RANGE) i(GL_BLEND_COLOR) i(GL_FUNC_ADD) i(GL_MIN) i(GL_MAX) i(GL_BLEND_EQUATION) i(GL_FUNC_SUBTRACT) i(GL_FUNC_REVERSE_SUBTRACT) i(GL_CONVOLUTION_1D) i(GL_CONVOLUTION_2D) i(GL_SEPARABLE_2D) i(GL_CONVOLUTION_BORDER_MODE) i(GL_CONVOLUTION_FILTER_SCALE) i(GL_CONVOLUTION_FILTER_BIAS) i(GL_REDUCE) i(GL_CONVOLUTION_FORMAT) i(GL_CONVOLUTION_WIDTH) i(GL_CONVOLUTION_HEIGHT) i(GL_MAX_CONVOLUTION_WIDTH) i(GL_MAX_CONVOLUTION_HEIGHT) i(GL_POST_CONVOLUTION_RED_SCALE) i(GL_POST_CONVOLUTION_GREEN_SCALE) i(GL_POST_CONVOLUTION_BLUE_SCALE) i(GL_POST_CONVOLUTION_ALPHA_SCALE) i(GL_POST_CONVOLUTION_RED_BIAS) i(GL_POST_CONVOLUTION_GREEN_BIAS) i(GL_POST_CONVOLUTION_BLUE_BIAS) i(GL_POST_CONVOLUTION_ALPHA_BIAS) i(GL_HISTOGRAM) i(GL_PROXY_HISTOGRAM) i(GL_HISTOGRAM_WIDTH) i(GL_HISTOGRAM_FORMAT) i(GL_HISTOGRAM_RED_SIZE) i(GL_HISTOGRAM_GREEN_SIZE) i(GL_HISTOGRAM_BLUE_SIZE) i(GL_HISTOGRAM_ALPHA_SIZE) i(GL_HISTOGRAM_LUMINANCE_SIZE) i(GL_HISTOGRAM_SINK) i(GL_MINMAX) i(GL_MINMAX_FORMAT) i(GL_MINMAX_SINK) i(GL_TABLE_TOO_LARGE) i(GL_COLOR_MATRIX) i(GL_COLOR_MATRIX_STACK_DEPTH) i(GL_MAX_COLOR_MATRIX_STACK_DEPTH) i(GL_POST_COLOR_MATRIX_RED_SCALE) i(GL_POST_COLOR_MATRIX_GREEN_SCALE) i(GL_POST_COLOR_MATRIX_BLUE_SCALE) i(GL_POST_COLOR_MATRIX_ALPHA_SCALE) i(GL_POST_COLOR_MATRIX_RED_BIAS) i(GL_POST_COLOR_MATRIX_GREEN_BIAS) i(GL_POST_COLOR_MATRIX_BLUE_BIAS) i(GL_POST_COLOR_MATRIX_ALPHA_BIAS) i(GL_COLOR_TABLE) i(GL_POST_CONVOLUTION_COLOR_TABLE) i(GL_POST_COLOR_MATRIX_COLOR_TABLE) i(GL_PROXY_COLOR_TABLE) i(GL_PROXY_POST_CONVOLUTION_COLOR_TABLE) i(GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE) i(GL_COLOR_TABLE_SCALE) i(GL_COLOR_TABLE_BIAS) i(GL_COLOR_TABLE_FORMAT) i(GL_COLOR_TABLE_WIDTH) i(GL_COLOR_TABLE_RED_SIZE) i(GL_COLOR_TABLE_GREEN_SIZE) i(GL_COLOR_TABLE_BLUE_SIZE) i(GL_COLOR_TABLE_ALPHA_SIZE) i(GL_COLOR_TABLE_LUMINANCE_SIZE) i(GL_COLOR_TABLE_INTENSITY_SIZE) i(GL_CONSTANT_BORDER) i(GL_REPLICATE_BORDER) i(GL_CONVOLUTION_BORDER_COLOR) i(GL_TEXTURE0) i(GL_TEXTURE1) i(GL_TEXTURE2) i(GL_TEXTURE3) i(GL_TEXTURE4) i(GL_TEXTURE5) i(GL_TEXTURE6) i(GL_TEXTURE7) i(GL_TEXTURE8) i(GL_TEXTURE9) i(GL_TEXTURE10) i(GL_TEXTURE11) i(GL_TEXTURE12) i(GL_TEXTURE13) i(GL_TEXTURE14) i(GL_TEXTURE15) i(GL_TEXTURE16) i(GL_TEXTURE17) i(GL_TEXTURE18) i(GL_TEXTURE19) i(GL_TEXTURE20) i(GL_TEXTURE21) i(GL_TEXTURE22) i(GL_TEXTURE23) i(GL_TEXTURE24) i(GL_TEXTURE25) i(GL_TEXTURE26) i(GL_TEXTURE27) i(GL_TEXTURE28) i(GL_TEXTURE29) i(GL_TEXTURE30) i(GL_TEXTURE31) i(GL_ACTIVE_TEXTURE) i(GL_CLIENT_ACTIVE_TEXTURE) i(GL_MAX_TEXTURE_UNITS) i(GL_TRANSPOSE_MODELVIEW_MATRIX) i(GL_TRANSPOSE_PROJECTION_MATRIX) i(GL_TRANSPOSE_TEXTURE_MATRIX) i(GL_TRANSPOSE_COLOR_MATRIX) i(GL_MULTISAMPLE) i(GL_SAMPLE_ALPHA_TO_COVERAGE) i(GL_SAMPLE_ALPHA_TO_ONE) i(GL_SAMPLE_COVERAGE) i(GL_SAMPLE_BUFFERS) i(GL_SAMPLES) i(GL_SAMPLE_COVERAGE_VALUE) i(GL_SAMPLE_COVERAGE_INVERT) i(GL_MULTISAMPLE_BIT) i(GL_NORMAL_MAP) i(GL_REFLECTION_MAP) i(GL_TEXTURE_CUBE_MAP) i(GL_TEXTURE_BINDING_CUBE_MAP) i(GL_TEXTURE_CUBE_MAP_POSITIVE_X) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_X) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Y) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Z) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) i(GL_PROXY_TEXTURE_CUBE_MAP) i(GL_MAX_CUBE_MAP_TEXTURE_SIZE) i(GL_COMPRESSED_ALPHA) i(GL_COMPRESSED_LUMINANCE) i(GL_COMPRESSED_LUMINANCE_ALPHA) i(GL_COMPRESSED_INTENSITY) i(GL_COMPRESSED_RGB) i(GL_COMPRESSED_RGBA) i(GL_TEXTURE_COMPRESSION_HINT) i(GL_TEXTURE_COMPRESSED_IMAGE_SIZE) i(GL_TEXTURE_COMPRESSED) i(GL_NUM_COMPRESSED_TEXTURE_FORMATS) i(GL_COMPRESSED_TEXTURE_FORMATS) i(GL_CLAMP_TO_BORDER) i(GL_COMBINE) i(GL_COMBINE_RGB) i(GL_COMBINE_ALPHA) i(GL_SOURCE0_RGB) i(GL_SOURCE1_RGB) i(GL_SOURCE2_RGB) i(GL_SOURCE0_ALPHA) i(GL_SOURCE1_ALPHA) i(GL_SOURCE2_ALPHA) i(GL_OPERAND0_RGB) i(GL_OPERAND1_RGB) i(GL_OPERAND2_RGB) i(GL_OPERAND0_ALPHA) i(GL_OPERAND1_ALPHA) i(GL_OPERAND2_ALPHA) i(GL_RGB_SCALE) i(GL_ADD_SIGNED) i(GL_INTERPOLATE) i(GL_SUBTRACT) i(GL_CONSTANT) i(GL_PRIMARY_COLOR) i(GL_PREVIOUS) i(GL_DOT3_RGB) i(GL_DOT3_RGBA) i(GL_BLEND_DST_RGB) i(GL_BLEND_SRC_RGB) i(GL_BLEND_DST_ALPHA) i(GL_BLEND_SRC_ALPHA) i(GL_POINT_SIZE_MIN) i(GL_POINT_SIZE_MAX) i(GL_POINT_FADE_THRESHOLD_SIZE) i(GL_POINT_DISTANCE_ATTENUATION) i(GL_GENERATE_MIPMAP) i(GL_GENERATE_MIPMAP_HINT) i(GL_DEPTH_COMPONENT16) i(GL_DEPTH_COMPONENT24) i(GL_DEPTH_COMPONENT32) i(GL_MIRRORED_REPEAT) i(GL_FOG_COORDINATE_SOURCE) i(GL_FOG_COORDINATE) i(GL_FRAGMENT_DEPTH) i(GL_CURRENT_FOG_COORDINATE) i(GL_FOG_COORDINATE_ARRAY_TYPE) i(GL_FOG_COORDINATE_ARRAY_STRIDE) i(GL_FOG_COORDINATE_ARRAY_POINTER) i(GL_FOG_COORDINATE_ARRAY) i(GL_COLOR_SUM) i(GL_CURRENT_SECONDARY_COLOR) i(GL_SECONDARY_COLOR_ARRAY_SIZE) i(GL_SECONDARY_COLOR_ARRAY_TYPE) i(GL_SECONDARY_COLOR_ARRAY_STRIDE) i(GL_SECONDARY_COLOR_ARRAY_POINTER) i(GL_SECONDARY_COLOR_ARRAY) i(GL_MAX_TEXTURE_LOD_BIAS) i(GL_TEXTURE_FILTER_CONTROL) i(GL_TEXTURE_LOD_BIAS) i(GL_INCR_WRAP) i(GL_DECR_WRAP) i(GL_TEXTURE_DEPTH_SIZE) i(GL_DEPTH_TEXTURE_MODE) i(GL_TEXTURE_COMPARE_MODE) i(GL_TEXTURE_COMPARE_FUNC) i(GL_COMPARE_R_TO_TEXTURE) i(GL_BUFFER_SIZE) i(GL_BUFFER_USAGE) i(GL_QUERY_COUNTER_BITS) i(GL_CURRENT_QUERY) i(GL_QUERY_RESULT) i(GL_QUERY_RESULT_AVAILABLE) i(GL_ARRAY_BUFFER) i(GL_ELEMENT_ARRAY_BUFFER) i(GL_ARRAY_BUFFER_BINDING) i(GL_ELEMENT_ARRAY_BUFFER_BINDING) i(GL_VERTEX_ARRAY_BUFFER_BINDING) i(GL_NORMAL_ARRAY_BUFFER_BINDING) i(GL_COLOR_ARRAY_BUFFER_BINDING) i(GL_INDEX_ARRAY_BUFFER_BINDING) i(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING) i(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING) i(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING) i(GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING) i(GL_WEIGHT_ARRAY_BUFFER_BINDING) i(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) i(GL_READ_ONLY) i(GL_WRITE_ONLY) i(GL_READ_WRITE) i(GL_BUFFER_ACCESS) i(GL_BUFFER_MAPPED) i(GL_BUFFER_MAP_POINTER) i(GL_STREAM_DRAW) i(GL_STREAM_READ) i(GL_STREAM_COPY) i(GL_STATIC_DRAW) i(GL_STATIC_READ) i(GL_STATIC_COPY) i(GL_DYNAMIC_DRAW) i(GL_DYNAMIC_READ) i(GL_DYNAMIC_COPY) i(GL_SAMPLES_PASSED) i(GL_FOG_COORD_SRC) i(GL_FOG_COORD) i(GL_CURRENT_FOG_COORD) i(GL_FOG_COORD_ARRAY_TYPE) i(GL_FOG_COORD_ARRAY_STRIDE) i(GL_FOG_COORD_ARRAY_POINTER) i(GL_FOG_COORD_ARRAY) i(GL_FOG_COORD_ARRAY_BUFFER_BINDING) i(GL_SRC0_RGB) i(GL_SRC1_RGB) i(GL_SRC2_RGB) i(GL_SRC0_ALPHA) i(GL_SRC1_ALPHA) i(GL_SRC2_ALPHA) i(GL_BLEND_EQUATION_RGB) i(GL_VERTEX_ATTRIB_ARRAY_ENABLED) i(GL_VERTEX_ATTRIB_ARRAY_SIZE) i(GL_VERTEX_ATTRIB_ARRAY_STRIDE) i(GL_VERTEX_ATTRIB_ARRAY_TYPE) i(GL_CURRENT_VERTEX_ATTRIB) i(GL_VERTEX_PROGRAM_POINT_SIZE) i(GL_VERTEX_PROGRAM_TWO_SIDE) i(GL_VERTEX_ATTRIB_ARRAY_POINTER) i(GL_STENCIL_BACK_FUNC) i(GL_STENCIL_BACK_FAIL) i(GL_STENCIL_BACK_PASS_DEPTH_FAIL) i(GL_STENCIL_BACK_PASS_DEPTH_PASS) i(GL_MAX_DRAW_BUFFERS) i(GL_DRAW_BUFFER0) i(GL_DRAW_BUFFER1) i(GL_DRAW_BUFFER2) i(GL_DRAW_BUFFER3) i(GL_DRAW_BUFFER4) i(GL_DRAW_BUFFER5) i(GL_DRAW_BUFFER6) i(GL_DRAW_BUFFER7) i(GL_DRAW_BUFFER8) i(GL_DRAW_BUFFER9) i(GL_DRAW_BUFFER10) i(GL_DRAW_BUFFER11) i(GL_DRAW_BUFFER12) i(GL_DRAW_BUFFER13) i(GL_DRAW_BUFFER14) i(GL_DRAW_BUFFER15) i(GL_BLEND_EQUATION_ALPHA) i(GL_POINT_SPRITE) i(GL_COORD_REPLACE) i(GL_MAX_VERTEX_ATTRIBS) i(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED) i(GL_MAX_TEXTURE_COORDS) i(GL_MAX_TEXTURE_IMAGE_UNITS) i(GL_FRAGMENT_SHADER) i(GL_VERTEX_SHADER) i(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS) i(GL_MAX_VERTEX_UNIFORM_COMPONENTS) i(GL_MAX_VARYING_FLOATS) i(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS) i(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS) i(GL_SHADER_TYPE) i(GL_FLOAT_VEC2) i(GL_FLOAT_VEC3) i(GL_FLOAT_VEC4) i(GL_INT_VEC2) i(GL_INT_VEC3) i(GL_INT_VEC4) i(GL_BOOL) i(GL_BOOL_VEC2) i(GL_BOOL_VEC3) i(GL_BOOL_VEC4) i(GL_FLOAT_MAT2) i(GL_FLOAT_MAT3) i(GL_FLOAT_MAT4) i(GL_SAMPLER_1D) i(GL_SAMPLER_2D) i(GL_SAMPLER_3D) i(GL_SAMPLER_CUBE) i(GL_SAMPLER_1D_SHADOW) i(GL_SAMPLER_2D_SHADOW) i(GL_DELETE_STATUS) i(GL_COMPILE_STATUS) i(GL_LINK_STATUS) i(GL_VALIDATE_STATUS) i(GL_INFO_LOG_LENGTH) i(GL_ATTACHED_SHADERS) i(GL_ACTIVE_UNIFORMS) i(GL_ACTIVE_UNIFORM_MAX_LENGTH) i(GL_SHADER_SOURCE_LENGTH) i(GL_ACTIVE_ATTRIBUTES) i(GL_ACTIVE_ATTRIBUTE_MAX_LENGTH) i(GL_FRAGMENT_SHADER_DERIVATIVE_HINT) i(GL_SHADING_LANGUAGE_VERSION) i(GL_CURRENT_PROGRAM) i(GL_POINT_SPRITE_COORD_ORIGIN) i(GL_LOWER_LEFT) i(GL_UPPER_LEFT) i(GL_STENCIL_BACK_REF) i(GL_STENCIL_BACK_VALUE_MASK) i(GL_STENCIL_BACK_WRITEMASK) i(GL_TEXTURE0_ARB) i(GL_TEXTURE1_ARB) i(GL_TEXTURE2_ARB) i(GL_TEXTURE3_ARB) i(GL_TEXTURE4_ARB) i(GL_TEXTURE5_ARB) i(GL_TEXTURE6_ARB) i(GL_TEXTURE7_ARB) i(GL_TEXTURE8_ARB) i(GL_TEXTURE9_ARB) i(GL_TEXTURE10_ARB) i(GL_TEXTURE11_ARB) i(GL_TEXTURE12_ARB) i(GL_TEXTURE13_ARB) i(GL_TEXTURE14_ARB) i(GL_TEXTURE15_ARB) i(GL_TEXTURE16_ARB) i(GL_TEXTURE17_ARB) i(GL_TEXTURE18_ARB) i(GL_TEXTURE19_ARB) i(GL_TEXTURE20_ARB) i(GL_TEXTURE21_ARB) i(GL_TEXTURE22_ARB) i(GL_TEXTURE23_ARB) i(GL_TEXTURE24_ARB) i(GL_TEXTURE25_ARB) i(GL_TEXTURE26_ARB) i(GL_TEXTURE27_ARB) i(GL_TEXTURE28_ARB) i(GL_TEXTURE29_ARB) i(GL_TEXTURE30_ARB) i(GL_TEXTURE31_ARB) i(GL_ACTIVE_TEXTURE_ARB) i(GL_CLIENT_ACTIVE_TEXTURE_ARB) i(GL_MAX_TEXTURE_UNITS_ARB) i(GL_TRANSPOSE_MODELVIEW_MATRIX_ARB) i(GL_TRANSPOSE_PROJECTION_MATRIX_ARB) i(GL_TRANSPOSE_TEXTURE_MATRIX_ARB) i(GL_TRANSPOSE_COLOR_MATRIX_ARB) i(GL_MULTISAMPLE_ARB) i(GL_SAMPLE_ALPHA_TO_COVERAGE_ARB) i(GL_SAMPLE_ALPHA_TO_ONE_ARB) i(GL_SAMPLE_COVERAGE_ARB) i(GL_SAMPLE_BUFFERS_ARB) i(GL_SAMPLES_ARB) i(GL_SAMPLE_COVERAGE_VALUE_ARB) i(GL_SAMPLE_COVERAGE_INVERT_ARB) i(GL_MULTISAMPLE_BIT_ARB) i(GL_NORMAL_MAP_ARB) i(GL_REFLECTION_MAP_ARB) i(GL_TEXTURE_CUBE_MAP_ARB) i(GL_TEXTURE_BINDING_CUBE_MAP_ARB) i(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB) i(GL_PROXY_TEXTURE_CUBE_MAP_ARB) i(GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB) i(GL_COMPRESSED_ALPHA_ARB) i(GL_COMPRESSED_LUMINANCE_ARB) i(GL_COMPRESSED_LUMINANCE_ALPHA_ARB) i(GL_COMPRESSED_INTENSITY_ARB) i(GL_COMPRESSED_RGB_ARB) i(GL_COMPRESSED_RGBA_ARB) i(GL_TEXTURE_COMPRESSION_HINT_ARB) i(GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB) i(GL_TEXTURE_COMPRESSED_ARB) i(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB) i(GL_COMPRESSED_TEXTURE_FORMATS_ARB) i(GL_CLAMP_TO_BORDER_ARB) i(GL_POINT_SIZE_MIN_ARB) i(GL_POINT_SIZE_MAX_ARB) i(GL_POINT_FADE_THRESHOLD_SIZE_ARB) i(GL_POINT_DISTANCE_ATTENUATION_ARB) i(GL_MAX_VERTEX_UNITS_ARB) i(GL_ACTIVE_VERTEX_UNITS_ARB) i(GL_WEIGHT_SUM_UNITY_ARB) i(GL_VERTEX_BLEND_ARB) i(GL_CURRENT_WEIGHT_ARB) i(GL_WEIGHT_ARRAY_TYPE_ARB) i(GL_WEIGHT_ARRAY_STRIDE_ARB) i(GL_WEIGHT_ARRAY_SIZE_ARB) i(GL_WEIGHT_ARRAY_POINTER_ARB) i(GL_WEIGHT_ARRAY_ARB) i(GL_MODELVIEW0_ARB) i(GL_MODELVIEW1_ARB) i(GL_MODELVIEW2_ARB) i(GL_MODELVIEW3_ARB) i(GL_MODELVIEW4_ARB) i(GL_MODELVIEW5_ARB) i(GL_MODELVIEW6_ARB) i(GL_MODELVIEW7_ARB) i(GL_MODELVIEW8_ARB) i(GL_MODELVIEW9_ARB) i(GL_MODELVIEW10_ARB) i(GL_MODELVIEW11_ARB) i(GL_MODELVIEW12_ARB) i(GL_MODELVIEW13_ARB) i(GL_MODELVIEW14_ARB) i(GL_MODELVIEW15_ARB) i(GL_MODELVIEW16_ARB) i(GL_MODELVIEW17_ARB) i(GL_MODELVIEW18_ARB) i(GL_MODELVIEW19_ARB) i(GL_MODELVIEW20_ARB) i(GL_MODELVIEW21_ARB) i(GL_MODELVIEW22_ARB) i(GL_MODELVIEW23_ARB) i(GL_MODELVIEW24_ARB) i(GL_MODELVIEW25_ARB) i(GL_MODELVIEW26_ARB) i(GL_MODELVIEW27_ARB) i(GL_MODELVIEW28_ARB) i(GL_MODELVIEW29_ARB) i(GL_MODELVIEW30_ARB) i(GL_MODELVIEW31_ARB) i(GL_MATRIX_PALETTE_ARB) i(GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB) i(GL_MAX_PALETTE_MATRICES_ARB) i(GL_CURRENT_PALETTE_MATRIX_ARB) i(GL_MATRIX_INDEX_ARRAY_ARB) i(GL_CURRENT_MATRIX_INDEX_ARB) i(GL_MATRIX_INDEX_ARRAY_SIZE_ARB) i(GL_MATRIX_INDEX_ARRAY_TYPE_ARB) i(GL_MATRIX_INDEX_ARRAY_STRIDE_ARB) i(GL_MATRIX_INDEX_ARRAY_POINTER_ARB) i(GL_COMBINE_ARB) i(GL_COMBINE_RGB_ARB) i(GL_COMBINE_ALPHA_ARB) i(GL_SOURCE0_RGB_ARB) i(GL_SOURCE1_RGB_ARB) i(GL_SOURCE2_RGB_ARB) i(GL_SOURCE0_ALPHA_ARB) i(GL_SOURCE1_ALPHA_ARB) i(GL_SOURCE2_ALPHA_ARB) i(GL_OPERAND0_RGB_ARB) i(GL_OPERAND1_RGB_ARB) i(GL_OPERAND2_RGB_ARB) i(GL_OPERAND0_ALPHA_ARB) i(GL_OPERAND1_ALPHA_ARB) i(GL_OPERAND2_ALPHA_ARB) i(GL_RGB_SCALE_ARB) i(GL_ADD_SIGNED_ARB) i(GL_INTERPOLATE_ARB) i(GL_SUBTRACT_ARB) i(GL_CONSTANT_ARB) i(GL_PRIMARY_COLOR_ARB) i(GL_PREVIOUS_ARB) i(GL_DOT3_RGB_ARB) i(GL_DOT3_RGBA_ARB) i(GL_MIRRORED_REPEAT_ARB) i(GL_DEPTH_COMPONENT16_ARB) i(GL_DEPTH_COMPONENT24_ARB) i(GL_DEPTH_COMPONENT32_ARB) i(GL_TEXTURE_DEPTH_SIZE_ARB) i(GL_DEPTH_TEXTURE_MODE_ARB) i(GL_TEXTURE_COMPARE_MODE_ARB) i(GL_TEXTURE_COMPARE_FUNC_ARB) i(GL_COMPARE_R_TO_TEXTURE_ARB) i(GL_TEXTURE_COMPARE_FAIL_VALUE_ARB) i(GL_COLOR_SUM_ARB) i(GL_VERTEX_PROGRAM_ARB) i(GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB) i(GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB) i(GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB) i(GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB) i(GL_CURRENT_VERTEX_ATTRIB_ARB) i(GL_PROGRAM_LENGTH_ARB) i(GL_PROGRAM_STRING_ARB) i(GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB) i(GL_MAX_PROGRAM_MATRICES_ARB) i(GL_CURRENT_MATRIX_STACK_DEPTH_ARB) i(GL_CURRENT_MATRIX_ARB) i(GL_VERTEX_PROGRAM_POINT_SIZE_ARB) i(GL_VERTEX_PROGRAM_TWO_SIDE_ARB) i(GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB) i(GL_PROGRAM_ERROR_POSITION_ARB) i(GL_PROGRAM_BINDING_ARB) i(GL_MAX_VERTEX_ATTRIBS_ARB) i(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB) i(GL_PROGRAM_ERROR_STRING_ARB) i(GL_PROGRAM_FORMAT_ASCII_ARB) i(GL_PROGRAM_FORMAT_ARB) i(GL_PROGRAM_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_INSTRUCTIONS_ARB) i(GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB) i(GL_PROGRAM_TEMPORARIES_ARB) i(GL_MAX_PROGRAM_TEMPORARIES_ARB) i(GL_PROGRAM_NATIVE_TEMPORARIES_ARB) i(GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB) i(GL_PROGRAM_PARAMETERS_ARB) i(GL_MAX_PROGRAM_PARAMETERS_ARB) i(GL_PROGRAM_NATIVE_PARAMETERS_ARB) i(GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB) i(GL_PROGRAM_ATTRIBS_ARB) i(GL_MAX_PROGRAM_ATTRIBS_ARB) i(GL_PROGRAM_NATIVE_ATTRIBS_ARB) i(GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB) i(GL_PROGRAM_ADDRESS_REGISTERS_ARB) i(GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB) i(GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB) i(GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB) i(GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB) i(GL_MAX_PROGRAM_ENV_PARAMETERS_ARB) i(GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB) i(GL_TRANSPOSE_CURRENT_MATRIX_ARB) i(GL_MATRIX0_ARB) i(GL_MATRIX1_ARB) i(GL_MATRIX2_ARB) i(GL_MATRIX3_ARB) i(GL_MATRIX4_ARB) i(GL_MATRIX5_ARB) i(GL_MATRIX6_ARB) i(GL_MATRIX7_ARB) i(GL_MATRIX8_ARB) i(GL_MATRIX9_ARB) i(GL_MATRIX10_ARB) i(GL_MATRIX11_ARB) i(GL_MATRIX12_ARB) i(GL_MATRIX13_ARB) i(GL_MATRIX14_ARB) i(GL_MATRIX15_ARB) i(GL_MATRIX16_ARB) i(GL_MATRIX17_ARB) i(GL_MATRIX18_ARB) i(GL_MATRIX19_ARB) i(GL_MATRIX20_ARB) i(GL_MATRIX21_ARB) i(GL_MATRIX22_ARB) i(GL_MATRIX23_ARB) i(GL_MATRIX24_ARB) i(GL_MATRIX25_ARB) i(GL_MATRIX26_ARB) i(GL_MATRIX27_ARB) i(GL_MATRIX28_ARB) i(GL_MATRIX29_ARB) i(GL_MATRIX30_ARB) i(GL_MATRIX31_ARB) i(GL_FRAGMENT_PROGRAM_ARB) i(GL_PROGRAM_ALU_INSTRUCTIONS_ARB) i(GL_PROGRAM_TEX_INSTRUCTIONS_ARB) i(GL_PROGRAM_TEX_INDIRECTIONS_ARB) i(GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB) i(GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB) i(GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB) i(GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB) i(GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB) i(GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB) i(GL_MAX_TEXTURE_COORDS_ARB) i(GL_MAX_TEXTURE_IMAGE_UNITS_ARB) i(GL_BUFFER_SIZE_ARB) i(GL_BUFFER_USAGE_ARB) i(GL_ARRAY_BUFFER_ARB) i(GL_ELEMENT_ARRAY_BUFFER_ARB) i(GL_ARRAY_BUFFER_BINDING_ARB) i(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB) i(GL_VERTEX_ARRAY_BUFFER_BINDING_ARB) i(GL_NORMAL_ARRAY_BUFFER_BINDING_ARB) i(GL_COLOR_ARRAY_BUFFER_BINDING_ARB) i(GL_INDEX_ARRAY_BUFFER_BINDING_ARB) i(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB) i(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB) i(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB) i(GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB) i(GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB) i(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB) i(GL_READ_ONLY_ARB) i(GL_WRITE_ONLY_ARB) i(GL_READ_WRITE_ARB) i(GL_BUFFER_ACCESS_ARB) i(GL_BUFFER_MAPPED_ARB) i(GL_BUFFER_MAP_POINTER_ARB) i(GL_STREAM_DRAW_ARB) i(GL_STREAM_READ_ARB) i(GL_STREAM_COPY_ARB) i(GL_STATIC_DRAW_ARB) i(GL_STATIC_READ_ARB) i(GL_STATIC_COPY_ARB) i(GL_DYNAMIC_DRAW_ARB) i(GL_DYNAMIC_READ_ARB) i(GL_DYNAMIC_COPY_ARB) i(GL_QUERY_COUNTER_BITS_ARB) i(GL_CURRENT_QUERY_ARB) i(GL_QUERY_RESULT_ARB) i(GL_QUERY_RESULT_AVAILABLE_ARB) i(GL_SAMPLES_PASSED_ARB) i(GL_PROGRAM_OBJECT_ARB) i(GL_SHADER_OBJECT_ARB) i(GL_OBJECT_TYPE_ARB) i(GL_OBJECT_SUBTYPE_ARB) i(GL_FLOAT_VEC2_ARB) i(GL_FLOAT_VEC3_ARB) i(GL_FLOAT_VEC4_ARB) i(GL_INT_VEC2_ARB) i(GL_INT_VEC3_ARB) i(GL_INT_VEC4_ARB) i(GL_BOOL_ARB) i(GL_BOOL_VEC2_ARB) i(GL_BOOL_VEC3_ARB) i(GL_BOOL_VEC4_ARB) i(GL_FLOAT_MAT2_ARB) i(GL_FLOAT_MAT3_ARB) i(GL_FLOAT_MAT4_ARB) i(GL_SAMPLER_1D_ARB) i(GL_SAMPLER_2D_ARB) i(GL_SAMPLER_3D_ARB) i(GL_SAMPLER_CUBE_ARB) i(GL_SAMPLER_1D_SHADOW_ARB) i(GL_SAMPLER_2D_SHADOW_ARB) i(GL_SAMPLER_2D_RECT_ARB) i(GL_SAMPLER_2D_RECT_SHADOW_ARB) i(GL_OBJECT_DELETE_STATUS_ARB) i(GL_OBJECT_COMPILE_STATUS_ARB) i(GL_OBJECT_LINK_STATUS_ARB) i(GL_OBJECT_VALIDATE_STATUS_ARB) i(GL_OBJECT_INFO_LOG_LENGTH_ARB) i(GL_OBJECT_ATTACHED_OBJECTS_ARB) i(GL_OBJECT_ACTIVE_UNIFORMS_ARB) i(GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB) i(GL_OBJECT_SHADER_SOURCE_LENGTH_ARB) i(GL_VERTEX_SHADER_ARB) i(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB) i(GL_MAX_VARYING_FLOATS_ARB) i(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB) i(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB) i(GL_OBJECT_ACTIVE_ATTRIBUTES_ARB) i(GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB) i(GL_FRAGMENT_SHADER_ARB) i(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB) i(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB) i(GL_SHADING_LANGUAGE_VERSION_ARB) i(GL_POINT_SPRITE_ARB) i(GL_COORD_REPLACE_ARB) i(GL_MAX_DRAW_BUFFERS_ARB) i(GL_DRAW_BUFFER0_ARB) i(GL_DRAW_BUFFER1_ARB) i(GL_DRAW_BUFFER2_ARB) i(GL_DRAW_BUFFER3_ARB) i(GL_DRAW_BUFFER4_ARB) i(GL_DRAW_BUFFER5_ARB) i(GL_DRAW_BUFFER6_ARB) i(GL_DRAW_BUFFER7_ARB) i(GL_DRAW_BUFFER8_ARB) i(GL_DRAW_BUFFER9_ARB) i(GL_DRAW_BUFFER10_ARB) i(GL_DRAW_BUFFER11_ARB) i(GL_DRAW_BUFFER12_ARB) i(GL_DRAW_BUFFER13_ARB) i(GL_DRAW_BUFFER14_ARB) i(GL_DRAW_BUFFER15_ARB) i(GL_TEXTURE_RECTANGLE_ARB) i(GL_TEXTURE_BINDING_RECTANGLE_ARB) i(GL_PROXY_TEXTURE_RECTANGLE_ARB) i(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB) i(GL_RGBA_FLOAT_MODE_ARB) i(GL_CLAMP_VERTEX_COLOR_ARB) i(GL_CLAMP_FRAGMENT_COLOR_ARB) i(GL_CLAMP_READ_COLOR_ARB) i(GL_FIXED_ONLY_ARB) i(GL_HALF_FLOAT_ARB) i(GL_TEXTURE_RED_TYPE_ARB) i(GL_TEXTURE_GREEN_TYPE_ARB) i(GL_TEXTURE_BLUE_TYPE_ARB) i(GL_TEXTURE_ALPHA_TYPE_ARB) i(GL_TEXTURE_LUMINANCE_TYPE_ARB) i(GL_TEXTURE_INTENSITY_TYPE_ARB) i(GL_TEXTURE_DEPTH_TYPE_ARB) i(GL_UNSIGNED_NORMALIZED_ARB) i(GL_RGBA32F_ARB) i(GL_RGB32F_ARB) i(GL_ALPHA32F_ARB) i(GL_INTENSITY32F_ARB) i(GL_LUMINANCE32F_ARB) i(GL_LUMINANCE_ALPHA32F_ARB) i(GL_RGBA16F_ARB) i(GL_RGB16F_ARB) i(GL_ALPHA16F_ARB) i(GL_INTENSITY16F_ARB) i(GL_LUMINANCE16F_ARB) i(GL_LUMINANCE_ALPHA16F_ARB) i(GL_PIXEL_PACK_BUFFER_ARB) i(GL_PIXEL_UNPACK_BUFFER_ARB) i(GL_PIXEL_PACK_BUFFER_BINDING_ARB) i(GL_PIXEL_UNPACK_BUFFER_BINDING_ARB) i(GL_RGB2_EXT) i(GL_PROXY_TEXTURE_1D_EXT) i(GL_PROXY_TEXTURE_2D_EXT) i(GL_FILTER4_SGIS) i(GL_TEXTURE_FILTER4_SIZE_SGIS) i(GL_HISTOGRAM_EXT) i(GL_PROXY_HISTOGRAM_EXT) i(GL_HISTOGRAM_WIDTH_EXT) i(GL_HISTOGRAM_FORMAT_EXT) i(GL_HISTOGRAM_RED_SIZE_EXT) i(GL_HISTOGRAM_GREEN_SIZE_EXT) i(GL_HISTOGRAM_BLUE_SIZE_EXT) i(GL_HISTOGRAM_ALPHA_SIZE_EXT) i(GL_HISTOGRAM_LUMINANCE_SIZE_EXT) i(GL_HISTOGRAM_SINK_EXT) i(GL_MINMAX_EXT) i(GL_MINMAX_FORMAT_EXT) i(GL_MINMAX_SINK_EXT) i(GL_CONVOLUTION_1D_EXT) i(GL_CONVOLUTION_2D_EXT) i(GL_SEPARABLE_2D_EXT) i(GL_CONVOLUTION_BORDER_MODE_EXT) i(GL_CONVOLUTION_FILTER_SCALE_EXT) i(GL_CONVOLUTION_FILTER_BIAS_EXT) i(GL_REDUCE_EXT) i(GL_CONVOLUTION_FORMAT_EXT) i(GL_CONVOLUTION_WIDTH_EXT) i(GL_CONVOLUTION_HEIGHT_EXT) i(GL_MAX_CONVOLUTION_WIDTH_EXT) i(GL_MAX_CONVOLUTION_HEIGHT_EXT) i(GL_POST_CONVOLUTION_RED_SCALE_EXT) i(GL_POST_CONVOLUTION_GREEN_SCALE_EXT) i(GL_POST_CONVOLUTION_BLUE_SCALE_EXT) i(GL_POST_CONVOLUTION_ALPHA_SCALE_EXT) i(GL_POST_CONVOLUTION_RED_BIAS_EXT) i(GL_POST_CONVOLUTION_GREEN_BIAS_EXT) i(GL_POST_CONVOLUTION_BLUE_BIAS_EXT) i(GL_POST_CONVOLUTION_ALPHA_BIAS_EXT) i(GL_COLOR_MATRIX_SGI) i(GL_COLOR_MATRIX_STACK_DEPTH_SGI) i(GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI) i(GL_POST_COLOR_MATRIX_RED_SCALE_SGI) i(GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI) i(GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI) i(GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI) i(GL_POST_COLOR_MATRIX_RED_BIAS_SGI) i(GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI) i(GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI) i(GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI) i(GL_COLOR_TABLE_SGI) i(GL_POST_CONVOLUTION_COLOR_TABLE_SGI) i(GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI) i(GL_PROXY_COLOR_TABLE_SGI) i(GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI) i(GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI) i(GL_COLOR_TABLE_SCALE_SGI) i(GL_COLOR_TABLE_BIAS_SGI) i(GL_COLOR_TABLE_FORMAT_SGI) i(GL_COLOR_TABLE_WIDTH_SGI) i(GL_COLOR_TABLE_RED_SIZE_SGI) i(GL_COLOR_TABLE_GREEN_SIZE_SGI) i(GL_COLOR_TABLE_BLUE_SIZE_SGI) i(GL_COLOR_TABLE_ALPHA_SIZE_SGI) i(GL_COLOR_TABLE_LUMINANCE_SIZE_SGI) i(GL_COLOR_TABLE_INTENSITY_SIZE_SGI) i(GL_PIXEL_TEXTURE_SGIS) i(GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS) i(GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS) i(GL_PIXEL_GROUP_COLOR_SGIS) i(GL_PIXEL_TEX_GEN_SGIX) i(GL_PIXEL_TEX_GEN_MODE_SGIX) i(GL_PACK_SKIP_VOLUMES_SGIS) i(GL_PACK_IMAGE_DEPTH_SGIS) i(GL_UNPACK_SKIP_VOLUMES_SGIS) i(GL_UNPACK_IMAGE_DEPTH_SGIS) i(GL_TEXTURE_4D_SGIS) i(GL_PROXY_TEXTURE_4D_SGIS) i(GL_TEXTURE_4DSIZE_SGIS) i(GL_TEXTURE_WRAP_Q_SGIS) i(GL_MAX_4D_TEXTURE_SIZE_SGIS) i(GL_TEXTURE_4D_BINDING_SGIS) i(GL_TEXTURE_COLOR_TABLE_SGI) i(GL_PROXY_TEXTURE_COLOR_TABLE_SGI) i(GL_DETAIL_TEXTURE_2D_SGIS) i(GL_DETAIL_TEXTURE_2D_BINDING_SGIS) i(GL_LINEAR_DETAIL_SGIS) i(GL_LINEAR_DETAIL_ALPHA_SGIS) i(GL_LINEAR_DETAIL_COLOR_SGIS) i(GL_DETAIL_TEXTURE_LEVEL_SGIS) i(GL_DETAIL_TEXTURE_MODE_SGIS) i(GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS) i(GL_LINEAR_SHARPEN_SGIS) i(GL_LINEAR_SHARPEN_ALPHA_SGIS) i(GL_LINEAR_SHARPEN_COLOR_SGIS) i(GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS) i(GL_UNSIGNED_BYTE_3_3_2_EXT) i(GL_UNSIGNED_SHORT_4_4_4_4_EXT) i(GL_UNSIGNED_SHORT_5_5_5_1_EXT) i(GL_UNSIGNED_INT_8_8_8_8_EXT) i(GL_UNSIGNED_INT_10_10_10_2_EXT) i(GL_TEXTURE_MIN_LOD_SGIS) i(GL_TEXTURE_MAX_LOD_SGIS) i(GL_TEXTURE_BASE_LEVEL_SGIS) i(GL_TEXTURE_MAX_LEVEL_SGIS) i(GL_MULTISAMPLE_SGIS) i(GL_SAMPLE_ALPHA_TO_MASK_SGIS) i(GL_SAMPLE_ALPHA_TO_ONE_SGIS) i(GL_SAMPLE_MASK_SGIS) i(GL_1PASS_SGIS) i(GL_2PASS_0_SGIS) i(GL_2PASS_1_SGIS) i(GL_4PASS_0_SGIS) i(GL_4PASS_1_SGIS) i(GL_4PASS_2_SGIS) i(GL_4PASS_3_SGIS) i(GL_SAMPLE_BUFFERS_SGIS) i(GL_SAMPLES_SGIS) i(GL_SAMPLE_MASK_VALUE_SGIS) i(GL_SAMPLE_MASK_INVERT_SGIS) i(GL_SAMPLE_PATTERN_SGIS) i(GL_RESCALE_NORMAL_EXT) i(GL_GENERATE_MIPMAP_SGIS) i(GL_GENERATE_MIPMAP_HINT_SGIS) i(GL_LINEAR_CLIPMAP_LINEAR_SGIX) i(GL_TEXTURE_CLIPMAP_CENTER_SGIX) i(GL_TEXTURE_CLIPMAP_FRAME_SGIX) i(GL_TEXTURE_CLIPMAP_OFFSET_SGIX) i(GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX) i(GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX) i(GL_TEXTURE_CLIPMAP_DEPTH_SGIX) i(GL_MAX_CLIPMAP_DEPTH_SGIX) i(GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX) i(GL_NEAREST_CLIPMAP_NEAREST_SGIX) i(GL_NEAREST_CLIPMAP_LINEAR_SGIX) i(GL_LINEAR_CLIPMAP_NEAREST_SGIX) i(GL_TEXTURE_COMPARE_SGIX) i(GL_TEXTURE_COMPARE_OPERATOR_SGIX) i(GL_TEXTURE_LEQUAL_R_SGIX) i(GL_TEXTURE_GEQUAL_R_SGIX) i(GL_CLAMP_TO_EDGE_SGIS) i(GL_CLAMP_TO_BORDER_SGIS) i(GL_INTERLACE_SGIX) i(GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX) i(GL_PIXEL_TILE_CACHE_INCREMENT_SGIX) i(GL_PIXEL_TILE_WIDTH_SGIX) i(GL_PIXEL_TILE_HEIGHT_SGIX) i(GL_PIXEL_TILE_GRID_WIDTH_SGIX) i(GL_PIXEL_TILE_GRID_HEIGHT_SGIX) i(GL_PIXEL_TILE_GRID_DEPTH_SGIX) i(GL_PIXEL_TILE_CACHE_SIZE_SGIX) i(GL_DUAL_ALPHA4_SGIS) i(GL_DUAL_ALPHA8_SGIS) i(GL_DUAL_ALPHA12_SGIS) i(GL_DUAL_ALPHA16_SGIS) i(GL_DUAL_LUMINANCE4_SGIS) i(GL_DUAL_LUMINANCE8_SGIS) i(GL_DUAL_LUMINANCE12_SGIS) i(GL_DUAL_LUMINANCE16_SGIS) i(GL_DUAL_INTENSITY4_SGIS) i(GL_DUAL_INTENSITY8_SGIS) i(GL_DUAL_INTENSITY12_SGIS) i(GL_DUAL_INTENSITY16_SGIS) i(GL_DUAL_LUMINANCE_ALPHA4_SGIS) i(GL_DUAL_LUMINANCE_ALPHA8_SGIS) i(GL_QUAD_ALPHA4_SGIS) i(GL_QUAD_ALPHA8_SGIS) i(GL_QUAD_LUMINANCE4_SGIS) i(GL_QUAD_LUMINANCE8_SGIS) i(GL_QUAD_INTENSITY4_SGIS) i(GL_QUAD_INTENSITY8_SGIS) i(GL_DUAL_TEXTURE_SELECT_SGIS) i(GL_QUAD_TEXTURE_SELECT_SGIS) i(GL_SPRITE_SGIX) i(GL_SPRITE_MODE_SGIX) i(GL_SPRITE_AXIS_SGIX) i(GL_SPRITE_TRANSLATION_SGIX) i(GL_SPRITE_AXIAL_SGIX) i(GL_SPRITE_OBJECT_ALIGNED_SGIX) i(GL_SPRITE_EYE_ALIGNED_SGIX) i(GL_TEXTURE_MULTI_BUFFER_HINT_SGIX) i(GL_POINT_SIZE_MIN_SGIS) i(GL_POINT_SIZE_MAX_SGIS) i(GL_POINT_FADE_THRESHOLD_SIZE_SGIS) i(GL_DISTANCE_ATTENUATION_SGIS) i(GL_INSTRUMENT_BUFFER_POINTER_SGIX) i(GL_INSTRUMENT_MEASUREMENTS_SGIX) i(GL_POST_TEXTURE_FILTER_BIAS_SGIX) i(GL_POST_TEXTURE_FILTER_SCALE_SGIX) i(GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX) i(GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX) i(GL_FRAMEZOOM_SGIX) i(GL_FRAMEZOOM_FACTOR_SGIX) i(GL_MAX_FRAMEZOOM_FACTOR_SGIX) #if defined(GL_FfdMaskSGIX) i(GL_TEXTURE_DEFORMATION_BIT_SGIX) i(GL_GEOMETRY_DEFORMATION_BIT_SGIX) #endif i(GL_GEOMETRY_DEFORMATION_SGIX) i(GL_TEXTURE_DEFORMATION_SGIX) i(GL_DEFORMATIONS_MASK_SGIX) i(GL_MAX_DEFORMATION_ORDER_SGIX) i(GL_REFERENCE_PLANE_SGIX) i(GL_REFERENCE_PLANE_EQUATION_SGIX) i(GL_DEPTH_COMPONENT16_SGIX) i(GL_DEPTH_COMPONENT24_SGIX) i(GL_DEPTH_COMPONENT32_SGIX) i(GL_FOG_FUNC_SGIS) i(GL_FOG_FUNC_POINTS_SGIS) i(GL_MAX_FOG_FUNC_POINTS_SGIS) i(GL_FOG_OFFSET_SGIX) i(GL_FOG_OFFSET_VALUE_SGIX) i(GL_IMAGE_SCALE_X_HP) i(GL_IMAGE_SCALE_Y_HP) i(GL_IMAGE_TRANSLATE_X_HP) i(GL_IMAGE_TRANSLATE_Y_HP) i(GL_IMAGE_ROTATE_ANGLE_HP) i(GL_IMAGE_ROTATE_ORIGIN_X_HP) i(GL_IMAGE_ROTATE_ORIGIN_Y_HP) i(GL_IMAGE_MAG_FILTER_HP) i(GL_IMAGE_MIN_FILTER_HP) i(GL_IMAGE_CUBIC_WEIGHT_HP) i(GL_CUBIC_HP) i(GL_AVERAGE_HP) i(GL_IMAGE_TRANSFORM_2D_HP) i(GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP) i(GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP) i(GL_IGNORE_BORDER_HP) i(GL_CONSTANT_BORDER_HP) i(GL_REPLICATE_BORDER_HP) i(GL_CONVOLUTION_BORDER_COLOR_HP) i(GL_TEXTURE_ENV_BIAS_SGIX) i(GL_VERTEX_DATA_HINT_PGI) i(GL_VERTEX_CONSISTENT_HINT_PGI) i(GL_MATERIAL_SIDE_HINT_PGI) i(GL_MAX_VERTEX_HINT_PGI) i(GL_COLOR3_BIT_PGI) i(GL_COLOR4_BIT_PGI) i(GL_EDGEFLAG_BIT_PGI) i(GL_INDEX_BIT_PGI) i(GL_MAT_AMBIENT_BIT_PGI) i(GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI) i(GL_MAT_DIFFUSE_BIT_PGI) i(GL_MAT_EMISSION_BIT_PGI) i(GL_MAT_COLOR_INDEXES_BIT_PGI) i(GL_MAT_SHININESS_BIT_PGI) i(GL_MAT_SPECULAR_BIT_PGI) i(GL_NORMAL_BIT_PGI) i(GL_TEXCOORD1_BIT_PGI) i(GL_TEXCOORD2_BIT_PGI) i(GL_TEXCOORD3_BIT_PGI) i(GL_TEXCOORD4_BIT_PGI) i(GL_VERTEX23_BIT_PGI) i(GL_VERTEX4_BIT_PGI) i(GL_PREFER_DOUBLEBUFFER_HINT_PGI) i(GL_CONSERVE_MEMORY_HINT_PGI) i(GL_RECLAIM_MEMORY_HINT_PGI) i(GL_NATIVE_GRAPHICS_HANDLE_PGI) i(GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI) i(GL_NATIVE_GRAPHICS_END_HINT_PGI) i(GL_ALWAYS_FAST_HINT_PGI) i(GL_ALWAYS_SOFT_HINT_PGI) i(GL_ALLOW_DRAW_OBJ_HINT_PGI) i(GL_ALLOW_DRAW_WIN_HINT_PGI) i(GL_ALLOW_DRAW_FRG_HINT_PGI) i(GL_ALLOW_DRAW_MEM_HINT_PGI) i(GL_STRICT_DEPTHFUNC_HINT_PGI) i(GL_STRICT_LIGHTING_HINT_PGI) i(GL_STRICT_SCISSOR_HINT_PGI) i(GL_FULL_STIPPLE_HINT_PGI) i(GL_CLIP_NEAR_HINT_PGI) i(GL_CLIP_FAR_HINT_PGI) i(GL_WIDE_LINE_HINT_PGI) i(GL_BACK_NORMALS_HINT_PGI) i(GL_CLIP_VOLUME_CLIPPING_HINT_EXT) i(GL_LIST_PRIORITY_SGIX) i(GL_IR_INSTRUMENT1_SGIX) i(GL_CALLIGRAPHIC_FRAGMENT_SGIX) i(GL_TEXTURE_LOD_BIAS_S_SGIX) i(GL_TEXTURE_LOD_BIAS_T_SGIX) i(GL_TEXTURE_LOD_BIAS_R_SGIX) i(GL_SHADOW_AMBIENT_SGIX) i(GL_INDEX_MATERIAL_EXT) i(GL_INDEX_MATERIAL_PARAMETER_EXT) i(GL_INDEX_MATERIAL_FACE_EXT) i(GL_INDEX_TEST_EXT) i(GL_INDEX_TEST_FUNC_EXT) i(GL_INDEX_TEST_REF_EXT) i(GL_IUI_V2F_EXT) i(GL_IUI_V3F_EXT) i(GL_IUI_N3F_V2F_EXT) i(GL_IUI_N3F_V3F_EXT) i(GL_T2F_IUI_V2F_EXT) i(GL_T2F_IUI_V3F_EXT) i(GL_T2F_IUI_N3F_V2F_EXT) i(GL_T2F_IUI_N3F_V3F_EXT) i(GL_ARRAY_ELEMENT_LOCK_FIRST_EXT) i(GL_ARRAY_ELEMENT_LOCK_COUNT_EXT) i(GL_CULL_VERTEX_EXT) i(GL_CULL_VERTEX_EYE_POSITION_EXT) i(GL_CULL_VERTEX_OBJECT_POSITION_EXT) i(GL_YCRCB_422_SGIX) i(GL_YCRCB_444_SGIX) i(GL_FRAGMENT_LIGHTING_SGIX) i(GL_FRAGMENT_COLOR_MATERIAL_SGIX) i(GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX) i(GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX) i(GL_MAX_FRAGMENT_LIGHTS_SGIX) i(GL_MAX_ACTIVE_LIGHTS_SGIX) i(GL_CURRENT_RASTER_NORMAL_SGIX) i(GL_LIGHT_ENV_MODE_SGIX) i(GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX) i(GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX) i(GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX) i(GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX) i(GL_FRAGMENT_LIGHT0_SGIX) i(GL_FRAGMENT_LIGHT1_SGIX) i(GL_FRAGMENT_LIGHT2_SGIX) i(GL_FRAGMENT_LIGHT3_SGIX) i(GL_FRAGMENT_LIGHT4_SGIX) i(GL_FRAGMENT_LIGHT5_SGIX) i(GL_FRAGMENT_LIGHT6_SGIX) i(GL_FRAGMENT_LIGHT7_SGIX) i(GL_RASTER_POSITION_UNCLIPPED_IBM) i(GL_TEXTURE_LIGHTING_MODE_HP) i(GL_TEXTURE_POST_SPECULAR_HP) i(GL_TEXTURE_PRE_SPECULAR_HP) i(GL_MAX_ELEMENTS_VERTICES_EXT) i(GL_MAX_ELEMENTS_INDICES_EXT) i(GL_PHONG_WIN) i(GL_PHONG_HINT_WIN) i(GL_FOG_SPECULAR_TEXTURE_WIN) i(GL_FRAGMENT_MATERIAL_EXT) i(GL_FRAGMENT_NORMAL_EXT) i(GL_FRAGMENT_COLOR_EXT) i(GL_ATTENUATION_EXT) i(GL_SHADOW_ATTENUATION_EXT) i(GL_TEXTURE_APPLICATION_MODE_EXT) i(GL_TEXTURE_LIGHT_EXT) i(GL_TEXTURE_MATERIAL_FACE_EXT) i(GL_TEXTURE_MATERIAL_PARAMETER_EXT) i(GL_ALPHA_MIN_SGIX) i(GL_ALPHA_MAX_SGIX) #if defined(GL_SGIX_impact_pixel_texture) i(GL_PIXEL_TEX_GEN_Q_CEILING_SGIX) i(GL_PIXEL_TEX_GEN_Q_ROUND_SGIX) i(GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX) i(GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX) i(GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX) i(GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX) i(GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX) #endif i(GL_BGR_EXT) i(GL_BGRA_EXT) i(GL_ASYNC_MARKER_SGIX) i(GL_ASYNC_TEX_IMAGE_SGIX) i(GL_ASYNC_DRAW_PIXELS_SGIX) i(GL_ASYNC_READ_PIXELS_SGIX) i(GL_MAX_ASYNC_TEX_IMAGE_SGIX) i(GL_MAX_ASYNC_DRAW_PIXELS_SGIX) i(GL_MAX_ASYNC_READ_PIXELS_SGIX) i(GL_ASYNC_HISTOGRAM_SGIX) i(GL_MAX_ASYNC_HISTOGRAM_SGIX) i(GL_PARALLEL_ARRAYS_INTEL) i(GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL) i(GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL) i(GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL) i(GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL) i(GL_OCCLUSION_TEST_HP) i(GL_OCCLUSION_TEST_RESULT_HP) i(GL_PIXEL_TRANSFORM_2D_EXT) i(GL_PIXEL_MAG_FILTER_EXT) i(GL_PIXEL_MIN_FILTER_EXT) i(GL_PIXEL_CUBIC_WEIGHT_EXT) i(GL_CUBIC_EXT) i(GL_AVERAGE_EXT) i(GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT) i(GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT) i(GL_PIXEL_TRANSFORM_2D_MATRIX_EXT) i(GL_LIGHT_MODEL_COLOR_CONTROL_EXT) i(GL_SINGLE_COLOR_EXT) i(GL_SEPARATE_SPECULAR_COLOR_EXT) i(GL_COLOR_SUM_EXT) i(GL_CURRENT_SECONDARY_COLOR_EXT) i(GL_SECONDARY_COLOR_ARRAY_SIZE_EXT) i(GL_SECONDARY_COLOR_ARRAY_TYPE_EXT) i(GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT) i(GL_SECONDARY_COLOR_ARRAY_POINTER_EXT) i(GL_SECONDARY_COLOR_ARRAY_EXT) i(GL_PERTURB_EXT) i(GL_TEXTURE_NORMAL_EXT) i(GL_FOG_COORDINATE_SOURCE_EXT) i(GL_FOG_COORDINATE_EXT) i(GL_FRAGMENT_DEPTH_EXT) i(GL_CURRENT_FOG_COORDINATE_EXT) i(GL_FOG_COORDINATE_ARRAY_TYPE_EXT) i(GL_FOG_COORDINATE_ARRAY_STRIDE_EXT) i(GL_FOG_COORDINATE_ARRAY_POINTER_EXT) i(GL_FOG_COORDINATE_ARRAY_EXT) i(GL_SCREEN_COORDINATES_REND) i(GL_INVERTED_SCREEN_W_REND) i(GL_TANGENT_ARRAY_EXT) i(GL_BINORMAL_ARRAY_EXT) i(GL_CURRENT_TANGENT_EXT) i(GL_CURRENT_BINORMAL_EXT) i(GL_TANGENT_ARRAY_TYPE_EXT) i(GL_TANGENT_ARRAY_STRIDE_EXT) i(GL_BINORMAL_ARRAY_TYPE_EXT) i(GL_BINORMAL_ARRAY_STRIDE_EXT) i(GL_TANGENT_ARRAY_POINTER_EXT) i(GL_BINORMAL_ARRAY_POINTER_EXT) i(GL_MAP1_TANGENT_EXT) i(GL_MAP2_TANGENT_EXT) i(GL_MAP1_BINORMAL_EXT) i(GL_MAP2_BINORMAL_EXT) i(GL_COMBINE_EXT) i(GL_COMBINE_RGB_EXT) i(GL_COMBINE_ALPHA_EXT) i(GL_RGB_SCALE_EXT) i(GL_ADD_SIGNED_EXT) i(GL_INTERPOLATE_EXT) i(GL_CONSTANT_EXT) i(GL_PRIMARY_COLOR_EXT) i(GL_PREVIOUS_EXT) i(GL_SOURCE0_RGB_EXT) i(GL_SOURCE1_RGB_EXT) i(GL_SOURCE2_RGB_EXT) i(GL_SOURCE0_ALPHA_EXT) i(GL_SOURCE1_ALPHA_EXT) i(GL_SOURCE2_ALPHA_EXT) i(GL_OPERAND0_RGB_EXT) i(GL_OPERAND1_RGB_EXT) i(GL_OPERAND2_RGB_EXT) i(GL_OPERAND0_ALPHA_EXT) i(GL_OPERAND1_ALPHA_EXT) i(GL_OPERAND2_ALPHA_EXT) i(GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE) i(GL_TRANSFORM_HINT_APPLE) #if defined(GL_SGIX_fog_scale) i(GL_FOG_SCALE_SGIX) i(GL_FOG_SCALE_VALUE_SGIX) #endif i(GL_UNPACK_CONSTANT_DATA_SUNX) i(GL_TEXTURE_CONSTANT_DATA_SUNX) i(GL_GLOBAL_ALPHA_SUN) i(GL_GLOBAL_ALPHA_FACTOR_SUN) i(GL_RESTART_SUN) i(GL_REPLACE_MIDDLE_SUN) i(GL_REPLACE_OLDEST_SUN) i(GL_TRIANGLE_LIST_SUN) i(GL_REPLACEMENT_CODE_SUN) i(GL_REPLACEMENT_CODE_ARRAY_SUN) i(GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN) i(GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN) i(GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN) i(GL_R1UI_V3F_SUN) i(GL_R1UI_C4UB_V3F_SUN) i(GL_R1UI_C3F_V3F_SUN) i(GL_R1UI_N3F_V3F_SUN) i(GL_R1UI_C4F_N3F_V3F_SUN) i(GL_R1UI_T2F_V3F_SUN) i(GL_R1UI_T2F_N3F_V3F_SUN) i(GL_R1UI_T2F_C4F_N3F_V3F_SUN) i(GL_BLEND_DST_RGB_EXT) i(GL_BLEND_SRC_RGB_EXT) i(GL_BLEND_DST_ALPHA_EXT) i(GL_BLEND_SRC_ALPHA_EXT) i(GL_RED_MIN_CLAMP_INGR) i(GL_GREEN_MIN_CLAMP_INGR) i(GL_BLUE_MIN_CLAMP_INGR) i(GL_ALPHA_MIN_CLAMP_INGR) i(GL_RED_MAX_CLAMP_INGR) i(GL_GREEN_MAX_CLAMP_INGR) i(GL_BLUE_MAX_CLAMP_INGR) i(GL_ALPHA_MAX_CLAMP_INGR) i(GL_INTERLACE_READ_INGR) i(GL_INCR_WRAP_EXT) i(GL_DECR_WRAP_EXT) i(GL_422_EXT) i(GL_422_REV_EXT) i(GL_422_AVERAGE_EXT) i(GL_422_REV_AVERAGE_EXT) i(GL_NORMAL_MAP_NV) i(GL_REFLECTION_MAP_NV) i(GL_NORMAL_MAP_EXT) i(GL_REFLECTION_MAP_EXT) i(GL_TEXTURE_CUBE_MAP_EXT) i(GL_TEXTURE_BINDING_CUBE_MAP_EXT) i(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT) i(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT) i(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT) i(GL_PROXY_TEXTURE_CUBE_MAP_EXT) i(GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT) i(GL_WRAP_BORDER_SUN) i(GL_MAX_TEXTURE_LOD_BIAS_EXT) i(GL_TEXTURE_FILTER_CONTROL_EXT) i(GL_TEXTURE_LOD_BIAS_EXT) i(GL_TEXTURE_MAX_ANISOTROPY_EXT) i(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT) i(GL_MODELVIEW0_STACK_DEPTH_EXT) i(GL_MODELVIEW1_STACK_DEPTH_EXT) i(GL_MODELVIEW0_MATRIX_EXT) i(GL_MODELVIEW1_MATRIX_EXT) i(GL_VERTEX_WEIGHTING_EXT) i(GL_MODELVIEW0_EXT) i(GL_MODELVIEW1_EXT) i(GL_CURRENT_VERTEX_WEIGHT_EXT) i(GL_VERTEX_WEIGHT_ARRAY_EXT) i(GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT) i(GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT) i(GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT) i(GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT) i(GL_MAX_SHININESS_NV) i(GL_MAX_SPOT_EXPONENT_NV) i(GL_VERTEX_ARRAY_RANGE_NV) i(GL_VERTEX_ARRAY_RANGE_LENGTH_NV) i(GL_VERTEX_ARRAY_RANGE_VALID_NV) i(GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV) i(GL_VERTEX_ARRAY_RANGE_POINTER_NV) i(GL_REGISTER_COMBINERS_NV) i(GL_VARIABLE_A_NV) i(GL_VARIABLE_B_NV) i(GL_VARIABLE_C_NV) i(GL_VARIABLE_D_NV) i(GL_VARIABLE_E_NV) i(GL_VARIABLE_F_NV) i(GL_VARIABLE_G_NV) i(GL_CONSTANT_COLOR0_NV) i(GL_CONSTANT_COLOR1_NV) i(GL_PRIMARY_COLOR_NV) i(GL_SECONDARY_COLOR_NV) i(GL_SPARE0_NV) i(GL_SPARE1_NV) i(GL_DISCARD_NV) i(GL_E_TIMES_F_NV) i(GL_SPARE0_PLUS_SECONDARY_COLOR_NV) i(GL_UNSIGNED_IDENTITY_NV) i(GL_UNSIGNED_INVERT_NV) i(GL_EXPAND_NORMAL_NV) i(GL_EXPAND_NEGATE_NV) i(GL_HALF_BIAS_NORMAL_NV) i(GL_HALF_BIAS_NEGATE_NV) i(GL_SIGNED_IDENTITY_NV) i(GL_SIGNED_NEGATE_NV) i(GL_SCALE_BY_TWO_NV) i(GL_SCALE_BY_FOUR_NV) i(GL_SCALE_BY_ONE_HALF_NV) i(GL_BIAS_BY_NEGATIVE_ONE_HALF_NV) i(GL_COMBINER_INPUT_NV) i(GL_COMBINER_MAPPING_NV) i(GL_COMBINER_COMPONENT_USAGE_NV) i(GL_COMBINER_AB_DOT_PRODUCT_NV) i(GL_COMBINER_CD_DOT_PRODUCT_NV) i(GL_COMBINER_MUX_SUM_NV) i(GL_COMBINER_SCALE_NV) i(GL_COMBINER_BIAS_NV) i(GL_COMBINER_AB_OUTPUT_NV) i(GL_COMBINER_CD_OUTPUT_NV) i(GL_COMBINER_SUM_OUTPUT_NV) i(GL_MAX_GENERAL_COMBINERS_NV) i(GL_NUM_GENERAL_COMBINERS_NV) i(GL_COLOR_SUM_CLAMP_NV) i(GL_COMBINER0_NV) i(GL_COMBINER1_NV) i(GL_COMBINER2_NV) i(GL_COMBINER3_NV) i(GL_COMBINER4_NV) i(GL_COMBINER5_NV) i(GL_COMBINER6_NV) i(GL_COMBINER7_NV) i(GL_FOG_DISTANCE_MODE_NV) i(GL_EYE_RADIAL_NV) i(GL_EYE_PLANE_ABSOLUTE_NV) i(GL_EMBOSS_LIGHT_NV) i(GL_EMBOSS_CONSTANT_NV) i(GL_EMBOSS_MAP_NV) i(GL_COMBINE4_NV) i(GL_SOURCE3_RGB_NV) i(GL_SOURCE3_ALPHA_NV) i(GL_OPERAND3_RGB_NV) i(GL_OPERAND3_ALPHA_NV) i(GL_COMPRESSED_RGB_S3TC_DXT1_EXT) i(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) i(GL_COMPRESSED_RGBA_S3TC_DXT3_EXT) i(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT) i(GL_CULL_VERTEX_IBM) i(GL_VERTEX_ARRAY_LIST_IBM) i(GL_NORMAL_ARRAY_LIST_IBM) i(GL_COLOR_ARRAY_LIST_IBM) i(GL_INDEX_ARRAY_LIST_IBM) i(GL_TEXTURE_COORD_ARRAY_LIST_IBM) i(GL_EDGE_FLAG_ARRAY_LIST_IBM) i(GL_FOG_COORDINATE_ARRAY_LIST_IBM) i(GL_SECONDARY_COLOR_ARRAY_LIST_IBM) i(GL_VERTEX_ARRAY_LIST_STRIDE_IBM) i(GL_NORMAL_ARRAY_LIST_STRIDE_IBM) i(GL_COLOR_ARRAY_LIST_STRIDE_IBM) i(GL_INDEX_ARRAY_LIST_STRIDE_IBM) i(GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM) i(GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM) i(GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM) i(GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM) i(GL_PACK_SUBSAMPLE_RATE_SGIX) i(GL_UNPACK_SUBSAMPLE_RATE_SGIX) i(GL_PIXEL_SUBSAMPLE_4444_SGIX) i(GL_PIXEL_SUBSAMPLE_2424_SGIX) i(GL_PIXEL_SUBSAMPLE_4242_SGIX) i(GL_YCRCB_SGIX) i(GL_YCRCBA_SGIX) #if defined(GL_SGI_depth_pass_instrument) i(GL_DEPTH_PASS_INSTRUMENT_SGIX) i(GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX) i(GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX) #endif i(GL_COMPRESSED_RGB_FXT1_3DFX) i(GL_COMPRESSED_RGBA_FXT1_3DFX) i(GL_MULTISAMPLE_3DFX) i(GL_SAMPLE_BUFFERS_3DFX) i(GL_SAMPLES_3DFX) i(GL_MULTISAMPLE_BIT_3DFX) i(GL_MULTISAMPLE_EXT) i(GL_SAMPLE_ALPHA_TO_MASK_EXT) i(GL_SAMPLE_ALPHA_TO_ONE_EXT) i(GL_SAMPLE_MASK_EXT) i(GL_1PASS_EXT) i(GL_2PASS_0_EXT) i(GL_2PASS_1_EXT) i(GL_4PASS_0_EXT) i(GL_4PASS_1_EXT) i(GL_4PASS_2_EXT) i(GL_4PASS_3_EXT) i(GL_SAMPLE_BUFFERS_EXT) i(GL_SAMPLES_EXT) i(GL_SAMPLE_MASK_VALUE_EXT) i(GL_SAMPLE_MASK_INVERT_EXT) i(GL_SAMPLE_PATTERN_EXT) i(GL_MULTISAMPLE_BIT_EXT) i(GL_VERTEX_PRECLIP_SGIX) i(GL_VERTEX_PRECLIP_HINT_SGIX) i(GL_CONVOLUTION_HINT_SGIX) i(GL_PACK_RESAMPLE_SGIX) i(GL_UNPACK_RESAMPLE_SGIX) i(GL_RESAMPLE_REPLICATE_SGIX) i(GL_RESAMPLE_ZERO_FILL_SGIX) i(GL_RESAMPLE_DECIMATE_SGIX) i(GL_EYE_DISTANCE_TO_POINT_SGIS) i(GL_OBJECT_DISTANCE_TO_POINT_SGIS) i(GL_EYE_DISTANCE_TO_LINE_SGIS) i(GL_OBJECT_DISTANCE_TO_LINE_SGIS) i(GL_EYE_POINT_SGIS) i(GL_OBJECT_POINT_SGIS) i(GL_EYE_LINE_SGIS) i(GL_OBJECT_LINE_SGIS) i(GL_TEXTURE_COLOR_WRITEMASK_SGIS) i(GL_DOT3_RGB_EXT) i(GL_DOT3_RGBA_EXT) i(GL_MIRROR_CLAMP_ATI) i(GL_MIRROR_CLAMP_TO_EDGE_ATI) i(GL_ALL_COMPLETED_NV) i(GL_FENCE_STATUS_NV) i(GL_FENCE_CONDITION_NV) i(GL_MIRRORED_REPEAT_IBM) i(GL_EVAL_2D_NV) i(GL_EVAL_TRIANGULAR_2D_NV) i(GL_MAP_TESSELLATION_NV) i(GL_MAP_ATTRIB_U_ORDER_NV) i(GL_MAP_ATTRIB_V_ORDER_NV) i(GL_EVAL_FRACTIONAL_TESSELLATION_NV) i(GL_EVAL_VERTEX_ATTRIB0_NV) i(GL_EVAL_VERTEX_ATTRIB1_NV) i(GL_EVAL_VERTEX_ATTRIB2_NV) i(GL_EVAL_VERTEX_ATTRIB3_NV) i(GL_EVAL_VERTEX_ATTRIB4_NV) i(GL_EVAL_VERTEX_ATTRIB5_NV) i(GL_EVAL_VERTEX_ATTRIB6_NV) i(GL_EVAL_VERTEX_ATTRIB7_NV) i(GL_EVAL_VERTEX_ATTRIB8_NV) i(GL_EVAL_VERTEX_ATTRIB9_NV) i(GL_EVAL_VERTEX_ATTRIB10_NV) i(GL_EVAL_VERTEX_ATTRIB11_NV) i(GL_EVAL_VERTEX_ATTRIB12_NV) i(GL_EVAL_VERTEX_ATTRIB13_NV) i(GL_EVAL_VERTEX_ATTRIB14_NV) i(GL_EVAL_VERTEX_ATTRIB15_NV) i(GL_MAX_MAP_TESSELLATION_NV) i(GL_MAX_RATIONAL_EVAL_ORDER_NV) i(GL_DEPTH_STENCIL_NV) i(GL_UNSIGNED_INT_24_8_NV) i(GL_PER_STAGE_CONSTANTS_NV) i(GL_TEXTURE_RECTANGLE_NV) i(GL_TEXTURE_BINDING_RECTANGLE_NV) i(GL_PROXY_TEXTURE_RECTANGLE_NV) i(GL_MAX_RECTANGLE_TEXTURE_SIZE_NV) i(GL_OFFSET_TEXTURE_RECTANGLE_NV) i(GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV) i(GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV) i(GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV) i(GL_UNSIGNED_INT_S8_S8_8_8_NV) i(GL_UNSIGNED_INT_8_8_S8_S8_REV_NV) i(GL_DSDT_MAG_INTENSITY_NV) i(GL_SHADER_CONSISTENT_NV) i(GL_TEXTURE_SHADER_NV) i(GL_SHADER_OPERATION_NV) i(GL_CULL_MODES_NV) i(GL_OFFSET_TEXTURE_MATRIX_NV) i(GL_OFFSET_TEXTURE_SCALE_NV) i(GL_OFFSET_TEXTURE_BIAS_NV) i(GL_OFFSET_TEXTURE_2D_MATRIX_NV) i(GL_OFFSET_TEXTURE_2D_SCALE_NV) i(GL_OFFSET_TEXTURE_2D_BIAS_NV) i(GL_PREVIOUS_TEXTURE_INPUT_NV) i(GL_CONST_EYE_NV) i(GL_PASS_THROUGH_NV) i(GL_CULL_FRAGMENT_NV) i(GL_OFFSET_TEXTURE_2D_NV) i(GL_DEPENDENT_AR_TEXTURE_2D_NV) i(GL_DEPENDENT_GB_TEXTURE_2D_NV) i(GL_DOT_PRODUCT_NV) i(GL_DOT_PRODUCT_DEPTH_REPLACE_NV) i(GL_DOT_PRODUCT_TEXTURE_2D_NV) i(GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV) i(GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV) i(GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV) i(GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV) i(GL_HILO_NV) i(GL_DSDT_NV) i(GL_DSDT_MAG_NV) i(GL_DSDT_MAG_VIB_NV) i(GL_HILO16_NV) i(GL_SIGNED_HILO_NV) i(GL_SIGNED_HILO16_NV) i(GL_SIGNED_RGBA_NV) i(GL_SIGNED_RGBA8_NV) i(GL_SIGNED_RGB_NV) i(GL_SIGNED_RGB8_NV) i(GL_SIGNED_LUMINANCE_NV) i(GL_SIGNED_LUMINANCE8_NV) i(GL_SIGNED_LUMINANCE_ALPHA_NV) i(GL_SIGNED_LUMINANCE8_ALPHA8_NV) i(GL_SIGNED_ALPHA_NV) i(GL_SIGNED_ALPHA8_NV) i(GL_SIGNED_INTENSITY_NV) i(GL_SIGNED_INTENSITY8_NV) i(GL_DSDT8_NV) i(GL_DSDT8_MAG8_NV) i(GL_DSDT8_MAG8_INTENSITY8_NV) i(GL_SIGNED_RGB_UNSIGNED_ALPHA_NV) i(GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV) i(GL_HI_SCALE_NV) i(GL_LO_SCALE_NV) i(GL_DS_SCALE_NV) i(GL_DT_SCALE_NV) i(GL_MAGNITUDE_SCALE_NV) i(GL_VIBRANCE_SCALE_NV) i(GL_HI_BIAS_NV) i(GL_LO_BIAS_NV) i(GL_DS_BIAS_NV) i(GL_DT_BIAS_NV) i(GL_MAGNITUDE_BIAS_NV) i(GL_VIBRANCE_BIAS_NV) i(GL_TEXTURE_BORDER_VALUES_NV) i(GL_TEXTURE_HI_SIZE_NV) i(GL_TEXTURE_LO_SIZE_NV) i(GL_TEXTURE_DS_SIZE_NV) i(GL_TEXTURE_DT_SIZE_NV) i(GL_TEXTURE_MAG_SIZE_NV) i(GL_DOT_PRODUCT_TEXTURE_3D_NV) i(GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV) i(GL_VERTEX_PROGRAM_NV) i(GL_VERTEX_STATE_PROGRAM_NV) i(GL_ATTRIB_ARRAY_SIZE_NV) i(GL_ATTRIB_ARRAY_STRIDE_NV) i(GL_ATTRIB_ARRAY_TYPE_NV) i(GL_CURRENT_ATTRIB_NV) i(GL_PROGRAM_LENGTH_NV) i(GL_PROGRAM_STRING_NV) i(GL_MODELVIEW_PROJECTION_NV) i(GL_IDENTITY_NV) i(GL_INVERSE_NV) i(GL_TRANSPOSE_NV) i(GL_INVERSE_TRANSPOSE_NV) i(GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV) i(GL_MAX_TRACK_MATRICES_NV) i(GL_MATRIX0_NV) i(GL_MATRIX1_NV) i(GL_MATRIX2_NV) i(GL_MATRIX3_NV) i(GL_MATRIX4_NV) i(GL_MATRIX5_NV) i(GL_MATRIX6_NV) i(GL_MATRIX7_NV) i(GL_CURRENT_MATRIX_STACK_DEPTH_NV) i(GL_CURRENT_MATRIX_NV) i(GL_VERTEX_PROGRAM_POINT_SIZE_NV) i(GL_VERTEX_PROGRAM_TWO_SIDE_NV) i(GL_PROGRAM_PARAMETER_NV) i(GL_ATTRIB_ARRAY_POINTER_NV) i(GL_PROGRAM_TARGET_NV) i(GL_PROGRAM_RESIDENT_NV) i(GL_TRACK_MATRIX_NV) i(GL_TRACK_MATRIX_TRANSFORM_NV) i(GL_VERTEX_PROGRAM_BINDING_NV) i(GL_PROGRAM_ERROR_POSITION_NV) i(GL_VERTEX_ATTRIB_ARRAY0_NV) i(GL_VERTEX_ATTRIB_ARRAY1_NV) i(GL_VERTEX_ATTRIB_ARRAY2_NV) i(GL_VERTEX_ATTRIB_ARRAY3_NV) i(GL_VERTEX_ATTRIB_ARRAY4_NV) i(GL_VERTEX_ATTRIB_ARRAY5_NV) i(GL_VERTEX_ATTRIB_ARRAY6_NV) i(GL_VERTEX_ATTRIB_ARRAY7_NV) i(GL_VERTEX_ATTRIB_ARRAY8_NV) i(GL_VERTEX_ATTRIB_ARRAY9_NV) i(GL_VERTEX_ATTRIB_ARRAY10_NV) i(GL_VERTEX_ATTRIB_ARRAY11_NV) i(GL_VERTEX_ATTRIB_ARRAY12_NV) i(GL_VERTEX_ATTRIB_ARRAY13_NV) i(GL_VERTEX_ATTRIB_ARRAY14_NV) i(GL_VERTEX_ATTRIB_ARRAY15_NV) i(GL_MAP1_VERTEX_ATTRIB0_4_NV) i(GL_MAP1_VERTEX_ATTRIB1_4_NV) i(GL_MAP1_VERTEX_ATTRIB2_4_NV) i(GL_MAP1_VERTEX_ATTRIB3_4_NV) i(GL_MAP1_VERTEX_ATTRIB4_4_NV) i(GL_MAP1_VERTEX_ATTRIB5_4_NV) i(GL_MAP1_VERTEX_ATTRIB6_4_NV) i(GL_MAP1_VERTEX_ATTRIB7_4_NV) i(GL_MAP1_VERTEX_ATTRIB8_4_NV) i(GL_MAP1_VERTEX_ATTRIB9_4_NV) i(GL_MAP1_VERTEX_ATTRIB10_4_NV) i(GL_MAP1_VERTEX_ATTRIB11_4_NV) i(GL_MAP1_VERTEX_ATTRIB12_4_NV) i(GL_MAP1_VERTEX_ATTRIB13_4_NV) i(GL_MAP1_VERTEX_ATTRIB14_4_NV) i(GL_MAP1_VERTEX_ATTRIB15_4_NV) i(GL_MAP2_VERTEX_ATTRIB0_4_NV) i(GL_MAP2_VERTEX_ATTRIB1_4_NV) i(GL_MAP2_VERTEX_ATTRIB2_4_NV) i(GL_MAP2_VERTEX_ATTRIB3_4_NV) i(GL_MAP2_VERTEX_ATTRIB4_4_NV) i(GL_MAP2_VERTEX_ATTRIB5_4_NV) i(GL_MAP2_VERTEX_ATTRIB6_4_NV) i(GL_MAP2_VERTEX_ATTRIB7_4_NV) i(GL_MAP2_VERTEX_ATTRIB8_4_NV) i(GL_MAP2_VERTEX_ATTRIB9_4_NV) i(GL_MAP2_VERTEX_ATTRIB10_4_NV) i(GL_MAP2_VERTEX_ATTRIB11_4_NV) i(GL_MAP2_VERTEX_ATTRIB12_4_NV) i(GL_MAP2_VERTEX_ATTRIB13_4_NV) i(GL_MAP2_VERTEX_ATTRIB14_4_NV) i(GL_MAP2_VERTEX_ATTRIB15_4_NV) i(GL_TEXTURE_MAX_CLAMP_S_SGIX) i(GL_TEXTURE_MAX_CLAMP_T_SGIX) i(GL_TEXTURE_MAX_CLAMP_R_SGIX) i(GL_SCALEBIAS_HINT_SGIX) i(GL_INTERLACE_OML) i(GL_INTERLACE_READ_OML) i(GL_FORMAT_SUBSAMPLE_24_24_OML) i(GL_FORMAT_SUBSAMPLE_244_244_OML) i(GL_PACK_RESAMPLE_OML) i(GL_UNPACK_RESAMPLE_OML) i(GL_RESAMPLE_REPLICATE_OML) i(GL_RESAMPLE_ZERO_FILL_OML) i(GL_RESAMPLE_AVERAGE_OML) i(GL_RESAMPLE_DECIMATE_OML) i(GL_DEPTH_STENCIL_TO_RGBA_NV) i(GL_DEPTH_STENCIL_TO_BGRA_NV) i(GL_BUMP_ROT_MATRIX_ATI) i(GL_BUMP_ROT_MATRIX_SIZE_ATI) i(GL_BUMP_NUM_TEX_UNITS_ATI) i(GL_BUMP_TEX_UNITS_ATI) i(GL_DUDV_ATI) i(GL_DU8DV8_ATI) i(GL_BUMP_ENVMAP_ATI) i(GL_BUMP_TARGET_ATI) i(GL_FRAGMENT_SHADER_ATI) i(GL_REG_0_ATI) i(GL_REG_1_ATI) i(GL_REG_2_ATI) i(GL_REG_3_ATI) i(GL_REG_4_ATI) i(GL_REG_5_ATI) i(GL_REG_6_ATI) i(GL_REG_7_ATI) i(GL_REG_8_ATI) i(GL_REG_9_ATI) i(GL_REG_10_ATI) i(GL_REG_11_ATI) i(GL_REG_12_ATI) i(GL_REG_13_ATI) i(GL_REG_14_ATI) i(GL_REG_15_ATI) i(GL_REG_16_ATI) i(GL_REG_17_ATI) i(GL_REG_18_ATI) i(GL_REG_19_ATI) i(GL_REG_20_ATI) i(GL_REG_21_ATI) i(GL_REG_22_ATI) i(GL_REG_23_ATI) i(GL_REG_24_ATI) i(GL_REG_25_ATI) i(GL_REG_26_ATI) i(GL_REG_27_ATI) i(GL_REG_28_ATI) i(GL_REG_29_ATI) i(GL_REG_30_ATI) i(GL_REG_31_ATI) i(GL_CON_0_ATI) i(GL_CON_1_ATI) i(GL_CON_2_ATI) i(GL_CON_3_ATI) i(GL_CON_4_ATI) i(GL_CON_5_ATI) i(GL_CON_6_ATI) i(GL_CON_7_ATI) i(GL_CON_8_ATI) i(GL_CON_9_ATI) i(GL_CON_10_ATI) i(GL_CON_11_ATI) i(GL_CON_12_ATI) i(GL_CON_13_ATI) i(GL_CON_14_ATI) i(GL_CON_15_ATI) i(GL_CON_16_ATI) i(GL_CON_17_ATI) i(GL_CON_18_ATI) i(GL_CON_19_ATI) i(GL_CON_20_ATI) i(GL_CON_21_ATI) i(GL_CON_22_ATI) i(GL_CON_23_ATI) i(GL_CON_24_ATI) i(GL_CON_25_ATI) i(GL_CON_26_ATI) i(GL_CON_27_ATI) i(GL_CON_28_ATI) i(GL_CON_29_ATI) i(GL_CON_30_ATI) i(GL_CON_31_ATI) i(GL_MOV_ATI) i(GL_ADD_ATI) i(GL_MUL_ATI) i(GL_SUB_ATI) i(GL_DOT3_ATI) i(GL_DOT4_ATI) i(GL_MAD_ATI) i(GL_LERP_ATI) i(GL_CND_ATI) i(GL_CND0_ATI) i(GL_DOT2_ADD_ATI) i(GL_SECONDARY_INTERPOLATOR_ATI) i(GL_NUM_FRAGMENT_REGISTERS_ATI) i(GL_NUM_FRAGMENT_CONSTANTS_ATI) i(GL_NUM_PASSES_ATI) i(GL_NUM_INSTRUCTIONS_PER_PASS_ATI) i(GL_NUM_INSTRUCTIONS_TOTAL_ATI) i(GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI) i(GL_NUM_LOOPBACK_COMPONENTS_ATI) i(GL_COLOR_ALPHA_PAIRING_ATI) i(GL_SWIZZLE_STR_ATI) i(GL_SWIZZLE_STQ_ATI) i(GL_SWIZZLE_STR_DR_ATI) i(GL_SWIZZLE_STQ_DQ_ATI) i(GL_SWIZZLE_STRQ_ATI) i(GL_SWIZZLE_STRQ_DQ_ATI) i(GL_RED_BIT_ATI) i(GL_GREEN_BIT_ATI) i(GL_BLUE_BIT_ATI) i(GL_2X_BIT_ATI) i(GL_4X_BIT_ATI) i(GL_8X_BIT_ATI) i(GL_HALF_BIT_ATI) i(GL_QUARTER_BIT_ATI) i(GL_EIGHTH_BIT_ATI) i(GL_SATURATE_BIT_ATI) i(GL_COMP_BIT_ATI) i(GL_NEGATE_BIT_ATI) i(GL_BIAS_BIT_ATI) i(GL_PN_TRIANGLES_ATI) i(GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI) i(GL_PN_TRIANGLES_POINT_MODE_ATI) i(GL_PN_TRIANGLES_NORMAL_MODE_ATI) i(GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI) i(GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI) i(GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI) i(GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI) i(GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI) i(GL_STATIC_ATI) i(GL_DYNAMIC_ATI) i(GL_PRESERVE_ATI) i(GL_DISCARD_ATI) i(GL_OBJECT_BUFFER_SIZE_ATI) i(GL_OBJECT_BUFFER_USAGE_ATI) i(GL_ARRAY_OBJECT_BUFFER_ATI) i(GL_ARRAY_OBJECT_OFFSET_ATI) i(GL_VERTEX_SHADER_EXT) i(GL_VERTEX_SHADER_BINDING_EXT) i(GL_OP_INDEX_EXT) i(GL_OP_NEGATE_EXT) i(GL_OP_DOT3_EXT) i(GL_OP_DOT4_EXT) i(GL_OP_MUL_EXT) i(GL_OP_ADD_EXT) i(GL_OP_MADD_EXT) i(GL_OP_FRAC_EXT) i(GL_OP_MAX_EXT) i(GL_OP_MIN_EXT) i(GL_OP_SET_GE_EXT) i(GL_OP_SET_LT_EXT) i(GL_OP_CLAMP_EXT) i(GL_OP_FLOOR_EXT) i(GL_OP_ROUND_EXT) i(GL_OP_EXP_BASE_2_EXT) i(GL_OP_LOG_BASE_2_EXT) i(GL_OP_POWER_EXT) i(GL_OP_RECIP_EXT) i(GL_OP_RECIP_SQRT_EXT) i(GL_OP_SUB_EXT) i(GL_OP_CROSS_PRODUCT_EXT) i(GL_OP_MULTIPLY_MATRIX_EXT) i(GL_OP_MOV_EXT) i(GL_OUTPUT_VERTEX_EXT) i(GL_OUTPUT_COLOR0_EXT) i(GL_OUTPUT_COLOR1_EXT) i(GL_OUTPUT_TEXTURE_COORD0_EXT) i(GL_OUTPUT_TEXTURE_COORD1_EXT) i(GL_OUTPUT_TEXTURE_COORD2_EXT) i(GL_OUTPUT_TEXTURE_COORD3_EXT) i(GL_OUTPUT_TEXTURE_COORD4_EXT) i(GL_OUTPUT_TEXTURE_COORD5_EXT) i(GL_OUTPUT_TEXTURE_COORD6_EXT) i(GL_OUTPUT_TEXTURE_COORD7_EXT) i(GL_OUTPUT_TEXTURE_COORD8_EXT) i(GL_OUTPUT_TEXTURE_COORD9_EXT) i(GL_OUTPUT_TEXTURE_COORD10_EXT) i(GL_OUTPUT_TEXTURE_COORD11_EXT) i(GL_OUTPUT_TEXTURE_COORD12_EXT) i(GL_OUTPUT_TEXTURE_COORD13_EXT) i(GL_OUTPUT_TEXTURE_COORD14_EXT) i(GL_OUTPUT_TEXTURE_COORD15_EXT) i(GL_OUTPUT_TEXTURE_COORD16_EXT) i(GL_OUTPUT_TEXTURE_COORD17_EXT) i(GL_OUTPUT_TEXTURE_COORD18_EXT) i(GL_OUTPUT_TEXTURE_COORD19_EXT) i(GL_OUTPUT_TEXTURE_COORD20_EXT) i(GL_OUTPUT_TEXTURE_COORD21_EXT) i(GL_OUTPUT_TEXTURE_COORD22_EXT) i(GL_OUTPUT_TEXTURE_COORD23_EXT) i(GL_OUTPUT_TEXTURE_COORD24_EXT) i(GL_OUTPUT_TEXTURE_COORD25_EXT) i(GL_OUTPUT_TEXTURE_COORD26_EXT) i(GL_OUTPUT_TEXTURE_COORD27_EXT) i(GL_OUTPUT_TEXTURE_COORD28_EXT) i(GL_OUTPUT_TEXTURE_COORD29_EXT) i(GL_OUTPUT_TEXTURE_COORD30_EXT) i(GL_OUTPUT_TEXTURE_COORD31_EXT) i(GL_OUTPUT_FOG_EXT) i(GL_SCALAR_EXT) i(GL_VECTOR_EXT) i(GL_MATRIX_EXT) i(GL_VARIANT_EXT) i(GL_INVARIANT_EXT) i(GL_LOCAL_CONSTANT_EXT) i(GL_LOCAL_EXT) i(GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT) i(GL_MAX_VERTEX_SHADER_VARIANTS_EXT) i(GL_MAX_VERTEX_SHADER_INVARIANTS_EXT) i(GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT) i(GL_MAX_VERTEX_SHADER_LOCALS_EXT) i(GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT) i(GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT) i(GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT) i(GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT) i(GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT) i(GL_VERTEX_SHADER_INSTRUCTIONS_EXT) i(GL_VERTEX_SHADER_VARIANTS_EXT) i(GL_VERTEX_SHADER_INVARIANTS_EXT) i(GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT) i(GL_VERTEX_SHADER_LOCALS_EXT) i(GL_VERTEX_SHADER_OPTIMIZED_EXT) i(GL_X_EXT) i(GL_Y_EXT) i(GL_Z_EXT) i(GL_W_EXT) i(GL_NEGATIVE_X_EXT) i(GL_NEGATIVE_Y_EXT) i(GL_NEGATIVE_Z_EXT) i(GL_NEGATIVE_W_EXT) i(GL_ZERO_EXT) i(GL_ONE_EXT) i(GL_NEGATIVE_ONE_EXT) i(GL_NORMALIZED_RANGE_EXT) i(GL_FULL_RANGE_EXT) i(GL_CURRENT_VERTEX_EXT) i(GL_MVP_MATRIX_EXT) i(GL_VARIANT_VALUE_EXT) i(GL_VARIANT_DATATYPE_EXT) i(GL_VARIANT_ARRAY_STRIDE_EXT) i(GL_VARIANT_ARRAY_TYPE_EXT) i(GL_VARIANT_ARRAY_EXT) i(GL_VARIANT_ARRAY_POINTER_EXT) i(GL_INVARIANT_VALUE_EXT) i(GL_INVARIANT_DATATYPE_EXT) i(GL_LOCAL_CONSTANT_VALUE_EXT) i(GL_LOCAL_CONSTANT_DATATYPE_EXT) i(GL_MAX_VERTEX_STREAMS_ATI) i(GL_VERTEX_STREAM0_ATI) i(GL_VERTEX_STREAM1_ATI) i(GL_VERTEX_STREAM2_ATI) i(GL_VERTEX_STREAM3_ATI) i(GL_VERTEX_STREAM4_ATI) i(GL_VERTEX_STREAM5_ATI) i(GL_VERTEX_STREAM6_ATI) i(GL_VERTEX_STREAM7_ATI) i(GL_VERTEX_SOURCE_ATI) i(GL_ELEMENT_ARRAY_ATI) i(GL_ELEMENT_ARRAY_TYPE_ATI) i(GL_ELEMENT_ARRAY_POINTER_ATI) i(GL_QUAD_MESH_SUN) i(GL_TRIANGLE_MESH_SUN) i(GL_SLICE_ACCUM_SUN) i(GL_MULTISAMPLE_FILTER_HINT_NV) i(GL_DEPTH_CLAMP_NV) i(GL_PIXEL_COUNTER_BITS_NV) i(GL_CURRENT_OCCLUSION_QUERY_ID_NV) i(GL_PIXEL_COUNT_NV) i(GL_PIXEL_COUNT_AVAILABLE_NV) i(GL_POINT_SPRITE_NV) i(GL_COORD_REPLACE_NV) i(GL_POINT_SPRITE_R_MODE_NV) i(GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV) i(GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV) i(GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV) i(GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV) i(GL_OFFSET_HILO_TEXTURE_2D_NV) i(GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV) i(GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV) i(GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV) i(GL_DEPENDENT_HILO_TEXTURE_2D_NV) i(GL_DEPENDENT_RGB_TEXTURE_3D_NV) i(GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV) i(GL_DOT_PRODUCT_PASS_THROUGH_NV) i(GL_DOT_PRODUCT_TEXTURE_1D_NV) i(GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV) i(GL_HILO8_NV) i(GL_SIGNED_HILO8_NV) i(GL_FORCE_BLUE_TO_ONE_NV) i(GL_STENCIL_TEST_TWO_SIDE_EXT) i(GL_ACTIVE_STENCIL_FACE_EXT) i(GL_TEXT_FRAGMENT_SHADER_ATI) i(GL_UNPACK_CLIENT_STORAGE_APPLE) i(GL_ELEMENT_ARRAY_APPLE) i(GL_ELEMENT_ARRAY_TYPE_APPLE) i(GL_ELEMENT_ARRAY_POINTER_APPLE) i(GL_DRAW_PIXELS_APPLE) i(GL_FENCE_APPLE) i(GL_VERTEX_ARRAY_BINDING_APPLE) i(GL_VERTEX_ARRAY_RANGE_APPLE) i(GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE) i(GL_VERTEX_ARRAY_STORAGE_HINT_APPLE) i(GL_VERTEX_ARRAY_RANGE_POINTER_APPLE) i(GL_STORAGE_CACHED_APPLE) i(GL_STORAGE_SHARED_APPLE) i(GL_YCBCR_422_APPLE) i(GL_UNSIGNED_SHORT_8_8_APPLE) i(GL_UNSIGNED_SHORT_8_8_REV_APPLE) i(GL_RGB_S3TC) i(GL_RGB4_S3TC) i(GL_RGBA_S3TC) i(GL_RGBA4_S3TC) i(GL_MAX_DRAW_BUFFERS_ATI) i(GL_DRAW_BUFFER0_ATI) i(GL_DRAW_BUFFER1_ATI) i(GL_DRAW_BUFFER2_ATI) i(GL_DRAW_BUFFER3_ATI) i(GL_DRAW_BUFFER4_ATI) i(GL_DRAW_BUFFER5_ATI) i(GL_DRAW_BUFFER6_ATI) i(GL_DRAW_BUFFER7_ATI) i(GL_DRAW_BUFFER8_ATI) i(GL_DRAW_BUFFER9_ATI) i(GL_DRAW_BUFFER10_ATI) i(GL_DRAW_BUFFER11_ATI) i(GL_DRAW_BUFFER12_ATI) i(GL_DRAW_BUFFER13_ATI) i(GL_DRAW_BUFFER14_ATI) i(GL_DRAW_BUFFER15_ATI) i(GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI) i(GL_MODULATE_ADD_ATI) i(GL_MODULATE_SIGNED_ADD_ATI) i(GL_MODULATE_SUBTRACT_ATI) i(GL_RGBA_FLOAT32_ATI) i(GL_RGB_FLOAT32_ATI) i(GL_ALPHA_FLOAT32_ATI) i(GL_INTENSITY_FLOAT32_ATI) i(GL_LUMINANCE_FLOAT32_ATI) i(GL_LUMINANCE_ALPHA_FLOAT32_ATI) i(GL_RGBA_FLOAT16_ATI) i(GL_RGB_FLOAT16_ATI) i(GL_ALPHA_FLOAT16_ATI) i(GL_INTENSITY_FLOAT16_ATI) i(GL_LUMINANCE_FLOAT16_ATI) i(GL_LUMINANCE_ALPHA_FLOAT16_ATI) i(GL_FLOAT_R_NV) i(GL_FLOAT_RG_NV) i(GL_FLOAT_RGB_NV) i(GL_FLOAT_RGBA_NV) i(GL_FLOAT_R16_NV) i(GL_FLOAT_R32_NV) i(GL_FLOAT_RG16_NV) i(GL_FLOAT_RG32_NV) i(GL_FLOAT_RGB16_NV) i(GL_FLOAT_RGB32_NV) i(GL_FLOAT_RGBA16_NV) i(GL_FLOAT_RGBA32_NV) i(GL_TEXTURE_FLOAT_COMPONENTS_NV) i(GL_FLOAT_CLEAR_COLOR_VALUE_NV) i(GL_FLOAT_RGBA_MODE_NV) i(GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV) i(GL_FRAGMENT_PROGRAM_NV) i(GL_MAX_TEXTURE_COORDS_NV) i(GL_MAX_TEXTURE_IMAGE_UNITS_NV) i(GL_FRAGMENT_PROGRAM_BINDING_NV) i(GL_PROGRAM_ERROR_STRING_NV) i(GL_HALF_FLOAT_NV) i(GL_WRITE_PIXEL_DATA_RANGE_NV) i(GL_READ_PIXEL_DATA_RANGE_NV) i(GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV) i(GL_READ_PIXEL_DATA_RANGE_LENGTH_NV) i(GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV) i(GL_READ_PIXEL_DATA_RANGE_POINTER_NV) i(GL_PRIMITIVE_RESTART_NV) i(GL_PRIMITIVE_RESTART_INDEX_NV) i(GL_TEXTURE_UNSIGNED_REMAP_MODE_NV) i(GL_STENCIL_BACK_FUNC_ATI) i(GL_STENCIL_BACK_FAIL_ATI) i(GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI) i(GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI) i(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES) i(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES) i(GL_DEPTH_BOUNDS_TEST_EXT) i(GL_DEPTH_BOUNDS_EXT) i(GL_MIRROR_CLAMP_EXT) i(GL_MIRROR_CLAMP_TO_EDGE_EXT) i(GL_MIRROR_CLAMP_TO_BORDER_EXT) i(GL_BLEND_EQUATION_RGB_EXT) i(GL_BLEND_EQUATION_ALPHA_EXT) i(GL_PACK_INVERT_MESA) i(GL_UNSIGNED_SHORT_8_8_MESA) i(GL_UNSIGNED_SHORT_8_8_REV_MESA) i(GL_YCBCR_MESA) i(GL_PIXEL_PACK_BUFFER_EXT) i(GL_PIXEL_UNPACK_BUFFER_EXT) i(GL_PIXEL_PACK_BUFFER_BINDING_EXT) i(GL_PIXEL_UNPACK_BUFFER_BINDING_EXT) i(GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV) i(GL_MAX_PROGRAM_CALL_DEPTH_NV) i(GL_MAX_PROGRAM_IF_DEPTH_NV) i(GL_MAX_PROGRAM_LOOP_DEPTH_NV) i(GL_MAX_PROGRAM_LOOP_COUNT_NV) i(GL_INVALID_FRAMEBUFFER_OPERATION_EXT) i(GL_MAX_RENDERBUFFER_SIZE_EXT) i(GL_FRAMEBUFFER_BINDING_EXT) i(GL_RENDERBUFFER_BINDING_EXT) i(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT) i(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT) i(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT) i(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT) i(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT) i(GL_FRAMEBUFFER_COMPLETE_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT) i(GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT) i(GL_FRAMEBUFFER_UNSUPPORTED_EXT) i(GL_MAX_COLOR_ATTACHMENTS_EXT) i(GL_COLOR_ATTACHMENT0_EXT) i(GL_COLOR_ATTACHMENT1_EXT) i(GL_COLOR_ATTACHMENT2_EXT) i(GL_COLOR_ATTACHMENT3_EXT) i(GL_COLOR_ATTACHMENT4_EXT) i(GL_COLOR_ATTACHMENT5_EXT) i(GL_COLOR_ATTACHMENT6_EXT) i(GL_COLOR_ATTACHMENT7_EXT) i(GL_COLOR_ATTACHMENT8_EXT) i(GL_COLOR_ATTACHMENT9_EXT) i(GL_COLOR_ATTACHMENT10_EXT) i(GL_COLOR_ATTACHMENT11_EXT) i(GL_COLOR_ATTACHMENT12_EXT) i(GL_COLOR_ATTACHMENT13_EXT) i(GL_COLOR_ATTACHMENT14_EXT) i(GL_COLOR_ATTACHMENT15_EXT) i(GL_DEPTH_ATTACHMENT_EXT) i(GL_STENCIL_ATTACHMENT_EXT) i(GL_FRAMEBUFFER_EXT) i(GL_RENDERBUFFER_EXT) i(GL_RENDERBUFFER_WIDTH_EXT) i(GL_RENDERBUFFER_HEIGHT_EXT) i(GL_RENDERBUFFER_INTERNAL_FORMAT_EXT) i(GL_STENCIL_INDEX1_EXT) i(GL_STENCIL_INDEX4_EXT) i(GL_STENCIL_INDEX8_EXT) i(GL_STENCIL_INDEX16_EXT) i(GL_RENDERBUFFER_RED_SIZE_EXT) i(GL_RENDERBUFFER_GREEN_SIZE_EXT) i(GL_RENDERBUFFER_BLUE_SIZE_EXT) i(GL_RENDERBUFFER_ALPHA_SIZE_EXT) i(GL_RENDERBUFFER_DEPTH_SIZE_EXT) i(GL_RENDERBUFFER_STENCIL_SIZE_EXT) #endif i(GL_CURRENT_BIT) i(GL_POINT_BIT) i(GL_LINE_BIT) i(GL_POLYGON_BIT) i(GL_POLYGON_STIPPLE_BIT) i(GL_PIXEL_MODE_BIT) i(GL_LIGHTING_BIT) i(GL_FOG_BIT) i(GL_DEPTH_BUFFER_BIT) i(GL_ACCUM_BUFFER_BIT) i(GL_STENCIL_BUFFER_BIT) i(GL_VIEWPORT_BIT) i(GL_TRANSFORM_BIT) i(GL_ENABLE_BIT) i(GL_COLOR_BUFFER_BIT) i(GL_HINT_BIT) i(GL_EVAL_BIT) i(GL_LIST_BIT) i(GL_TEXTURE_BIT) i(GL_SCISSOR_BIT) i(GL_ALL_ATTRIB_BITS) i(GL_CLIENT_PIXEL_STORE_BIT) i(GL_CLIENT_VERTEX_ARRAY_BIT) i(MAX_GL_TEXPARAMETER_COUNT) i(MAX_GL_TEXENV_COUNT) i(MAX_GL_TEXGEN_COUNT) i(MAX_GL_MATERIAL_COUNT) i(MAX_GL_MAP_COUNT) i(MAX_GL_LIGHT_COUNT) i(MAX_GL_LIGHTMODEL_COUNT) i(MAX_GL_FOG_COUNT) i(MAX_GL_GET_COUNT) #ifdef GL_VERSION_2_1 i(CURRENT_RASTER_SECONDARY_COLOR) i(FLOAT_MAT2x3) i(FLOAT_MAT2x4) i(FLOAT_MAT3x2) i(FLOAT_MAT3x4) i(FLOAT_MAT4x2) i(FLOAT_MAT4x3) i(SRGB) i(SRGB8) i(SRGB_ALPHA) i(SRGB8_ALPHA8) i(SLUMINANCE_ALPHA) i(SLUMINANCE8_ALPHA8) i(SLUMINANCE) i(SLUMINANCE8) i(COMPRESSED_SRGB) i(COMPRESSED_SRGB_ALPHA) i(COMPRESSED_SLUMINANCE) i(COMPRESSED_SLUMINANCE_ALPHA) i(PIXEL_PACK_BUFFER) i(PIXEL_UNPACK_BUFFER) i(PIXEL_PACK_BUFFER_BINDING) i(PIXEL_UNPACK_BUFFER_BINDING) i(GL_MAX_ELEMENTS_VERTICES) i(GL_MAX_ELEMENTS_INDICES) #endif /* * Mesa 3D version 3.3 and 3.4 define GL_ALL_CLIENT_ATTRIB_BITS The * OpenGL Specification (1.1 and 1.2) defines this macro as well. Older * versions of Mesa3D used to have GL_CLIENT_ALL_ATTRIB_BITS. Older * versions of this module, and much code out there also uses this older * macro. * * To be fully backward compatible, but also to be correct, both will be * defined here, copied from each other. This should ensure that this * compiles and works against any OpenGL library that uses either, and * allow code that uses either. */ #if defined(GL_ALL_CLIENT_ATTRIB_BITS) && !defined(GL_CLIENT_ALL_ATTRIB_BITS) #define GL_CLIENT_ALL_ATTRIB_BITS GL_ALL_CLIENT_ATTRIB_BITS #elif !defined(GL_ALL_CLIENT_ATTRIB_BITS) && defined(GL_CLIENT_ALL_ATTRIB_BITS) #define GL_ALL_CLIENT_ATTRIB_BITS GL_CLIENT_ALL_ATTRIB_BITS #endif i(GL_ALL_CLIENT_ATTRIB_BITS) i(GL_CLIENT_ALL_ATTRIB_BITS) } /* else */ #endif libopengl-perl-0.6704+dfsg.orig/CHANGES0000644000175000017500000000400412334200655016666 0ustar gregoagregoaChange List for 0.58+ - Chris Marshall ____________________________________________________________ Changes for PDL + POGL refactoring are now in GIT_CHANGES which is generated from the git log --stat output of the version control. Eventually, GIT_CHANGES will move to CHANGES and replace the hand generated functionality... Read only access to the POGL repository is available via git clone git://pdl.git.sourceforge.net/gitroot/pdl/pogl For testing purposes and early availability, developers snapshots will be release periodically to CPAN. Use the git repository if you want the bleeding edge code or wish to participate with development or patches. Change List for 0.57 - Bob "grafman" Free ____________________________________________________________ Updated CHANGES Updated MANIFEST Updated INSTALL Updated gl_util.c Updated gl_util.h Updated Makefile.PL Added oga.pl - OGA sample/test app Updated OpenGL.pm Updated OpenGL.pod Updated OpenGL.xs Updated README, README.Win32, README.FreeBSD, RADME.cygwin Updated test.pl to fix fullscreen handling Added test.jpg - test image Replaced include/GL/glut.h Added include/GL/freeglut.h Added include/GL/freeglut_ext.h Added include/GL/freeglut_std.h Added FreeGLUT/freeglut.dll Added FreeGLUT/freeglut.lib Added FreeGLUT/README.txt Updated glut_const.h Upated utils/cleanup.pl Updated glext_procs.h Updated examples/texhack Updated vertex.glsl Added utils/mingw.bat Added README.macosx Updated README.Win32 Updated TODO Added KNOWN_PROBLEMS Chris Marshall ____________________________________________________________ Added README.cygwin Updated Makefile.PL Added utils/makefile.cywin Updated utils/glversion.c Updated gl_util.h, gl_const.h, glut_util.h, glu_const.h, glext_procs.h Sisyphus ____________________________________________________________ Added utils/makefile.mingw Updated Makefile.PL Alex Dodge ____________________________________________________________ Updated OpenGL.pod Updated OpenGL.pm Update OpenGL.xs libopengl-perl-0.6704+dfsg.orig/pogl_gl_Vert_Multi.xs0000644000175000017500000011622712334200655022057 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:10:16 PM*/ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::VertMulti PACKAGE = OpenGL #ifdef HAVE_GL #ifdef GL_EXT_vertex_array #//# glVertexPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer); void glVertexPointerEXT_c(size, type, stride, count, pointer) GLint size GLenum type GLsizei stride GLsizei count void * pointer INIT: loadProc(glVertexPointerEXT,"glVertexPointerEXT"); CODE: glVertexPointerEXT(size, type, stride, count, pointer); #//# glVertexPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer); void glVertexPointerEXT_s(size, type, stride, count, pointer) GLint size GLenum type GLsizei stride GLsizei count SV * pointer INIT: loadProc(glVertexPointerEXT,"glVertexPointerEXT"); CODE: { int width = stride ? stride : (sizeof(type)*size); void * pointer_s = EL(pointer, width*count); glVertexPointerEXT(size, type, stride, count, pointer_s); } #//# glVertexPointerEXT_p($size, (OGA)pointer); void glVertexPointerEXT_p(size, oga) GLint size OpenGL::Array oga INIT: loadProc(glVertexPointerEXT,"glVertexPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glVertexPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->bind ? 0 : oga->data); #else glVertexPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->data); #endif } #//# glNormalPointerEXT_c($type, $stride, $count, (CPTR)pointer); void glNormalPointerEXT_c(type, stride, count, pointer) GLenum type GLsizei stride GLsizei count void * pointer INIT: loadProc(glNormalPointerEXT,"glNormalPointerEXT"); CODE: glNormalPointerEXT(type, stride, count, pointer); #//# glNormalPointerEXT_s($type, $stride, $count, (PACKED)pointer); void glNormalPointerEXT_s(type, stride, count, pointer) GLenum type GLsizei stride GLsizei count SV * pointer INIT: loadProc(glNormalPointerEXT,"glNormalPointerEXT"); CODE: { int width = stride ? stride : (sizeof(type)*3); void * pointer_s = EL(pointer, width*count); glNormalPointerEXT(type, stride, count, pointer_s); } #//# glNormalPointerEXT_p((OGA)pointer); void glNormalPointerEXT_p(oga) OpenGL::Array oga INIT: loadProc(glNormalPointerEXT,"glNormalPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glNormalPointerEXT(oga->types[0], 0, oga->item_count/3, oga->bind ? 0 : oga->data); #else glNormalPointerEXT(oga->types[0], 0, oga->item_count/3, oga->data); #endif } #//# glColorPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer); void glColorPointerEXT_c(size, type, stride, count, pointer) GLint size GLenum type GLsizei stride GLsizei count void * pointer INIT: loadProc(glColorPointerEXT,"glColorPointerEXT"); CODE: glColorPointerEXT(size, type, stride, count, pointer); #//# glColorPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer); void glColorPointerEXT_s(size, type, stride, count, pointer) GLint size GLenum type GLsizei stride GLsizei count SV * pointer INIT: loadProc(glColorPointerEXT,"glColorPointerEXT"); CODE: { int width = stride ? stride : (sizeof(type)*size); void * pointer_s = EL(pointer, width*count); glColorPointerEXT(size, type, stride, count, pointer_s); } #//# glColorPointerEXT_oga($size, (OGA)pointer); void glColorPointerEXT_oga(size, oga) GLint size OpenGL::Array oga INIT: loadProc(glColorPointerEXT,"glColorPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glColorPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->bind ? 0 : oga->data); #else glColorPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->data); #endif } #//# glIndexPointerEXT_c($type, $stride, $count, (CPTR)pointer); void glIndexPointerEXT_c(type, stride, count, pointer) GLenum type GLsizei stride GLsizei count void * pointer INIT: loadProc(glIndexPointerEXT,"glIndexPointerEXT"); CODE: glIndexPointerEXT(type, stride, count, pointer); #//# glIndexPointerEXT_s($type, $stride, $count, (PACKED)pointer); void glIndexPointerEXT_s(type, stride, count, pointer) GLenum type GLsizei stride GLsizei count SV * pointer INIT: loadProc(glIndexPointerEXT,"glIndexPointerEXT"); CODE: { int width = stride ? stride : (sizeof(type)); void * pointer_s = EL(pointer, width*count); glIndexPointerEXT(type, stride, count, pointer_s); } #//# glIndexPointerEXT_p((OGA)pointer); void glIndexPointerEXT_p(oga) OpenGL::Array oga INIT: loadProc(glIndexPointerEXT,"glIndexPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glIndexPointerEXT(oga->types[0], 0, oga->item_count, oga->bind ? 0 : oga->data); #else glIndexPointerEXT(oga->types[0], 0, oga->item_count, oga->data); #endif } #//# glTexCoordPointerEXT_c($size, $type, $stride, $count, (CPTR)pointer); void glTexCoordPointerEXT_c(size, type, stride, count, pointer) GLint size GLenum type GLsizei count GLsizei stride void * pointer INIT: loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT"); CODE: glTexCoordPointerEXT(size, type, stride, count, pointer); #//# glTexCoordPointerEXT_s($size, $type, $stride, $count, (PACKED)pointer); void glTexCoordPointerEXT_s(size, type, stride, count, pointer) GLint size GLenum type GLsizei stride GLsizei count SV * pointer INIT: loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT"); CODE: { int width = stride ? stride : (sizeof(type)*size); void * pointer_s = EL(pointer, width*count); glTexCoordPointerEXT(size, type, stride, count, pointer_s); } #//# glTexCoordPointerEXT_p($size, (OGA)pointer); void glTexCoordPointerEXT_p(size, oga) GLint size OpenGL::Array oga INIT: loadProc(glTexCoordPointerEXT,"glTexCoordPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glTexCoordPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->bind ? 0 : oga->data); #else glTexCoordPointerEXT(size, oga->types[0], 0, oga->item_count/size, oga->data); #endif } #//# glEdgeFlagPointerEXT_c($stride, $count, (CPTR)pointer); void glEdgeFlagPointerEXT_c(stride, count, pointer) GLint stride GLsizei count void * pointer INIT: loadProc(glEdgeFlagPointerEXT,"glEdgeFlagPointerEXT"); CODE: glEdgeFlagPointerEXT(stride, count, pointer); #//# glEdgeFlagPointerEXT_s($stride, $count, (PACKED)pointer); void glEdgeFlagPointerEXT_s(stride, count, pointer) GLsizei stride GLsizei count SV * pointer INIT: loadProc(glEdgeFlagPointerEXT,"glEdgeFlagPointerEXT"); CODE: { int width = stride ? stride : (sizeof(GLboolean)); void * pointer_s = EL(pointer, width*count); glEdgeFlagPointerEXT(stride, count, pointer_s); } #//# glEdgeFlagPointerEXT_oga((OGA)pointer); void glEdgeFlagPointerEXT_oga(oga) OpenGL::Array oga INIT: loadProc(glEdgeFlagPointerEXT,"glEdgeFlagPointerEXT"); CODE: { #ifdef GL_ARB_vertex_buffer_object if (testProc(glBindBufferARB,"glBindBufferARB")) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, oga->bind); } glEdgeFlagPointerEXT(0, oga->item_count, oga->bind ? 0 : oga->data); #else glEdgeFlagPointerEXT(0, oga->item_count, oga->data); #endif } #endif #ifdef GL_MESA_window_pos #// glWindowPos2iMESA($x, $y); void glWindowPos2iMESA(x, y) GLint x GLint y #// glWindowPos2dMESA($x, $y); void glWindowPos2dMESA(x, y) GLdouble x GLdouble y #// glWindowPos3iMESA($x, $y, $z); void glWindowPos3iMESA(x, y, z) GLint x GLint y GLint z #// glWindowPos3dMESA($x, $y, $z); void glWindowPos3dMESA(x, y, z) GLdouble x GLdouble y GLdouble z #// glWindowPos4iMESA($x, $y, $z, $w); void glWindowPos4iMESA(x, y, z, w) GLint x GLint y GLint z GLint w #// glWindowPos4dMESA($x, $y, $z, $w); void glWindowPos4dMESA(x, y, z, w) GLdouble x GLdouble y GLdouble z GLdouble w #endif #ifdef GL_MESA_resize_buffers #// glResizeBuffersMESA(); void glResizeBuffersMESA() #endif #ifdef GL_ARB_draw_buffers #//# glDrawBuffersARB_c($n,(CPTR)buffers); void glDrawBuffersARB_c(n,buffers) GLsizei n void * buffers INIT: loadProc(glDrawBuffersARB,"glDrawBuffersARB"); CODE: { glDrawBuffersARB(n,buffers); } #//# glDrawBuffersARB_s($n,(PACKED)buffers); void glDrawBuffersARB_s(n,buffers) GLsizei n SV * buffers INIT: loadProc(glDrawBuffersARB,"glDrawBuffersARB"); CODE: { void * buffers_s = EL(buffers, sizeof(GLuint)*n); glDrawBuffersARB(n,buffers_s); } #//# glDrawBuffersARB_p(@buffers); void glDrawBuffersARB_p(...) INIT: loadProc(glDrawBuffersARB,"glDrawBuffersARB"); CODE: { if (items) { GLuint * list = malloc(sizeof(GLuint) * items); int i; for (i=0;idata_length,oga->data,usage); } #//# glBufferSubDataARB_c($target,$offset,$size,(CPTR)data); void glBufferSubDataARB_c(target,offset,size,data) GLenum target GLint offset GLsizei size void * data INIT: loadProc(glBufferSubDataARB,"glBufferSubDataARB"); CODE: { glBufferSubDataARB(target,offset,size,data); } #//# glBufferSubDataARB_s($target,$offset,$size,(PACKED)data); void glBufferSubDataARB_s(target,offset,size,data) GLenum target GLint offset GLsizei size SV * data INIT: loadProc(glBufferSubDataARB,"glBufferSubDataARB"); CODE: { void * data_s = EL(data, size); glBufferSubDataARB(target,offset,size,data); } #//# glBufferSubDataARB_p($target,$offset,(OGA)data); void glBufferSubDataARB_p(target,offset,oga) GLenum target GLint offset OpenGL::Array oga INIT: loadProc(glBufferSubDataARB,"glBufferSubDataARB"); CODE: { glBufferSubDataARB(target,offset*oga->total_types_width,oga->data_length,oga->data); } #//# glGetBufferSubDataARB_c($target,$offset,$size,(CPTR)data) void glGetBufferSubDataARB_c(target,offset,size,data) GLenum target GLint offset GLsizei size void * data INIT: loadProc(glGetBufferSubDataARB,"glBufferSubDataARB"); CODE: glGetBufferSubDataARB(target,offset,size,data); #//# glGetBufferSubDataARB_s($target,$offset,$size,(PACKED)data) void glGetBufferSubDataARB_s(target,offset,size,data) GLenum target GLint offset GLsizei size SV * data INIT: loadProc(glGetBufferSubDataARB,"glBufferSubDataARB"); CODE: { GLubyte * data_s = EL(data,size); glGetBufferSubDataARB(target,offset,size,data_s); } #//# $oga = glGetBufferSubDataARB_p($target,$offset,$count,@types); #//- If no types are provided, GLubyte is assumed OpenGL::Array glGetBufferSubDataARB_p(target,offset,count,...) GLenum target GLint offset GLsizei count INIT: loadProc(glGetBufferSubDataARB,"glGetBufferSubDataARB"); loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); CODE: { oga_struct * oga = malloc(sizeof(oga_struct)); GLsizeiptrARB size; oga->item_count = count; oga->type_count = (items - 3); if (oga->type_count) { int i,j; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); for(i=0,j=0;itype_count;i++) { oga->types[i] = SvIV(ST(i+3)); oga->type_offset[i] = j; j += gl_type_size(oga->types[i]); } oga->total_types_width = j; } else { oga->type_count = 1; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->types[0] = GL_UNSIGNED_BYTE; oga->type_offset[0] = 0; oga->total_types_width = gl_type_size(oga->types[0]); } if (!oga->total_types_width) croak("Unable to determine type sizes\n"); glGetBufferParameterivARB(target,GL_BUFFER_SIZE_ARB,(GLint*)&size); size /= oga->total_types_width; if (offset > size) croak("Offset is greater than elements in buffer: %d\n",size); if ((offset+count) > size) count = size - offset; oga->data_length = oga->total_types_width * count; oga->data = malloc(oga->data_length); glGetBufferSubDataARB(target,offset*oga->total_types_width, oga->data_length,oga->data); oga->free_data = 1; RETVAL = oga; } OUTPUT: RETVAL #//# (CPTR)buffer = glMapBufferARB_c($target,$access); void * glMapBufferARB_c(target,access) GLenum target GLenum access INIT: loadProc(glMapBufferARB,"glMapBufferARB"); CODE: RETVAL = glMapBufferARB(target,access); OUTPUT: RETVAL #define FIXME /* !!! Need to refactor with glGetBufferPointervARB_p */ #//# $oga = glMapBufferARB_p($target,$access,@types); #//- If no types are provided, GLubyte is assumed OpenGL::Array glMapBufferARB_p(target,access,...) GLenum target GLenum access INIT: loadProc(glMapBufferARB,"glMapBufferARB"); loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); CODE: { GLsizeiptrARB size; oga_struct * oga; int i,j; void * buffer = glMapBufferARB(target,access); if (!buffer) croak("Unable to map buffer\n"); glGetBufferParameterivARB(target,GL_BUFFER_SIZE_ARB,(GLint*)&size); if (!size) croak("Buffer has no size\n"); oga = malloc(sizeof(oga_struct)); oga->type_count = (items - 2); if (oga->type_count) { oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); for(i=0,j=0;itype_count;i++) { oga->types[i] = SvIV(ST(i+2)); oga->type_offset[i] = j; j += gl_type_size(oga->types[i]); } oga->total_types_width = j; } else { oga->type_count = 1; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->types[0] = GL_UNSIGNED_BYTE; oga->type_offset[0] = 0; oga->total_types_width = gl_type_size(oga->types[0]); } if (!oga->total_types_width) croak("Unable to determine type sizes\n"); oga->item_count = size / oga->total_types_width; oga->data_length = oga->total_types_width * oga->item_count; oga->data = buffer; oga->free_data = 0; RETVAL = oga; } OUTPUT: RETVAL #//# glUnmapBufferARB($target); GLboolean glUnmapBufferARB(target) GLenum target INIT: loadProc(glUnmapBufferARB,"glUnmapBufferARB"); CODE: RETVAL = glUnmapBufferARB(target); OUTPUT: RETVAL #//# glGetBufferParameterivARB_c($target,$pname,(CPTR)params); void glGetBufferParameterivARB_c(target,pname,params) GLenum target GLenum pname void * params INIT: loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); CODE: glGetBufferParameterivARB(target,pname,params); #//# glGetBufferParameterivARB_s($target,$pname,(PACKED)params); void glGetBufferParameterivARB_s(target,pname,params) GLenum target GLenum pname SV * params INIT: loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); CODE: { GLint * params_s = EL(params, sizeof(GLint)*1); glGetBufferParameterivARB(target,pname,params_s); } #//# @params = glGetBufferParameterivARB_p($target,$pname); void glGetBufferParameterivARB_p(target,pname) GLenum target GLenum pname INIT: loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); PPCODE: { GLint ret; glGetBufferParameterivARB(target,pname,&ret); PUSHs(sv_2mortal(newSViv(ret))); } #//# glGetBufferPointervARB_c($target,$pname,(CPTR)params); void glGetBufferPointervARB_c(target,pname,params) GLenum target GLenum pname void * params INIT: loadProc(glGetBufferPointervARB,"glGetBufferPointervARB"); CODE: glGetBufferPointervARB(target,pname,¶ms); #//# glGetBufferPointervARB_s($target,$pname,(PACKED)params); void glGetBufferPointervARB_s(target,pname,params) GLenum target GLenum pname SV * params INIT: loadProc(glGetBufferPointervARB,"glGetBufferPointervARB"); CODE: { void ** params_s = EL(params, sizeof(void*)); glGetBufferPointervARB(target,pname,params_s); } #//# $oga = glGetBufferPointervARB_p($target,$pname,@types); #//- If no types are provided, GLubyte is assumed OpenGL::Array glGetBufferPointervARB_p(target,pname,...) GLenum target GLenum pname INIT: loadProc(glGetBufferPointervARB,"glGetBufferPointervARB"); loadProc(glGetBufferParameterivARB,"glGetBufferParameterivARB"); CODE: { GLsizeiptrARB size; oga_struct * oga; void * buffer; int i,j; glGetBufferPointervARB(target,pname,&buffer); if (!buffer) croak("Buffer is not mapped\n"); glGetBufferParameterivARB(target,GL_BUFFER_SIZE_ARB,(GLint*)&size); if (!size) croak("Buffer has no size\n"); oga = malloc(sizeof(oga_struct)); oga->type_count = (items - 2); if (oga->type_count) { oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); for(i=0,j=0;itype_count;i++) { oga->types[i] = SvIV(ST(i+2)); oga->type_offset[i] = j; j += gl_type_size(oga->types[i]); } oga->total_types_width = j; } else { oga->type_count = 1; oga->types = malloc(sizeof(GLenum) * oga->type_count); oga->type_offset = malloc(sizeof(GLint) * oga->type_count); oga->types[0] = GL_UNSIGNED_BYTE; oga->type_offset[0] = 0; oga->total_types_width = gl_type_size(oga->types[0]); } if (!oga->total_types_width) croak("Unable to determine type sizes\n"); oga->item_count = size / oga->total_types_width; oga->data_length = oga->total_types_width * oga->item_count; oga->data = buffer; oga->free_data = 0; RETVAL = oga; } OUTPUT: RETVAL #endif #ifdef GL_ARB_multitexture #//# glActiveTextureARB($texture); void glActiveTextureARB(texture) GLenum texture INIT: loadProc(glActiveTextureARB,"glActiveTextureARB"); CODE: glActiveTextureARB(texture); #//# glClientActiveTextureARB($texture); void glClientActiveTextureARB(texture) GLenum texture INIT: loadProc(glClientActiveTextureARB,"glClientActiveTextureARB"); CODE: glClientActiveTextureARB(texture); #//# glMultiTexCoord1dARB($target,$s) void glMultiTexCoord1dARB(target,s) GLenum target GLdouble s INIT: loadProc(glMultiTexCoord1dARB,"glMultiTexCoord1dARB"); CODE: glMultiTexCoord1dARB(target,s); #//# glMultiTexCoord1dvARB_c($target,(CPTR)v); void glMultiTexCoord1dvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1dvARB,"glMultiTexCoord1dvARB"); CODE: glMultiTexCoord1dvARB(target,v); #//# glMultiTexCoord1dvARB_s($target,(PACKED)v); void glMultiTexCoord1dvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1dvARB,"glMultiTexCoord1dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)); glMultiTexCoord1dvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord1dARB #//# glMultiTexCoord1dvARB_p($target,$s); void glMultiTexCoord1dvARB_p(target,s) GLenum target GLdouble s INIT: loadProc(glMultiTexCoord1dvARB,"glMultiTexCoord1dvARB"); CODE: { glMultiTexCoord1dvARB(target,&s); } #//# glMultiTexCoord1fARB($target,$s); void glMultiTexCoord1fARB(target,s) GLenum target GLfloat s INIT: loadProc(glMultiTexCoord1fARB,"glMultiTexCoord1fARB"); CODE: glMultiTexCoord1fARB(target,s); #//# glMultiTexCoord1fvARB_c($target,(CPTR)v); void glMultiTexCoord1fvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1fvARB,"glMultiTexCoord1fvARB"); CODE: glMultiTexCoord1fvARB(target,v); #//# glMultiTexCoord1fvARB_s($target,(PACKED)v); void glMultiTexCoord1fvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1fvARB,"glMultiTexCoord1fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)); glMultiTexCoord1fvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord1fARB #//# glMultiTexCoord1fvARB_p($target,$s); void glMultiTexCoord1fvARB_p(target,s) GLenum target GLfloat s INIT: loadProc(glMultiTexCoord1fvARB,"glMultiTexCoord1fvARB"); CODE: { glMultiTexCoord1fvARB(target,&s); } #//# glMultiTexCoord1iARB($target,$s); void glMultiTexCoord1iARB(target,s) GLenum target GLint s INIT: loadProc(glMultiTexCoord1iARB,"glMultiTexCoord1iARB"); CODE: glMultiTexCoord1iARB(target,s); #//# glMultiTexCoord1ivARB_c($target,(CPTR)v); void glMultiTexCoord1ivARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1ivARB,"glMultiTexCoord1ivARB"); CODE: glMultiTexCoord1ivARB(target,v); #//# glMultiTexCoord1ivARB_s($target,(PACKED)v); void glMultiTexCoord1ivARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1ivARB,"glMultiTexCoord1ivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)); glMultiTexCoord1ivARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord1iARB #//# glMultiTexCoord1ivARB_p($target,$s); void glMultiTexCoord1ivARB_p(target,s) GLenum target GLint s INIT: loadProc(glMultiTexCoord1ivARB,"glMultiTexCoord1ivARB"); CODE: { glMultiTexCoord1ivARB(target,&s); } #//# glMultiTexCoord1sARB($target,$s); void glMultiTexCoord1sARB(target,s) GLenum target GLshort s INIT: loadProc(glMultiTexCoord1sARB,"glMultiTexCoord1sARB"); CODE: glMultiTexCoord1sARB(target,s); #//# glMultiTexCoord1svARB_c($target,(CPTR)v); void glMultiTexCoord1svARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1svARB,"glMultiTexCoord1svARB"); CODE: glMultiTexCoord1svARB(target,v); #//# glMultiTexCoord1svARB_s($target,(PACKED)v); void glMultiTexCoord1svARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord1svARB,"glMultiTexCoord1svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)); glMultiTexCoord1svARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord1sARB #//# glMultiTexCoord1svARB_p($target,$s); void glMultiTexCoord1svARB_p(target,s) GLenum target GLshort s INIT: loadProc(glMultiTexCoord1svARB,"glMultiTexCoord1svARB"); CODE: { glMultiTexCoord1svARB(target,&s); } #//# glMultiTexCoord2dARB($target,$s,$t); void glMultiTexCoord2dARB(target,s,t) GLenum target GLdouble s GLdouble t INIT: loadProc(glMultiTexCoord2dARB,"glMultiTexCoord2dARB"); CODE: glMultiTexCoord2dARB(target,s,t); #//# glMultiTexCoord2dvARB_c(target,(CPTR)v); void glMultiTexCoord2dvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2dvARB,"glMultiTexCoord2dvARB"); CODE: glMultiTexCoord2dvARB(target,v); #//# glMultiTexCoord2dvARB_s(target,(PACKED)v); void glMultiTexCoord2dvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2dvARB,"glMultiTexCoord2dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)); glMultiTexCoord2dvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord2dARB #//# glMultiTexCoord2dvARB_p($target,$s,$t); void glMultiTexCoord2dvARB_p(target,s,t) GLenum target GLdouble s GLdouble t INIT: loadProc(glMultiTexCoord2dvARB,"glMultiTexCoord2dvARB"); CODE: { GLdouble param[2]; param[0] = s; param[1] = t; glMultiTexCoord2dvARB(target,param); } #//# glMultiTexCoord2fARB($target,$s,$t); void glMultiTexCoord2fARB(target,s,t) GLenum target GLfloat s GLfloat t INIT: loadProc(glMultiTexCoord2fARB,"glMultiTexCoord2fARB"); CODE: glMultiTexCoord2fARB(target,s,t); #//# glMultiTexCoord2fvARB_c($target,(CPTR)v); void glMultiTexCoord2fvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2fvARB,"glMultiTexCoord2fvARB"); CODE: glMultiTexCoord2fvARB(target,v); #//# glMultiTexCoord2fvARB_s($target,(PACKED)v); void glMultiTexCoord2fvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2fvARB,"glMultiTexCoord2fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)); glMultiTexCoord2fvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord2fARB #//# glMultiTexCoord2fvARB_p($target,$s,$t); void glMultiTexCoord2fvARB_p(target,s,t) GLenum target GLfloat s GLfloat t INIT: loadProc(glMultiTexCoord2fvARB,"glMultiTexCoord2fvARB"); CODE: { GLfloat param[2]; param[0] = s; param[1] = t; glMultiTexCoord2fvARB(target,param); } #//# glMultiTexCoord2iARB($target,$s,$t); void glMultiTexCoord2iARB(target,s,t) GLenum target GLint s GLint t INIT: loadProc(glMultiTexCoord2iARB,"glMultiTexCoord2iARB"); CODE: glMultiTexCoord2iARB(target,s,t); #//# glMultiTexCoord2ivARB_c($target,(CPTR)v); void glMultiTexCoord2ivARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2ivARB,"glMultiTexCoord2ivARB"); CODE: glMultiTexCoord2ivARB(target,v); #//# glMultiTexCoord2ivARB_s($target,(PACKED)v); void glMultiTexCoord2ivARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2ivARB,"glMultiTexCoord2ivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)); glMultiTexCoord2ivARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord2iARB #//# glMultiTexCoord2ivARB_p($target,$s,$t); void glMultiTexCoord2ivARB_p(target,s,t) GLenum target GLint s GLint t INIT: loadProc(glMultiTexCoord2ivARB,"glMultiTexCoord2ivARB"); CODE: { GLint param[2]; param[0] = s; param[1] = t; glMultiTexCoord2ivARB(target,param); } #//# glMultiTexCoord2sARB($target,$s,$t); void glMultiTexCoord2sARB(target,s,t) GLenum target GLshort s GLshort t INIT: loadProc(glMultiTexCoord2sARB,"glMultiTexCoord2sARB"); CODE: glMultiTexCoord2sARB(target,s,t); #//# glMultiTexCoord2svARB_c($target,(CPTR)v); void glMultiTexCoord2svARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2svARB,"glMultiTexCoord2svARB"); CODE: glMultiTexCoord2svARB(target,v); #//# glMultiTexCoord2svARB_s($target,(PACKED)v); void glMultiTexCoord2svARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord2svARB,"glMultiTexCoord2svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)); glMultiTexCoord2svARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord2sARB #//# glMultiTexCoord2svARB_p($target,$s,$t); void glMultiTexCoord2svARB_p(target,s,t) GLenum target GLshort s GLshort t INIT: loadProc(glMultiTexCoord2svARB,"glMultiTexCoord2svARB"); CODE: { GLshort param[2]; param[0] = s; param[1] = t; glMultiTexCoord2svARB(target,param); } #endif #endif /* HAVE_GL */ libopengl-perl-0.6704+dfsg.orig/pgopogl.xs0000644000175000017500000000400512334200655017717 0ustar gregoagregoa/* * Copyright (C) 2003-2005 by the gtk2-perl team (see the file AUTHORS for * the full list) * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public * License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. * * $Id: Glib.xs 1077 2009-02-05 14:39:12Z tsch $ */ #include "pgopogl.h" =head2 Miscellaneous Various useful utilities defined in PGOpogl.xs. =over =item PGOPOGL_CALL_BOOT(name) call the boot code of a module by symbol rather than by name. in a perl extension which uses several xs files but only one pm, you need to bootstrap the other xs files in order to get their functions exported to perl. if the file has MODULE = Foo::Bar, the boot symbol would be boot_Foo__Bar. =item void _pgopogl_call_XS (pTHX_ void (*subaddr) (pTHX_ CV *), CV * cv, SV ** mark); never use this function directly. see C. for the curious, this calls a perl sub by function pointer rather than by name; call_sv requires that the xsub already be registered, but we need this to call a function which will register xsubs. this is an evil hack and should not be used outside of the PGOPOGL_CALL_BOOT macro. it's implemented as a function to avoid code size bloat, and exported so that extension modules can pull the same trick. =cut void _pgopogl_call_XS (pTHX_ void (*subaddr) (pTHX_ CV *), CV * cv, SV ** mark) { dSP; PUSHMARK (mark); (*subaddr) (aTHX_ cv); PUTBACK; /* forget return values */ } libopengl-perl-0.6704+dfsg.orig/ppport.h0000644000175000017500000055617612334200655017416 0ustar gregoagregoa#if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- newppp.h -- Perl/Pollution/Portability Version 3.20 Automatically created by Devel::PPPort running under perl 5.016003. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc newppp.h' to view the documentation below. ---------------------------------------------------------------------- SKIP =pod =head1 NAME newppp.h - Perl/Pollution/Portability version 3.20 =head1 SYNOPSIS perl newppp.h [options] [source files] Searches current directory for files if no [source files] are given --help show short help --version show version --patch=file write one patch file with changes --copy=suffix write changed copies with suffix --diff=program use diff program and options --compat-version=version provide compatibility with Perl version --cplusplus accept C++ comments --quiet don't output anything except fatal errors --nodiag don't show diagnostics --nohints don't show hints --nochanges don't suggest changes --nofilter don't filter input files --strip strip all script and doc functionality from newppp.h --list-provided list provided API --list-unsupported list unsupported API --api-info=name show Perl API portability information =head1 COMPATIBILITY This version of F is designed to support operation with Perl installations back to 5.003, and has been tested up to 5.11.5. =head1 OPTIONS =head2 --help Display a brief usage summary. =head2 --version Display the version of F. =head2 --patch=I If this option is given, a single patch file will be created if any changes are suggested. This requires a working diff program to be installed on your system. =head2 --copy=I If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs. Note that this does not automagially add a dot between the original filename and the suffix. If you want the dot, you have to include it in the option argument. If neither C<--patch> or C<--copy> are given, the default is to simply print the diffs for each file. This requires either C or a C program to be installed. =head2 --diff=I Manually set the diff program and options to use. The default is to use C, when installed, and output unified context diffs. =head2 --compat-version=I Tell F to check for compatibility with the given Perl version. The default is to check for compatibility with Perl version 5.003. You can use this option to reduce the output of F if you intend to be backward compatible only down to a certain Perl version. =head2 --cplusplus Usually, F will detect C++ style comments and replace them with C style comments for portability reasons. Using this option instructs F to leave C++ comments untouched. =head2 --quiet Be quiet. Don't print anything except fatal errors. =head2 --nodiag Don't output any diagnostic messages. Only portability alerts will be printed. =head2 --nohints Don't output any hints. Hints often contain useful portability notes. Warnings will still be displayed. =head2 --nochanges Don't suggest any changes. Only give diagnostic output and hints unless these are also deactivated. =head2 --nofilter Don't filter the list of input files. By default, files not looking like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. =head2 --strip Strip all script and documentation functionality from F. This reduces the size of F dramatically and may be useful if you want to include F in smaller modules without increasing their distribution size too much. The stripped F will have a C<--unstrip> option that allows you to undo the stripping, but only if an appropriate C module is installed. =head2 --list-provided Lists the API elements for which compatibility is provided by F. Also lists if it must be explicitly requested, if it has dependencies, and if there are hints or warnings for it. =head2 --list-unsupported Lists the API elements that are known not to be supported by F and below which version of Perl they probably won't be available or work. =head2 --api-info=I Show portability information for API elements matching I. If I is surrounded by slashes, it is interpreted as a regular expression. =head1 DESCRIPTION In order for a Perl extension (XS) module to be as portable as possible across differing versions of Perl itself, certain steps need to be taken. =over 4 =item * Including this header is the first major one. This alone will give you access to a large part of the Perl API that hasn't been available in earlier Perl releases. Use perl newppp.h --list-provided to see which API elements are provided by newppp.h. =item * You should avoid using deprecated parts of the API. For example, using global Perl variables without the C prefix is deprecated. Also, some API functions used to have a C prefix. Using this form is also deprecated. You can safely use the supported API, as F will provide wrappers for older Perl versions. =item * If you use one of a few functions or variables that were not present in earlier versions of Perl, and that can't be provided using a macro, you have to explicitly request support for these functions by adding one or more C<#define>s in your source code before the inclusion of F. These functions or variables will be marked C in the list shown by C<--list-provided>. Depending on whether you module has a single or multiple files that use such functions or variables, you want either C or global variants. For a C function or variable (used only in a single source file), use: #define NEED_function #define NEED_variable For a global function or variable (used in multiple source files), use: #define NEED_function_GLOBAL #define NEED_variable_GLOBAL Note that you mustn't have more than one global request for the same function or variable in your project. Function / Variable Static Request Global Request ----------------------------------------------------------------------------------------- PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL grok_number() NEED_grok_number NEED_grok_number_GLOBAL grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL load_module() NEED_load_module NEED_load_module_GLOBAL my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL pv_display() NEED_pv_display NEED_pv_display_GLOBAL pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL vload_module() NEED_vload_module NEED_vload_module_GLOBAL vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL warner() NEED_warner NEED_warner_GLOBAL To avoid namespace conflicts, you can change the namespace of the explicitly exported functions / variables using the C macro. Just C<#define> the macro before including C: #define DPPP_NAMESPACE MyOwnNamespace_ #include "newppp.h" The default namespace is C. =back The good thing is that most of the above can be checked by running F on your source code. See the next section for details. =head1 EXAMPLES To verify whether F is needed for your module, whether you should make any changes to your code, and whether any special defines should be used, F can be run as a Perl script to check your source code. Simply say: perl newppp.h The result will usually be a list of patches suggesting changes that should at least be acceptable, if not necessarily the most efficient solution, or a fix for all possible problems. If you know that your XS module uses features only available in newer Perl releases, if you're aware that it uses C++ comments, and if you want all suggestions as a single patch file, you could use something like this: perl newppp.h --compat-version=5.6.0 --cplusplus --patch=test.diff If you only want your code to be scanned without any suggestions for changes, use: perl newppp.h --nochanges You can specify a different C program or options, using the C<--diff> option: perl newppp.h --diff='diff -C 10' This would output context diffs with 10 lines of context. If you want to create patched copies of your files instead, use: perl newppp.h --copy=.new To display portability information for the C function, use: perl newppp.h --api-info=newSVpvn Since the argument to C<--api-info> can be a regular expression, you can use perl newppp.h --api-info=/_nomg$/ to display portability information for all C<_nomg> functions or perl newppp.h --api-info=/./ to display information for all known API elements. =head1 BUGS If this version of F is causing failure during the compilation of this module, please check if newer versions of either this module or C are available on CPAN before sending a bug report. If F was generated using the latest version of C and is causing failure of this module, please file a bug report using the CPAN Request Tracker at L. Please include the following information: =over 4 =item 1. The complete output from running "perl -V" =item 2. This file. =item 3. The name and version of the module you were trying to build. =item 4. A full log of the build that failed. =item 5. Any other information that you think could be relevant. =back For the latest version of this code, please get the C module from CPAN. =head1 COPYRIGHT Version 3.x, Copyright (c) 2004-2010, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. Version 1.x, Copyright (C) 1999, Kenneth Albanowski. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L. =cut use strict; # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } my $VERSION = 3.20; my %opt = ( quiet => 0, diag => 1, hints => 1, changes => 1, cplusplus => 0, filter => 1, strip => 0, version => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; my $LF = '(?:\r\n|[\r\n])'; # line feed my $HS = "[ \t]"; # horizontal whitespace # Never use C comments in this file! my $ccs = '/'.'*'; my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( help quiet diag! filter! hints! changes! cplusplus strip version patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); }; if ($@ and grep /^-/, @ARGV) { usage() if "@ARGV" =~ /^--?h(?:elp)?$/; die "Getopt::Long not found. Please don't use any options.\n"; } if ($opt{version}) { print "This is $0 $VERSION.\n"; exit 0; } usage() if $opt{help}; strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; if ($@) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { $opt{'compat-version'} = 5; } my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( AvFILLp|5.004050||p AvFILL||| BhkDISABLE||5.014000| BhkENABLE||5.014000| BhkENTRY_set||5.014000| BhkENTRY||| BhkFLAGS||| CALL_BLOCK_HOOKS||| CLASS|||n CPERLscope|5.005000||p CX_CURPAD_SAVE||| CX_CURPAD_SV||| CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p CopFILESV|5.006000||p CopFILE_set|5.006000||p CopFILE|5.006000||p CopSTASHPV_set|5.006000||p CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p CopyD|5.009002||p Copy||| CvPADLIST||| CvSTASH||| CvWEAKOUTSIDE||| DEFSV_set|5.010001||p DEFSV|5.004050||p END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p F0convert|||n FREETMPS||| GIMME_V||5.004000|n GIMME|||n GROK_NUMERIC_RADIX|5.007002||p G_ARRAY||| G_DISCARD||| G_EVAL||| G_METHOD|5.006001||p G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| GvSVn|5.009003||p GvSV||| Gv_AMupdate||5.011000| HEf_SVKEY||5.004000| HeHASH||5.004000| HeKEY||5.004000| HeKLEN||5.004000| HePV||5.004000| HeSVKEY_force||5.004000| HeSVKEY_set||5.004000| HeSVKEY||5.004000| HeUTF8||5.010001| HeVAL||5.004000| HvENAME||5.013007| HvNAMELEN_get|5.009003||p HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p IN_LOCALE_COMPILETIME|5.007002||p IN_LOCALE_RUNTIME|5.007002||p IN_LOCALE|5.007002||p IN_PERL_COMPILETIME|5.008001||p IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p IS_NUMBER_INFINITY|5.007002||p IS_NUMBER_IN_UV|5.007002||p IS_NUMBER_NAN|5.007003||p IS_NUMBER_NEG|5.007002||p IS_NUMBER_NOT_INT|5.007002||p IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| LINKLIST||5.013006| LVRET||| MARK||| MULTICALL||5.014000| MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p MoveD|5.009002||p Move||| NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p Newxc|5.009003||p Newxz|5.009003||p Newx|5.009003||p Nullav||| Nullch||| Nullcv||| Nullhv||| Nullsv||| OP_CLASS||5.013007| OP_DESC||5.007003| OP_NAME||5.007003| ORIGMARK||| PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| PAD_DUP||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| PAD_SETSV||| PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p PERL_BCDVERSION|5.014000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_HASH|5.004000||p PERL_INT_MAX|5.004000||p PERL_INT_MIN|5.004000||p PERL_LONG_MAX|5.004000||p PERL_LONG_MIN|5.004000||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p PERL_MAGIC_collxfrm|5.007002||p PERL_MAGIC_dbfile|5.007002||p PERL_MAGIC_dbline|5.007002||p PERL_MAGIC_defelem|5.007002||p PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p PERL_MAGIC_glob|5.014000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p PERL_MAGIC_mutex|5.014000||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.007002||p PERL_MAGIC_overload_table|5.007002||p PERL_MAGIC_overload|5.007002||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p PERL_MAGIC_regdatum|5.007002||p PERL_MAGIC_regex_global|5.007002||p PERL_MAGIC_shared_scalar|5.007003||p PERL_MAGIC_shared|5.007003||p PERL_MAGIC_sigelem|5.007002||p PERL_MAGIC_sig|5.007002||p PERL_MAGIC_substr|5.007002||p PERL_MAGIC_sv|5.007002||p PERL_MAGIC_taint|5.007002||p PERL_MAGIC_tiedelem|5.007002||p PERL_MAGIC_tiedscalar|5.007002||p PERL_MAGIC_tied|5.007002||p PERL_MAGIC_utf8|5.008001||p PERL_MAGIC_uvar_elem|5.007003||p PERL_MAGIC_uvar|5.007002||p PERL_MAGIC_vec|5.007002||p PERL_MAGIC_vstring|5.008001||p PERL_PV_ESCAPE_ALL|5.009004||p PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p PERL_PV_ESCAPE_NOCLEAR|5.009004||p PERL_PV_ESCAPE_QUOTE|5.009004||p PERL_PV_ESCAPE_RE|5.009005||p PERL_PV_ESCAPE_UNI_DETECT|5.009004||p PERL_PV_ESCAPE_UNI|5.009004||p PERL_PV_PRETTY_DUMP|5.009004||p PERL_PV_PRETTY_ELLIPSES|5.010000||p PERL_PV_PRETTY_LTGT|5.009004||p PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p PERL_QUAD_MAX|5.004000||p PERL_QUAD_MIN|5.004000||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.004000||p PERL_SHORT_MIN|5.004000||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| PERL_SYS_TERM||5.014000| PERL_UCHAR_MAX|5.004000||p PERL_UCHAR_MIN|5.004000||p PERL_UINT_MAX|5.004000||p PERL_UINT_MIN|5.004000||p PERL_ULONG_MAX|5.004000||p PERL_ULONG_MIN|5.004000||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p PERL_UNUSED_VAR|5.007002||p PERL_UQUAD_MAX|5.004000||p PERL_UQUAD_MIN|5.004000||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p PERL_USHORT_MAX|5.004000||p PERL_USHORT_MIN|5.004000||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p PL_bufend|5.014000||p PL_bufptr|5.014000||p PL_compiling|5.004050||p PL_copline|5.014000||p PL_curcop|5.004050||p PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p PL_error_count|5.014000||p PL_expect|5.014000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p PL_in_my_stash|5.014000||p PL_in_my|5.014000||p PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p PL_lex_state|5.014000||p PL_lex_stuff|5.014000||p PL_linestr|5.014000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_opfreehook||5.011000|n PL_parser|5.009005|5.009005|p PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rpeepp||5.013005|n PL_rsfp_filters|5.014000||p PL_rsfp|5.014000||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_statcache|5.005000||p PL_stdingv|5.004050||p PL_sv_arenaroot|5.004050||p PL_sv_no|5.004050||pn PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p PL_tokenbuf|5.014000||p POP_MULTICALL||5.014000| POPi|||n POPl|||n POPn|||n POPpbytex||5.007001|n POPpx||5.005030|n POPp|||n POPs|||n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| PUSH_MULTICALL||5.014000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| PerlIO_eof||5.007003| PerlIO_error||5.007003| PerlIO_fileno||5.007003| PerlIO_fill||5.007003| PerlIO_flush||5.007003| PerlIO_get_base||5.007003| PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| PerlIO_setlinebuf||5.007003| PerlIO_stderr||5.007003| PerlIO_stdin||5.007003| PerlIO_stdout||5.007003| PerlIO_tell||5.007003| PerlIO_unread||5.007003| PerlIO_write||5.007003| Perl_signbit||5.009005|n PoisonFree|5.009004||p PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p RETVAL|||n Renewc||| Renew||| SAVECLEARSV||| SAVECOMPPAD||| SAVEPADSV||| SAVETMPS||| SAVE_DEFSV|5.004050||p SPAGAIN||| SP||| START_EXTERN_C|5.005000||p START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p STR_WITH_LEN|5.009003||p ST||| SV_CONST_RETURN|5.009003||p SV_COW_DROP_PV|5.008001||p SV_COW_SHARED_HASH_KEYS|5.009005||p SV_GMAGIC|5.007002||p SV_HAS_TRAILING_NUL|5.009004||p SV_IMMEDIATE_UNREF|5.007001||p SV_MUTABLE_RETURN|5.009003||p SV_NOSTEAL|5.009002||p SV_SMAGIC|5.009003||p SV_UTF8_NO_ENCODING|5.008001||p SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p SVt_IV||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| SVt_PVHV||| SVt_PVMG||| SVt_PV||| Safefree||| Slab_Alloc||| Slab_Free||| Slab_to_rw||| StructCopy||| SvCUR_set||| SvCUR||| SvEND||| SvGAMAGIC||5.006001| SvGETMAGIC|5.004050||p SvGROW||| SvIOK_UV||5.006000| SvIOK_notUV||5.006000| SvIOK_off||| SvIOK_only_UV||5.006000| SvIOK_only||| SvIOK_on||| SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| SvMAGIC_set|5.009003||p SvNIOK_off||| SvNIOKp||| SvNIOK||| SvNOK_off||| SvNOK_only||| SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| SvNV_nomg||5.013002| SvNV_set||| SvNVx||| SvNV||| SvOK||| SvOOK_offset||5.011000| SvOOK||| SvPOK_off||| SvPOK_only_UTF8||5.006000| SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| SvPVX_const|5.009003||p SvPVX_mutable|5.009003||p SvPVX||| SvPV_const|5.009003||p SvPV_flags_const_nolen|5.009003||p SvPV_flags_const|5.009003||p SvPV_flags_mutable|5.009003||p SvPV_flags|5.007002||p SvPV_force_flags_mutable|5.009003||p SvPV_force_flags_nolen|5.009003||p SvPV_force_flags|5.007002||p SvPV_force_mutable|5.009003||p SvPV_force_nolen|5.009003||p SvPV_force_nomg_nolen|5.009003||p SvPV_force_nomg|5.007002||p SvPV_force|||p SvPV_mutable|5.009003||p SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p SvPV_nomg_nolen||5.013007| SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| SvPVbytex||5.006000| SvPVbyte|5.006000||p SvPVutf8_force||5.006000| SvPVutf8_nolen||5.006000| SvPVutf8x_force||5.006000| SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p SvREFCNT_inc_simple_void_NN|5.009004||p SvREFCNT_inc_simple_void|5.009004||p SvREFCNT_inc_simple|5.009004||p SvREFCNT_inc_void_NN|5.009004||p SvREFCNT_inc_void|5.009004||p SvREFCNT_inc|||p SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| SvRV_set|5.009003||p SvRV||| SvRXOK||5.009005| SvRX||5.009005| SvSETMAGIC||| SvSHARED_HASH|5.009003||p SvSHARE||5.007003| SvSTASH_set|5.009003||p SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| SvSetSV_nosteal||5.004000| SvSetSV||| SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| SvUOK|5.007001|5.006000|p SvUPGRADE||| SvUTF8_off||5.006000| SvUTF8_on||5.006000| SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p SvUV_set|5.009003||p SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| SvVSTRING_mg|5.009004||p THIS|||n UNDERBAR|5.009002||p UTF8_MAXBYTES|5.009002||p UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p WARN_ASSERTIONS|5.014000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p WARN_DEBUGGING|5.006000||p WARN_DEPRECATED|5.006000||p WARN_DIGIT|5.006000||p WARN_EXEC|5.006000||p WARN_EXITING|5.006000||p WARN_GLOB|5.006000||p WARN_INPLACE|5.006000||p WARN_INTERNAL|5.006000||p WARN_IO|5.006000||p WARN_LAYER|5.008000||p WARN_MALLOC|5.006000||p WARN_MISC|5.006000||p WARN_NEWLINE|5.006000||p WARN_NUMERIC|5.006000||p WARN_ONCE|5.006000||p WARN_OVERFLOW|5.006000||p WARN_PACK|5.006000||p WARN_PARENTHESIS|5.006000||p WARN_PIPE|5.006000||p WARN_PORTABLE|5.006000||p WARN_PRECEDENCE|5.006000||p WARN_PRINTF|5.006000||p WARN_PROTOTYPE|5.006000||p WARN_QW|5.006000||p WARN_RECURSION|5.006000||p WARN_REDEFINE|5.006000||p WARN_REGEXP|5.006000||p WARN_RESERVED|5.006000||p WARN_SEMICOLON|5.006000||p WARN_SEVERE|5.006000||p WARN_SIGNAL|5.006000||p WARN_SUBSTR|5.006000||p WARN_SYNTAX|5.006000||p WARN_TAINT|5.006000||p WARN_THREADS|5.008000||p WARN_UNINITIALIZED|5.006000||p WARN_UNOPENED|5.006000||p WARN_UNPACK|5.006000||p WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| XPUSHp||| XPUSHs||| XPUSHu|5.004000||p XSPROTO|5.010000||p XSRETURN_EMPTY||| XSRETURN_IV||| XSRETURN_NO||| XSRETURN_NV||| XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| XSRETURN|||p XST_mIV||| XST_mNO||| XST_mNV||| XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| XS_APIVERSION_BOOTCHECK||5.013004| XS_VERSION_BOOTCHECK||| XS_VERSION||| XSprePUSH|5.006000||p XS||| XopDISABLE||5.014000| XopENABLE||5.014000| XopENTRY_set||5.014000| XopENTRY||5.014000| XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p _append_range_to_invlist||| _new_invlist||| _pMY_CXT|5.007003||p _swash_inversion_hash||| _swash_to_invlist||| aMY_CXT_|5.007003||p aMY_CXT|5.007003||p aTHXR_|5.014000||p aTHXR|5.014000||p aTHX_|5.006000||p aTHX|5.006000||p add_alternate||| add_cp_to_invlist||| add_data|||n add_range_to_invlist||| add_utf16_textfilter||| addmad||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_deref_call||5.013007| amagic_i_ncmp||| amagic_ncmp||| anonymise_cv_maybe||| any_dup||| ao||| append_madprops||| apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| assert_uft8_cache_coherent||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| av_clear||| av_create_and_push||5.009005| av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| av_extend||| av_fetch||| av_fill||| av_iter_p||5.011000| av_len||| av_make||| av_pop||| av_push||| av_reify||| av_shift||| av_store||| av_undef||| av_unshift||| ax|||n bad_type||| bind_match||| block_end||| block_gimme||5.004000| block_start||| blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_mro||| bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| bytes_to_uni|||n bytes_to_utf8||5.006001| call_argv|5.006000||p call_atexit||5.006000| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p caller_cx||5.013005| calloc||5.007002|n cando||| cast_i32||5.006000| cast_iv||5.006000| cast_ulong||5.006000| cast_uv||5.006000| check_type_and_open||| check_uni||| check_utf8_print||| checkcomma||| checkposixcc||| ckWARN|5.006000||p ck_entersub_args_list||5.013006| ck_entersub_args_proto_or_list||5.013006| ck_entersub_args_proto||5.013006| ck_warner_d||5.011001|v ck_warner||5.011001|v ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| cl_and|||n cl_anything|||n cl_init|||n cl_is_anything|||n cl_or|||n clear_placeholders||| clone_params_del|||n clone_params_new|||n closest_cop||| convert||| cop_free||| cop_hints_2hv||5.013007| cop_hints_fetch_pvn||5.013007| cop_hints_fetch_pvs||5.013007| cop_hints_fetch_pv||5.013007| cop_hints_fetch_sv||5.013007| cophh_2hv||5.013007| cophh_copy||5.013007| cophh_delete_pvn||5.013007| cophh_delete_pvs||5.013007| cophh_delete_pv||5.013007| cophh_delete_sv||5.013007| cophh_fetch_pvn||5.013007| cophh_fetch_pvs||5.013007| cophh_fetch_pv||5.013007| cophh_fetch_sv||5.013007| cophh_free||5.013007| cophh_new_empty||5.014000| cophh_store_pvn||5.013007| cophh_store_pvs||5.013007| cophh_store_pv||5.013007| cophh_store_sv||5.013007| cr_textfilter||| create_eval_scope||| croak_no_modify||5.013003| croak_nocontext|||vn croak_sv||5.013001| croak_xs_usage||5.010001| croak|||v csighandler||5.009003|n curmad||| curse||| custom_op_desc||5.007003| custom_op_name||5.007003| custom_op_register||5.013007| custom_op_xop||5.013007| cv_ckproto_len||| cv_clone||| cv_const_sv||5.004000| cv_dump||| cv_get_call_checker||5.013006| cv_set_call_checker||5.013006| cv_undef||| cvgv_set||| cvstash_set||| cx_dump||5.005000| cx_dup||| cxinc||| dAXMARK|5.009003||p dAX|5.007002||p dITEMS|5.007002||p dMARK||| dMULTICALL||5.009003| dMY_CXT_SV|5.007003||p dMY_CXT|5.007003||p dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p dTHXR|5.014000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p dVAR|5.009003||p dXCPT|5.009002||p dXSARGS||| dXSI32||| dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| deb_stack_n||| debop||5.005000| debprofdump||5.005000| debprof||| debstackptrs||5.007003| debstack||5.007003| debug_start_match||| deb||5.007003|v del_sv||| delete_eval_scope||| delimcpy||5.004000|n deprecate_commaless_var_list||| despatch_signals||5.007001| destroy_matcher||| die_nocontext|||vn die_sv||5.013001| die_unwind||| die|||v dirp_dup||| div128||| djSP||| do_aexec5||| do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| do_close||| do_delete_local||| do_dump_pad||| do_eof||| do_exec3||| do_execfree||| do_exec||| do_gv_dump||5.006000| do_gvgv_dump||5.006000| do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| do_oddball||| do_op_dump||5.006000| do_op_xmldump||| do_open9||5.006000| do_openn||5.007001| do_open||5.004000| do_pmop_dump||5.006000| do_pmop_xmldump||| do_print||| do_readline||| do_seek||| do_semop||| do_shmio||| do_smartmatch||| do_spawn_nowait||| do_spawn||| do_sprintf||| do_sv_dump||5.006000| do_sysseek||| do_tell||| do_trans_complex_utf8||| do_trans_complex||| do_trans_count_utf8||| do_trans_count||| do_trans_simple_utf8||| do_trans_simple||| do_trans||| do_vecget||| do_vecset||| do_vop||| docatch||| doeval||| dofile||| dofindlabel||| doform||| doing_taint||5.008001|n dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| dopoptogiven||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| dump_all_perl||| dump_all||5.006000| dump_eval||5.006000| dump_exec_pos||| dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| dump_packsubs_perl||| dump_packsubs||5.006000| dump_sub_perl||| dump_sub||5.006000| dump_sv_child||| dump_trie_interim_list||| dump_trie_interim_table||| dump_trie||| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| emulate_cop_io||| eval_pv|5.006000||p eval_sv|5.006000||p exec_failed||| expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| fetch_cop_label||5.011000| filter_add||| filter_del||| filter_gets||| filter_read||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| find_hash_subscript||| find_in_my_stash||| find_runcv||5.008001| find_rundefsvoffset||5.009002| find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n foldEQ_latin1||5.013008|n foldEQ_locale||5.013002|n foldEQ_utf8_flags||5.013010| foldEQ_utf8||5.013002| foldEQ||5.013002|n fold_constants||| forbid_setid||| force_ident||| force_list||| force_next||| force_strict_version||| force_version||| force_word||| forget_pmop||| form_nocontext|||vn form||5.004000|v fp_dup||| fprintf_nocontext|||vn free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| get_aux_mg||| get_av|5.006000||p get_context||5.006000|n get_cvn_flags|5.009005||p get_cvs|5.011000||p get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p get_mstats||| get_no_modify||| get_num||| get_op_descs||5.005000| get_op_names||5.005000| get_opargs||| get_ppaddr||5.006000| get_re_arg||| get_sv|5.006000||p get_vtbl||5.005030| getcwd_sv||5.007002| getenv_len||| glob_2number||| glob_assign_glob||| glob_assign_ref||| gp_dup||| gp_free||| gp_ref||| grok_bin|5.007003||p grok_bslash_c||| grok_bslash_o||| grok_hex|5.007003||p grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_SVadd||| gv_add_by_type||5.011000| gv_autoload4||5.004000| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| gv_efullname3||5.004000| gv_efullname4||5.006001| gv_efullname||| gv_ename||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| gv_fetchmethod_autoload||5.004000| gv_fetchmethod_flags||5.011000| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| gv_fetchsv|5.009002||p gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| gv_get_super_pkg||| gv_handler||5.007001| gv_init_sv||| gv_init||| gv_magicalize_isa||| gv_magicalize_overload||| gv_name_set||5.009004| gv_stashpvn|5.004000||p gv_stashpvs|5.009003||p gv_stashpv||| gv_stashsv||| gv_try_downgrade||| he_dup||| hek_dup||| hfreeentries||| hsplit||| hv_assert||| hv_auxinit|||n hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_common_key_len||5.010000| hv_common||5.010000| hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.004000| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_ename_add||| hv_ename_delete||| hv_exists_ent||5.004000| hv_exists||| hv_fetch_ent||5.004000| hv_fetchs|5.009003||p hv_fetch||| hv_fill||5.013002| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.004000| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| hv_ksplit||5.004000| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| hv_placeholders_p||5.009003| hv_placeholders_set||5.009003| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.004000| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| hv_undef_flags||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| ibcmp||| incline||| incpush_if_exists||| incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| init_dbargs||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| init_interp||| init_main_stash||| init_perllib||| init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| instr|||n intro_my||| intuit_method||| intuit_more||| invert||| invlist_array||| invlist_destroy||| invlist_extend||| invlist_intersection||| invlist_len||| invlist_max||| invlist_set_array||| invlist_set_len||| invlist_set_max||| invlist_trim||| invlist_union||| invoke_exception_hook||| io_close||| isALNUMC|5.006000||p isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| isGRAPH|5.006000||p isGV_with_GP|5.009004||p isLOWER||| isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p isSPACE||| isUPPER||| isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| is_ascii_string||5.011000|n is_gv_magical_sv||| is_handle_constructor|||n is_inplace_av||| is_list_assignment||| is_lvalue_sub||5.007001| is_uni_alnum_lc||5.006000| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| is_uni_digit||5.006000| is_uni_graph_lc||5.006000| is_uni_graph||5.006000| is_uni_idfirst_lc||5.006000| is_uni_idfirst||5.006000| is_uni_lower_lc||5.006000| is_uni_lower||5.006000| is_uni_print_lc||5.006000| is_uni_print||5.006000| is_uni_punct_lc||5.006000| is_uni_punct||5.006000| is_uni_space_lc||5.006000| is_uni_space||5.006000| is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| is_utf8_X_LVT||| is_utf8_X_LV_LVT_V||| is_utf8_X_LV||| is_utf8_X_L||| is_utf8_X_T||| is_utf8_X_V||| is_utf8_X_begin||| is_utf8_X_extend||| is_utf8_X_non_hangul||| is_utf8_X_prepend||| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_char_slow|||n is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| is_utf8_perl_space||5.011001| is_utf8_perl_word||5.011001| is_utf8_posix_digit||5.011001| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| is_utf8_string_loclen||5.009003|n is_utf8_string_loc||5.008001|n is_utf8_string||5.006001|n is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| is_utf8_xidcont||5.013010| is_utf8_xidfirst||5.013010| isa_lookup||| items|||n ix|||n jmaybe||| join_exact||| keyword_plugin_standard||| keyword||| leave_scope||| lex_bufutf8||5.011002| lex_discard_to||5.011002| lex_grow_linestr||5.011002| lex_next_chunk||5.011002| lex_peek_unichar||5.011002| lex_read_space||5.011002| lex_read_to||5.011002| lex_read_unichar||5.011002| lex_start||5.009005| lex_stuff_pvn||5.011002| lex_stuff_pvs||5.013005| lex_stuff_pv||5.013006| lex_stuff_sv||5.011002| lex_unstuff||5.011002| listkids||| list||| load_module_nocontext|||vn load_module|5.006000||pv localize||| looks_like_bool||| looks_like_number||| lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p mPUSHs|5.010001||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHs|5.010001||p mXPUSHu|5.009002||p mad_free||| madlex||| madparse||| magic_clear_all_env||| magic_clearenv||| magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| magic_getpos||| magic_getsig||| magic_getsubstr||| magic_gettaint||| magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| magic_len||| magic_methcall1||| magic_methcall|||v magic_methpack||| magic_nextpack||| magic_regdata_cnt||| magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| magic_setamagic||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| magic_setmglob||| magic_setnkeys||| magic_setpack||| magic_setpos||| magic_setregexp||| magic_setsig||| magic_setsubstr||| magic_settaint||| magic_setutf8||| magic_setuvar||| magic_setvec||| magic_set||| magic_sizepack||| magic_wipepack||| make_matcher||| make_trie_failtable||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n markstack_grow||| matcher_matches_sv||| measure_struct||| memEQs|5.009005||p memEQ|5.004000||p memNEs|5.009005||p memNE|5.004000||p mem_collxfrm||| mem_log_common|||n mess_alloc||| mess_nocontext|||vn mess_sv||5.013001| mess||5.006000|v method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| mg_findext||5.013008| mg_find||| mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| mg_magical||| mg_set||| mg_size||5.005000| mini_mktime||5.007002| missingterm||| mode_from_discipline||| modkids||| mod||| more_bodies||| more_sv||| moreswitches||| mro_clean_isarev||| mro_gather_and_rename||| mro_get_from_name||5.010001| mro_get_linear_isa_dfs||| mro_get_linear_isa||5.009005| mro_get_private_data||5.010001| mro_isa_changed_in||| mro_meta_dup||| mro_meta_init||| mro_method_changed_in||5.009005| mro_package_moved||| mro_register||5.010001| mro_set_mro||5.010001| mro_set_private_data||5.010001| mul128||| mulexp10|||n munge_qwlist_to_paren_list||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy|||n my_betoh16|||n my_betoh32|||n my_betoh64|||n my_betohi|||n my_betohl|||n my_betohs|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| my_dirfd||5.009005| my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n my_htobe16|||n my_htobe32|||n my_htobe64|||n my_htobei|||n my_htobel|||n my_htobes|||n my_htole16|||n my_htole32|||n my_htole64|||n my_htolei|||n my_htolel|||n my_htoles|||n my_htonl||| my_kid||| my_letoh16|||n my_letoh32|||n my_letoh64|||n my_letohi|||n my_letohl|||n my_letohs|||n my_lstat_flags||| my_lstat||5.014000| my_memcmp||5.004000|n my_memset|||n my_ntohl||| my_pclose||5.004000| my_popen_list||5.007001| my_popen||5.004000| my_setenv||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat_flags||| my_stat||5.014000| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn my_swabn|||n my_swap||| my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| newCONSTSUB|5.004050||p newCVREF||| newDEFSVOP||| newFORM||| newFOROP||5.013007| newGIVENOP||5.009003| newGIVWHENOP||| newGP||| newGVOP||| newGVREF||| newGVgen||| newHVREF||| newHVhv||5.005000| newHV||| newIO||| newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| newMADPROP||| newMADsv||| newMYSUB||| newNULLLIST||| newOP||| newPADOP||| newPMOP||| newPROG||| newPVOP||| newRANGE||| newRV_inc|5.004000||p newRV_noinc|5.004000||p newRV||| newSLICEOP||| newSTATEOP||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p newSVhek||5.009003| newSViv||| newSVnv||| newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v newSVpvn_flags|5.010001||p newSVpvn_share|5.007001||p newSVpvn_utf8|5.010001||p newSVpvn|5.004050||p newSVpvs_flags|5.010001||p newSVpvs_share|5.009003||p newSVpvs|5.009003||p newSVpv||| newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| newTOKEN||| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.013007| newXS_flags||5.009004| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| new_constant||| new_ctype||5.006000| new_he||| new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| new_warnings_bitfield||| next_symbol||| nextargv||| nextchar||| ninstr|||n no_bareword_allowed||| no_fh_allowed||| no_op||| not_a_number||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n oopsAV||| oopsHV||| op_append_elem||5.013006| op_append_list||5.013006| op_clear||| op_const_sv||| op_contextualize||5.013006| op_dump||5.006000| op_free||| op_getmad_weak||| op_getmad||| op_linklist||5.013006| op_lvalue||5.013007| op_null||5.007002| op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| op_scope||5.013007| op_xmldump||| open_script||| opt_scalarhv||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p pTHX|5.006000||p packWARN|5.007003||p pack_cat||5.007003| pack_rec||| package_version||| package||| packlist||5.008001| pad_add_anon||| pad_add_name_sv||| pad_add_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||| pad_findlex||| pad_findmy||5.011002| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| pad_new||| pad_peg|||n pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| pad_tidy||| padlist_dup||| parse_arithexpr||5.013008| parse_barestmt||5.013007| parse_block||5.013007| parse_body||| parse_fullexpr||5.013008| parse_fullstmt||5.013005| parse_label||5.013007| parse_listexpr||5.013008| parse_stmtseq||5.013006| parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| parser_free||| path_is_absolute|||n peep||| pending_Slabs_to_ro||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n perl_clone|||n perl_construct|||n perl_destruct||5.007003|n perl_free|||n perl_parse||5.006000|n perl_run|||n pidgone||| pm_description||| pmop_dump||5.006000| pmop_xmldump||| pmruntime||| pmtrans||| pop_scope||| populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| prepend_madprops||| prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n ptr_table_free||5.009005| ptr_table_new||5.009005| ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| put_byte||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| re_compile||5.009005| re_croak2||| re_dup_guts||| re_intuit_start||5.009005| re_intuit_string||5.006000| readpipe_override||| realloc||5.007002|n reentrant_free||| reentrant_init||| reentrant_retry|||vn reentrant_size||| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch_pvn||| refcounted_he_fetch_pvs||| refcounted_he_fetch_pv||| refcounted_he_fetch_sv||| refcounted_he_free||| refcounted_he_inc||| refcounted_he_new_pvn||| refcounted_he_new_pvs||| refcounted_he_new_pv||| refcounted_he_new_sv||| refcounted_he_value||| refkids||| refto||| ref||5.014000| reg_check_named_buff_matched||| reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| reg_named_buff_firstkey||5.009005| reg_named_buff_iter||| reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| reg_namedseq||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| reg_numbered_buff_store||| reg_qr_package||| reg_recode||| reg_scan_name||| reg_skipcomment||| reg_temp_copy||| reganode||| regatom||| regbranch||| regclass_swash||5.009004| regclass||| regcppop||| regcppush||| regcurly||| regdump_extflags||| regdump||5.005000| regdupe_internal||| regexec_flags||5.005000| regfree_internal||5.009005| reghop3|||n reghop4|||n reghopmaybe3|||n reginclass||| reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| regpiece||| regpposixcc||| regprop||| regrepeat||| regtail_study||| regtail||| regtry||| reguni||| regwhite|||n reg||| repeatcpy|||n report_evil_fh||| report_uninit||| report_wrongway_fh||| require_pv||5.006000| require_tie_mod||| restore_magic||| rninstr|||n rpeep||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| rv2cv_op_cv||5.013006| rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| safesyscalloc||5.006000|n safesysfree||5.006000|n safesysmalloc||5.006000|n safesysrealloc||5.006000|n same_dirent||| save_I16||5.004000| save_I32||| save_I8||5.006000| save_adelete||5.011000| save_aelem_flags||5.011000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| save_ary||| save_bool||5.008001| save_clearsv||| save_delete||| save_destructor_x||5.006000| save_destructor||5.006000| save_freeop||| save_freepv||| save_freesv||| save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| save_hdelete||5.011000| save_hek_flags|||n save_helem_flags||5.011000| save_helem||5.004050| save_hints||5.010001| save_hptr||| save_int||| save_item||| save_iv||5.005000| save_lines||| save_list||| save_long||| save_magic||| save_mortalizesv||5.007001| save_nogv||| save_op||5.005000| save_padsv_and_mortalize||5.010001| save_pptr||| save_pushi32ptr||5.010001| save_pushptri32ptr||| save_pushptrptr||5.010001| save_pushptr||5.010001| save_re_context||5.006000| save_scalar_at||| save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| save_svref||| save_vptr||5.006000| savepvn||| savepvs||5.009003| savepv||| savesharedpvn||5.009005| savesharedpvs||5.013006| savesharedpv||5.007003| savesharedsvpv||5.013006| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| sawparens||| scalar_mod_type|||n scalarboolean||| scalarkids||| scalarseq||| scalarvoid||| scalar||| scan_bin||5.006000| scan_commit||| scan_const||| scan_formline||| scan_heredoc||| scan_hex||| scan_ident||| scan_inputsymbol||| scan_num||5.007001| scan_oct||| scan_pat||| scan_str||| scan_subst||| scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| screaminstr||5.005000| search_const||| seed||5.008001| sequence_num||| sequence_tail||| sequence||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| set_regclass_bit_fold||| set_regclass_bit||| setdefout||| share_hek_flags||| share_hek||5.004000| si_dup||| sighandler|||n simplify_sort||| skipspace0||| skipspace1||| skipspace2||| skipspace||| softref2xv||| sortcv_stacked||| sortcv_xsub||| sortcv||| sortsv_flags||5.009003| sortsv||5.007003| space_join_names_mortal||| ss_dup||| stack_grow||| start_force||| start_glob||| start_subparse||5.004000| stashpv_hvname_match||5.014000| stdize_locale||| store_cop_label||| strEQ||| strGE||| strGT||| strLE||| strLT||| strNE||| str_to_version||5.006000| strip_return||| strnEQ||| strnNE||| study_chunk||| sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| sv_2bool_flags||5.013006| sv_2bool||| sv_2cv||| sv_2io||| sv_2iuv_common||| sv_2iuv_non_preserve||| sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2num||| sv_2nv_flags||5.013001| sv_2pv_flags|5.007002||p sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen|5.006000||p sv_2pvbyte|5.006000||p sv_2pvutf8_nolen||5.006000| sv_2pvutf8||5.006000| sv_2pv||| sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| sv_backoff||| sv_bless||| sv_cat_decode||5.008001| sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p sv_catpv_nomg||5.013006| sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn sv_catpvf||5.004000|v sv_catpvn_flags||5.007002| sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpvs_flags||5.013006| sv_catpvs_mg||5.013006| sv_catpvs_nomg||5.013006| sv_catpvs|5.009003||p sv_catpv||| sv_catsv_flags||5.007002| sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_catxmlpvn||| sv_catxmlpv||| sv_catxmlsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| sv_cmp_flags||5.013006| sv_cmp_locale_flags||5.013006| sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm_flags||5.013006| sv_collxfrm||| sv_compile_2op_is_broken||| sv_compile_2op||5.008001| sv_copypv||5.007003| sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| sv_derived_from||5.004000| sv_destroyable||5.010000| sv_does||5.009004| sv_dump||| sv_dup_common||| sv_dup_inc_multiple||| sv_dup_inc||| sv_dup||| sv_eq_flags||5.013006| sv_eq||| sv_exp_grow||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| sv_gets||5.004000| sv_grow||| sv_i_ncmp||| sv_inc_nomg||5.013002| sv_inc||| sv_insert_flags||5.010001| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| sv_len_utf8||5.006000| sv_len||| sv_magic_portable|5.014000|5.004000|p sv_magicext||5.007003| sv_magic||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| sv_peek||5.005000| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| sv_pos_u2b_flags||5.011005| sv_pos_u2b_forwards|||n sv_pos_u2b_midway|||n sv_pos_u2b||5.006000| sv_pvbyten_force||5.006000| sv_pvbyten||5.006000| sv_pvbyte||5.006000| sv_pvn_force_flags|5.007002||p sv_pvn_force||| sv_pvn_nomg|5.007003|5.005000|p sv_pvn||5.005000| sv_pvutf8n_force||5.006000| sv_pvutf8n||5.006000| sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| sv_release_COW||| sv_replace||| sv_report_used||| sv_reset||| sv_rvweaken||5.006000| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p sv_setnv||| sv_setpv_mg|5.004050||p sv_setpvf_mg_nocontext|||pvn sv_setpvf_mg|5.006000|5.004000|pv sv_setpvf_nocontext|||vn sv_setpvf||5.004000|v sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.004050||p sv_setpvn||| sv_setpvs_mg||5.013006| sv_setpvs|5.009004||p sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| sv_setref_pvs||5.013006| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| sv_setsv_flags||5.007002| sv_setsv_mg|5.004050||p sv_setsv_nomg|5.007002||p sv_setsv||| sv_setuv_mg|5.004050||p sv_setuv|5.004000||p sv_tainted||5.004000| sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| sv_unmagicext||5.013008| sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| sv_untaint||5.004000| sv_upgrade||| sv_usepvn_flags||5.009004| sv_usepvn_mg|5.004050||p sv_usepvn||| sv_utf8_decode||5.006000| sv_utf8_downgrade||5.006000| sv_utf8_encode||5.006000| sv_utf8_upgrade_flags_grow||5.011000| sv_utf8_upgrade_flags||5.007002| sv_utf8_upgrade_nomg||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p sv_xmlpeek||| svtype||| swallow_bom||| swash_fetch||5.007002| swash_get||| swash_init||5.006000| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| sys_intern_dup||| sys_intern_init||| sys_term||5.010000|n taint_env||| taint_proper||| tied_method|||v tmps_grow||5.006000| toLOWER||| toUPPER||| to_byte_substr||| to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| to_uni_title_lc||5.006000| to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| to_utf8_fold||5.007003| to_utf8_lower||5.007003| to_utf8_substr||| to_utf8_title||5.007003| to_utf8_upper||5.007003| token_free||| token_getmad||| tokenize_use||| tokeq||| tokereport||| too_few_arguments||| too_many_arguments||| try_amagic_bin||| try_amagic_un||| uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.004000| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| usage||| utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| utf8_hop||5.006000| utf8_length||5.007001| utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| utf8_to_uvchr||5.007001| utf8_to_uvuni||5.007001| utf8n_to_uvchr||| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| uvchr_to_utf8||| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| vform||5.006000| visit||| vivify_defelem||| vivify_ref||| vload_module|5.006000||p vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| vstringify||5.009000| vverify||5.009003| vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn warn_sv||5.013001| warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v watch||| whichsig||| with_queued_errors||| write_no_mem||| write_to_stderr||| xmldump_all_perl||| xmldump_all||| xmldump_attr||| xmldump_eval||| xmldump_form||| xmldump_indent|||v xmldump_packsubs_perl||| xmldump_packsubs||| xmldump_sub_perl||| xmldump_sub||| xmldump_vindent||| xs_apiversion_bootcheck||| xs_version_bootcheck||| yyerror||| yylex||| yyparse||| yyunlex||| yywarn||| ); if (exists $opt{'list-unsupported'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{todo}; print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; } exit 0; } # Scan for possible replacement candidates my(%replace, %need, %hints, %warnings, %depends); my $replace = 0; my($hint, $define, $function); sub find_api { my $code = shift; $code =~ s{ / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; grep { exists $API{$_} } $code =~ /(\w+)/mg; } while () { if ($hint) { my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; if (m{^\s*\*\s(.*?)\s*$}) { for (@{$hint->[1]}) { $h->{$_} ||= ''; # suppress warning with older perls $h->{$_} .= "$1\n"; } } else { undef $hint } } $hint = [$1, [split /,?\s+/, $2]] if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; if ($define) { if ($define->[1] =~ /\\$/) { $define->[1] .= $_; } else { if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { my @n = find_api($define->[1]); push @{$depends{$define->[0]}}, @n if @n } undef $define; } } $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; if ($function) { if (/^}/) { if (exists $API{$function->[0]}) { my @n = find_api($function->[1]); push @{$depends{$function->[0]}}, @n if @n } undef $function; } else { $function->[1] .= $_; } } $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { my @deps = map { s/\s+//g; $_ } split /,/, $3; my $d; for $d (map { s/\s+//g; $_ } split /,/, $1) { push @{$depends{$d}}, @deps; } } $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } for (values %depends) { my %s; $_ = [sort grep !$s{$_}++, @$_]; } if (exists $opt{'api-info'}) { my $f; my $count = 0; my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $f =~ /$match/; print "\n=== $f ===\n\n"; my $info = 0; if ($API{$f}{base} || $API{$f}{todo}) { my $base = format_version($API{$f}{base} || $API{$f}{todo}); print "Supported at least starting from perl-$base.\n"; $info++; } if ($API{$f}{provided}) { my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; print "Support by $ppport provided back to perl-$todo.\n"; print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; print "\n$hints{$f}" if exists $hints{$f}; print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; $info++; } print "No portability information available.\n" unless $info; $count++; } $count or print "Found no API matching '$opt{'api-info'}'."; print "\n"; exit 0; } if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{provided}; my @flags; push @flags, 'explicit' if exists $need{$f}; push @flags, 'depend' if exists $depends{$f}; push @flags, 'hint' if exists $hints{$f}; push @flags, 'warning' if exists $warnings{$f}; my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; print "$f$flags\n"; } exit 0; } my @files; my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); my $srcext = join '|', map { quotemeta $_ } @srcext; if (@ARGV) { my %seen; for (@ARGV) { if (-e) { if (-f) { push @files, $_ unless $seen{$_}++; } else { warn "'$_' is not a file.\n" } } else { my @new = grep { -f } glob $_ or warn "'$_' does not exist.\n"; push @files, grep { !$seen{$_}++ } @new; } } } else { eval { require File::Find; File::Find::find(sub { $File::Find::name =~ /($srcext)$/i and push @files, $File::Find::name; }, '.'); }; if ($@) { @files = map { glob "*$_" } @srcext; } } if (!@ARGV || $opt{filter}) { my(@in, @out); my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; for (@files) { my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; push @{ $out ? \@out : \@in }, $_; } if (@ARGV && @out) { warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); } @files = @in; } die "No input files given!\n" unless @files; my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; my $patch_opened = 0; for $filename (@files) { unless (open IN, "<$filename") { warn "Unable to read from $filename: $!\n"; next; } info("Scanning $filename ..."); my $c = do { local $/; }; close IN; my %file = (orig => $c, changes => 0); # Temporarily remove C/XS comments and strings from the code my @ccom; $c =~ s{ ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) | ( ^$HS*\#[^\r\n]* | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) }{ defined $2 and push @ccom, $2; defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; $file{ccom} = \@ccom; $file{code} = $c; $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; my $func; for $func (keys %API) { my $match = $func; $match .= "|$revreplace{$func}" if exists $revreplace{$func}; if ($c =~ /\b(?:Perl_)?($match)\b/) { $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; if (exists $API{$func}{provided}) { $file{uses_provided}{$func}++; if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { $file{uses}{$func}++; my @deps = rec_depend($func); if (@deps) { $file{uses_deps}{$func} = \@deps; for (@deps) { $file{uses}{$_} = 0 unless exists $file{uses}{$_}; } } for ($func, @deps) { $file{needs}{$_} = 'static' if exists $need{$_}; } } } if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { if ($c =~ /\b$func\b/) { $file{uses_todo}{$func}++; } } } } while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { if (exists $need{$2}) { $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; } else { warning("Possibly wrong #define $1 in $filename") } } for (qw(uses needs uses_todo needed_global needed_static)) { for $func (keys %{$file{$_}}) { push @{$global{$_}{$func}}, $filename; } } $files{$filename} = \%file; } # Globally resolve NEED_'s my $need; for $need (keys %{$global{needs}}) { if (@{$global{needs}{$need}} > 1) { my @targets = @{$global{needs}{$need}}; my @t = grep $files{$_}{needed_global}{$need}, @targets; @targets = @t if @t; @t = grep /\.xs$/i, @targets; @targets = @t if @t; my $target = shift @targets; $files{$target}{needs}{$need} = 'global'; for (@{$global{needs}{$need}}) { $files{$_}{needs}{$need} = 'extern' if $_ ne $target; } } } for $filename (@files) { exists $files{$filename} or next; info("=== Analyzing $filename ==="); my %file = %{$files{$filename}}; my $func; my $c = $file{code}; my $warnings = 0; for $func (sort keys %{$file{uses_Perl}}) { if ($API{$func}{varargs}) { unless ($API{$func}{nothxarg}) { my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); if ($changes) { warning("Doesn't pass interpreter argument aTHX to Perl_$func"); $file{changes} += $changes; } } } else { warning("Uses Perl_$func instead of $func"); $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} {$func$1(}g); } } for $func (sort keys %{$file{uses_replace}}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } for $func (sort keys %{$file{uses_provided}}) { if ($file{uses}{$func}) { if (exists $file{uses_deps}{$func}) { diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); } else { diag("Uses $func"); } } $warnings += hint($func); } unless ($opt{quiet}) { for $func (sort keys %{$file{uses_todo}}) { print "*** WARNING: Uses $func, which may not be portable below perl ", format_version($API{$func}{todo}), ", even with '$ppport'\n"; $warnings++; } } for $func (sort keys %{$file{needed_static}}) { my $message = ''; if (not exists $file{uses}{$func}) { $message = "No need to define NEED_$func if $func is never used"; } elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { $message = "No need to define NEED_$func when already needed globally"; } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); } } for $func (sort keys %{$file{needed_global}}) { my $message = ''; if (not exists $global{uses}{$func}) { $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; } elsif (exists $file{needs}{$func}) { if ($file{needs}{$func} eq 'extern') { $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; } elsif ($file{needs}{$func} eq 'static') { $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; } } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); } } $file{needs_inc_ppport} = keys %{$file{uses}}; if ($file{needs_inc_ppport}) { my $pp = ''; for $func (sort keys %{$file{needs}}) { my $type = $file{needs}{$func}; next if $type eq 'extern'; my $suffix = $type eq 'global' ? '_GLOBAL' : ''; unless (exists $file{"needed_$type"}{$func}) { if ($type eq 'global') { diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); } else { diag("File needs $func, adding static request"); } $pp .= "#define NEED_$func$suffix\n"; } } if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { $pp = ''; $file{changes}++; } unless ($file{has_inc_ppport}) { diag("Needs to include '$ppport'"); $pp .= qq(#include "$ppport"\n) } if ($pp) { $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) || ($c =~ s/^/$pp/); } } else { if ($file{has_inc_ppport}) { diag("No need to include '$ppport'"); $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); } } # put back in our C comments my $ix; my $cppc = 0; my @ccom = @{$file{ccom}}; for $ix (0 .. $#ccom) { if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { $cppc++; $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; } else { $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; } } if ($cppc) { my $s = $cppc != 1 ? 's' : ''; warning("Uses $cppc C++ style comment$s, which is not portable"); } my $s = $warnings != 1 ? 's' : ''; my $warn = $warnings ? " ($warnings warning$s)" : ''; info("Analysis completed$warn"); if ($file{changes}) { if (exists $opt{copy}) { my $newfile = "$filename$opt{copy}"; if (-e $newfile) { error("'$newfile' already exists, refusing to write copy of '$filename'"); } else { local *F; if (open F, ">$newfile") { info("Writing copy of '$filename' with changes to '$newfile'"); print F $c; close F; } else { error("Cannot open '$newfile' for writing: $!"); } } } elsif (exists $opt{patch} || $opt{changes}) { if (exists $opt{patch}) { unless ($patch_opened) { if (open PATCH, ">$opt{patch}") { $patch_opened = 1; } else { error("Cannot open '$opt{patch}' for writing: $!"); delete $opt{patch}; $opt{changes} = 1; goto fallback; } } mydiff(\*PATCH, $filename, $c); } else { fallback: info("Suggested changes:"); mydiff(\*STDOUT, $filename, $c); } } else { my $s = $file{changes} == 1 ? '' : 's'; info("$file{changes} potentially required change$s detected"); } } else { info("Looks good"); } } close PATCH if $patch_opened; exit 0; sub try_use { eval "use @_;"; return $@ eq '' } sub mydiff { local *F = shift; my($file, $str) = @_; my $diff; if (exists $opt{diff}) { $diff = run_diff($opt{diff}, $file, $str); } if (!defined $diff and try_use('Text::Diff')) { $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); $diff = <
$tmp") { print F $str; close F; if (open F, "$prog $file $tmp |") { while () { s/\Q$tmp\E/$file.patched/; $diff .= $_; } close F; unlink $tmp; return $diff; } unlink $tmp; } else { error("Cannot open '$tmp' for writing: $!"); } return undef; } sub rec_depend { my($func, $seen) = @_; return () unless exists $depends{$func}; $seen = {%{$seen||{}}}; return () if $seen->{$func}++; my %s; grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; } sub parse_version { my $ver = shift; if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { return ($1, $2, $3); } elsif ($ver !~ /^\d+\.[\d_]+$/) { die "cannot parse version '$ver'\n"; } $ver =~ s/_//g; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "cannot parse version '$ver'\n"; } } return ($r, $v, $s); } sub format_version { my $ver = shift; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "invalid version '$ver'\n"; } $s /= 10; $ver = sprintf "%d.%03d", $r, $v; $s > 0 and $ver .= sprintf "_%02d", $s; return $ver; } return sprintf "%d.%d.%d", $r, $v, $s; } sub info { $opt{quiet} and return; print @_, "\n"; } sub diag { $opt{quiet} and return; $opt{diag} and print @_, "\n"; } sub warning { $opt{quiet} and return; print "*** ", @_, "\n"; } sub error { print "*** ERROR: ", @_, "\n"; } my %given_hints; my %given_warnings; sub hint { $opt{quiet} and return; my $func = shift; my $rv = 0; if (exists $warnings{$func} && !$given_warnings{$func}++) { my $warn = $warnings{$func}; $warn =~ s!^!*** !mg; print "*** WARNING: $func\n", $warn; $rv++; } if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { my $hint = $hints{$func}; $hint =~ s/^/ /mg; print " --- hint for $func ---\n", $hint; } $rv; } sub usage { my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; my %M = ( 'I' => '*' ); $usage =~ s/^\s*perl\s+\S+/$^X $0/; $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; print < }; my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; $copy =~ s/^(?=\S+)/ /gms; $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; $self =~ s/^SKIP.*(?=^__DATA__)/SKIP if (\@ARGV && \$ARGV[0] eq '--unstrip') { eval { require Devel::PPPort }; \$@ and die "Cannot require Devel::PPPort, please install.\\n"; if (eval \$Devel::PPPort::VERSION < $VERSION) { die "$0 was originally generated with Devel::PPPort $VERSION.\\n" . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" . "Please install a newer version, or --unstrip will not work.\\n"; } Devel::PPPort::WriteFile(\$0); exit 0; } print <$0" or die "cannot strip $0: $!\n"; print OUT "$pl$c\n"; exit 0; } __DATA__ */ #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ #ifndef DPPP_NAMESPACE # define DPPP_NAMESPACE DPPP_ #endif #define DPPP_CAT2(x,y) CAT2(x,y) #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error newppp.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP #endif #ifndef dTHXa # define dTHXa(x) dNOOP #endif #ifndef pTHX # define pTHX void #endif #ifndef pTHX_ # define pTHX_ #endif #ifndef aTHX # define aTHX #endif #ifndef aTHX_ # define aTHX_ #endif #if (PERL_BCDVERSION < 0x5006000) # ifdef USE_THREADS # define aTHXR thr # define aTHXR_ thr, # else # define aTHXR # define aTHXR_ # endif # define dTHXR dTHR #else # define aTHXR aTHX # define aTHXR_ aTHX_ # define dTHXR dTHX #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) #endif #ifdef I_LIMITS # include #endif #ifndef PERL_UCHAR_MIN # define PERL_UCHAR_MIN ((unsigned char)0) #endif #ifndef PERL_UCHAR_MAX # ifdef UCHAR_MAX # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) # else # ifdef MAXUCHAR # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) # else # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif # endif #endif #ifndef PERL_USHORT_MIN # define PERL_USHORT_MIN ((unsigned short)0) #endif #ifndef PERL_USHORT_MAX # ifdef USHORT_MAX # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) # else # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else # ifdef USHRT_MAX # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) # else # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) # endif # endif # endif #endif #ifndef PERL_SHORT_MAX # ifdef SHORT_MAX # define PERL_SHORT_MAX ((short)SHORT_MAX) # else # ifdef MAXSHORT /* Often used in */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else # ifdef SHRT_MAX # define PERL_SHORT_MAX ((short)SHRT_MAX) # else # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) # endif # endif # endif #endif #ifndef PERL_SHORT_MIN # ifdef SHORT_MIN # define PERL_SHORT_MIN ((short)SHORT_MIN) # else # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else # ifdef SHRT_MIN # define PERL_SHORT_MIN ((short)SHRT_MIN) # else # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif #ifndef PERL_UINT_MAX # ifdef UINT_MAX # define PERL_UINT_MAX ((unsigned int)UINT_MAX) # else # ifdef MAXUINT # define PERL_UINT_MAX ((unsigned int)MAXUINT) # else # define PERL_UINT_MAX (~(unsigned int)0) # endif # endif #endif #ifndef PERL_UINT_MIN # define PERL_UINT_MIN ((unsigned int)0) #endif #ifndef PERL_INT_MAX # ifdef INT_MAX # define PERL_INT_MAX ((int)INT_MAX) # else # ifdef MAXINT /* Often used in */ # define PERL_INT_MAX ((int)MAXINT) # else # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) # endif # endif #endif #ifndef PERL_INT_MIN # ifdef INT_MIN # define PERL_INT_MIN ((int)INT_MIN) # else # ifdef MININT # define PERL_INT_MIN ((int)MININT) # else # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) # endif # endif #endif #ifndef PERL_ULONG_MAX # ifdef ULONG_MAX # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) # else # ifdef MAXULONG # define PERL_ULONG_MAX ((unsigned long)MAXULONG) # else # define PERL_ULONG_MAX (~(unsigned long)0) # endif # endif #endif #ifndef PERL_ULONG_MIN # define PERL_ULONG_MIN ((unsigned long)0L) #endif #ifndef PERL_LONG_MAX # ifdef LONG_MAX # define PERL_LONG_MAX ((long)LONG_MAX) # else # ifdef MAXLONG # define PERL_LONG_MAX ((long)MAXLONG) # else # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) # endif # endif #endif #ifndef PERL_LONG_MIN # ifdef LONG_MIN # define PERL_LONG_MIN ((long)LONG_MIN) # else # ifdef MINLONG # define PERL_LONG_MIN ((long)MINLONG) # else # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif # endif #endif #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) # ifndef PERL_UQUAD_MAX # ifdef ULONGLONG_MAX # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) # else # ifdef MAXULONGLONG # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) # else # define PERL_UQUAD_MAX (~(unsigned long long)0) # endif # endif # endif # ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN ((unsigned long long)0L) # endif # ifndef PERL_QUAD_MAX # ifdef LONGLONG_MAX # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) # else # ifdef MAXLONGLONG # define PERL_QUAD_MAX ((long long)MAXLONGLONG) # else # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) # endif # endif # endif # ifndef PERL_QUAD_MIN # ifdef LONGLONG_MIN # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) # else # ifdef MINLONGLONG # define PERL_QUAD_MIN ((long long)MINLONGLONG) # else # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif /* This is based on code from 5.003 perl.h */ #ifdef HAS_QUAD # ifdef cray #ifndef IVTYPE # define IVTYPE int #endif #ifndef IV_MIN # define IV_MIN PERL_INT_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_INT_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UINT_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UINT_MAX #endif # ifdef INTSIZE #ifndef IVSIZE # define IVSIZE INTSIZE #endif # endif # else # if defined(convex) || defined(uts) #ifndef IVTYPE # define IVTYPE long long #endif #ifndef IV_MIN # define IV_MIN PERL_QUAD_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_QUAD_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UQUAD_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UQUAD_MAX #endif # ifdef LONGLONGSIZE #ifndef IVSIZE # define IVSIZE LONGLONGSIZE #endif # endif # else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif # ifdef LONGSIZE #ifndef IVSIZE # define IVSIZE LONGSIZE #endif # endif # endif # endif #ifndef IVSIZE # define IVSIZE 8 #endif #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif #ifndef PERL_QUAD_MAX # define PERL_QUAD_MAX IV_MAX #endif #ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN UV_MIN #endif #ifndef PERL_UQUAD_MAX # define PERL_UQUAD_MAX UV_MAX #endif #else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef UVTYPE # define UVTYPE unsigned IVTYPE #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef sv_setuv # define sv_setuv(sv, uv) \ STMT_START { \ UV TeMpUv = uv; \ if (TeMpUv <= IV_MAX) \ sv_setiv(sv, TeMpUv); \ else \ sv_setnv(sv, (double)TeMpUv); \ } STMT_END #endif #ifndef newSVuv # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) #endif #ifndef sv_2uv # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) #endif #ifndef SvUVX # define SvUVX(sv) ((UV)SvIVX(sv)) #endif #ifndef SvUVXx # define SvUVXx(sv) SvUVX(sv) #endif #ifndef SvUV # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) #endif #ifndef SvUVx # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) #endif /* Hint: sv_uv * Always use the SvUVx() macro instead of sv_uv(). */ #ifndef sv_uv # define sv_uv(sv) SvUVx(sv) #endif #if !defined(SvUOK) && defined(SvIOK_UV) # define SvUOK(sv) SvIOK_UV(sv) #endif #ifndef XST_mUV # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) #endif #ifndef XSRETURN_UV # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END #endif #ifndef PUSHu # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END #endif #ifndef XPUSHu # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif #ifdef HAS_MEMCMP #ifndef memNE # define memNE(s1,s2,l) (memcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) #endif #else #ifndef memNE # define memNE(s1,s2,l) (bcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif #endif #ifndef memEQs # define memEQs(s1, l, s2) \ (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1))) #endif #ifndef memNEs # define memNEs(s1, l, s2) !memEQs(s1, l, s2) #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifndef CopyD # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifdef HAS_MEMSET #ifndef ZeroD # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) #endif #else #ifndef ZeroD # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) #endif #endif #ifndef PoisonWith # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) #endif #ifndef PoisonNew # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) #endif #ifndef PoisonFree # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) #endif #ifndef Poison # define Poison(d,n,t) PoisonFree(d,n,t) #endif #ifndef Newx # define Newx(v,n,t) New(0,v,n,t) #endif #ifndef Newxc # define Newxc(v,n,t,c) Newc(0,v,n,t,c) #endif #ifndef Newxz # define Newxz(v,n,t) Newz(0,v,n,t) #endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif # else # define PERL_UNUSED_DECL # endif #endif #ifndef PERL_UNUSED_ARG # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ # include # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) # else # define PERL_UNUSED_ARG(x) ((void)x) # endif #endif #ifndef PERL_UNUSED_VAR # define PERL_UNUSED_VAR(x) ((void)x) #endif #ifndef PERL_UNUSED_CONTEXT # ifdef USE_ITHREADS # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) # else # define PERL_UNUSED_CONTEXT # endif #endif #ifndef NOOP # define NOOP /*EMPTY*/(void)0 #endif #ifndef dNOOP # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif #endif #ifndef PTR2ul # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif #ifndef PTR2nat # define PTR2nat(p) (PTRV)(p) #endif #ifndef NUM2PTR # define NUM2PTR(any,d) (any)PTR2nat(d) #endif #ifndef PTR2IV # define PTR2IV(p) INT2PTR(IV,p) #endif #ifndef PTR2UV # define PTR2UV(p) INT2PTR(UV,p) #endif #ifndef PTR2NV # define PTR2NV(p) NUM2PTR(NV,p) #endif #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus # define START_EXTERN_C extern "C" { # define END_EXTERN_C } # define EXTERN_C extern "C" #else # define START_EXTERN_C # define END_EXTERN_C # define EXTERN_C extern #endif #if defined(PERL_GCC_PEDANTIC) # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) # ifndef PERL_USE_GCC_BRACE_GROUPS # define PERL_USE_GCC_BRACE_GROUPS # endif #endif #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ # define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) # define STMT_START if (1) # define STMT_END else (void)0 # else # define STMT_START do # define STMT_END while (0) # endif #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif #ifndef DEFSV_set # define DEFSV_set(sv) (DEFSV = (sv)) #endif /* Older perls (<=5.003) lack AvFILLp */ #ifndef AvFILLp # define AvFILLp AvFILL #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif /* Hint: gv_stashpvn * This function's backport doesn't support the length parameter, but * rather ignores it. Portability can only be ensured if the length * parameter is used for speed reasons, but the length can always be * correctly computed from the string argument. */ #ifndef gv_stashpvn # define gv_stashpvn(str,len,create) gv_stashpv(str,create) #endif /* Replace: 1 */ #ifndef get_cv # define get_cv perl_get_cv #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef get_av # define get_av perl_get_av #endif #ifndef get_hv # define get_hv perl_get_hv #endif /* Replace: 0 */ #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif #ifndef UNDERBAR # define UNDERBAR DEFSV #endif #ifndef dAX # define dAX I32 ax = MARK - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #ifndef dXSTARG # define dXSTARG SV * targ = sv_newmortal() #endif #ifndef dAXMARK # define dAXMARK I32 ax = POPMARK; \ register SV ** const mark = PL_stack_base + ax++ #endif #ifndef XSprePUSH # define XSprePUSH (sp = PL_stack_base + ax - 1) #endif #if (PERL_BCDVERSION < 0x5005000) # undef XSRETURN # define XSRETURN(off) \ STMT_START { \ PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ return; \ } STMT_END #endif #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif #ifndef SVfARG # define SVfARG(p) ((void*)(p)) #endif #ifndef PERL_ABS # define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) #endif #ifndef dVAR # define dVAR dNOOP #endif #ifndef SVf # define SVf "_" #endif #ifndef UTF8_MAXBYTES # define UTF8_MAXBYTES UTF8_MAXLEN #endif #ifndef CPERLscope # define CPERLscope(x) x #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ STMT_START { \ const char *s_PeRlHaSh = str; \ I32 i_PeRlHaSh = len; \ U32 hash_PeRlHaSh = 0; \ while (i_PeRlHaSh--) \ hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ (hash) = hash_PeRlHaSh; \ } STMT_END #endif #ifndef PERLIO_FUNCS_DECL # ifdef PERLIO_FUNCS_CONST # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) # else # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (funcs) # endif #endif /* provide these typedefs for older perls */ #if (PERL_BCDVERSION < 0x5009003) # ifdef ARGSproto typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); # else typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); # endif typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif #ifndef isPSXSPC # define isPSXSPC(c) (isSPACE(c) || (c) == '\v') #endif #ifndef isBLANK # define isBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef EBCDIC #ifndef isALNUMC # define isALNUMC(c) isalnum(c) #endif #ifndef isASCII # define isASCII(c) isascii(c) #endif #ifndef isCNTRL # define isCNTRL(c) iscntrl(c) #endif #ifndef isGRAPH # define isGRAPH(c) isgraph(c) #endif #ifndef isPRINT # define isPRINT(c) isprint(c) #endif #ifndef isPUNCT # define isPUNCT(c) ispunct(c) #endif #ifndef isXDIGIT # define isXDIGIT(c) isxdigit(c) #endif #else # if (PERL_BCDVERSION < 0x5010000) /* Hint: isPRINT * The implementation in older perl versions includes all of the * isSPACE() characters, which is wrong. The version provided by * Devel::PPPort always overrides a present buggy version. */ # undef isPRINT # endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII # define isASCII(c) ((U8) (c) <= 127) #endif #ifndef isCNTRL # define isCNTRL(c) ((U8) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH # define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) #endif #ifndef isPRINT # define isPRINT(c) (((c) >= 32 && (c) < 127)) #endif #ifndef isPUNCT # define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) #endif #ifndef isXDIGIT # define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #endif #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 #if (PERL_BCDVERSION < 0x5008000) # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG #else # define D_PPP_PERL_SIGNALS_INIT 0 #endif #if defined(NEED_PL_signals) static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #elif defined(NEED_PL_signals_GLOBAL) U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #else extern U32 DPPP_(my_PL_signals); #endif #define PL_signals DPPP_(my_PL_signals) #endif /* Hint: PL_ppaddr * Calling an op via PL_ppaddr requires passing a context argument * for threaded builds. Since the context argument is different for * 5.005 perls, you can use aTHXR (supplied by newppp.h), which will * automatically be defined as the correct argument. */ #if (PERL_BCDVERSION <= 0x5005005) /* Replace: 1 */ # define PL_ppaddr ppaddr # define PL_no_modify no_modify /* Replace: 0 */ #endif #if (PERL_BCDVERSION <= 0x5004005) /* Replace: 1 */ # define PL_DBsignal DBsignal # define PL_DBsingle DBsingle # define PL_DBsub DBsub # define PL_DBtrace DBtrace # define PL_Sv Sv # define PL_bufend bufend # define PL_bufptr bufptr # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_debstash debstash # define PL_defgv defgv # define PL_diehook diehook # define PL_dirty dirty # define PL_dowarn dowarn # define PL_errgv errgv # define PL_error_count error_count # define PL_expect expect # define PL_hexdigit hexdigit # define PL_hints hints # define PL_in_my in_my # define PL_laststatval laststatval # define PL_lex_state lex_state # define PL_lex_stuff lex_stuff # define PL_linestr linestr # define PL_na na # define PL_perl_destruct_level perl_destruct_level # define PL_perldb perldb # define PL_rsfp_filters rsfp_filters # define PL_rsfp rsfp # define PL_stack_base stack_base # define PL_stack_sp stack_sp # define PL_statcache statcache # define PL_stdingv stdingv # define PL_sv_arenaroot sv_arenaroot # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_tainted tainted # define PL_tainting tainting # define PL_tokenbuf tokenbuf /* Replace: 0 */ #endif /* Warning: PL_parser * For perl versions earlier than 5.9.5, this is an always * non-NULL dummy. Also, it cannot be dereferenced. Don't * use it if you can avoid is and unless you absolutely know * what you're doing. * If you always check that PL_parser is non-NULL, you can * define DPPP_PL_parser_NO_DUMMY to avoid the creation of * a dummy parser structure. */ #if (PERL_BCDVERSION >= 0x5009005) # ifdef DPPP_PL_parser_NO_DUMMY # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (croak("panic: PL_parser == NULL in %s:%d", \ __FILE__, __LINE__), (yy_parser *) NULL))->var) # else # ifdef DPPP_PL_parser_NO_DUMMY_WARNING # define D_PPP_parser_dummy_warning(var) # else # define D_PPP_parser_dummy_warning(var) \ warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), # endif # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) #if defined(NEED_PL_parser) static yy_parser DPPP_(dummy_PL_parser); #elif defined(NEED_PL_parser_GLOBAL) yy_parser DPPP_(dummy_PL_parser); #else extern yy_parser DPPP_(dummy_PL_parser); #endif # endif /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf * Do not use this variable unless you know exactly what you're * doint. It is internal to the perl parser and may change or even * be removed in the future. As of perl 5.9.5, you have to check * for (PL_parser != NULL) for this variable to have any effect. * An always non-NULL PL_parser dummy is provided for earlier * perl versions. * If PL_parser is NULL when you try to access this variable, a * dummy is being accessed instead and a warning is issued unless * you define DPPP_PL_parser_NO_DUMMY_WARNING. * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access * this variable will croak with a panic message. */ # define PL_expect D_PPP_my_PL_parser_var(expect) # define PL_copline D_PPP_my_PL_parser_var(copline) # define PL_rsfp D_PPP_my_PL_parser_var(rsfp) # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) # define PL_linestr D_PPP_my_PL_parser_var(linestr) # define PL_bufptr D_PPP_my_PL_parser_var(bufptr) # define PL_bufend D_PPP_my_PL_parser_var(bufend) # define PL_lex_state D_PPP_my_PL_parser_var(lex_state) # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) # define PL_in_my D_PPP_my_PL_parser_var(in_my) # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash) # define PL_error_count D_PPP_my_PL_parser_var(error_count) #else /* ensure that PL_parser != NULL and cannot be dereferenced */ # define PL_parser ((void *) 1) #endif #ifndef mPUSHs # define mPUSHs(s) PUSHs(sv_2mortal(s)) #endif #ifndef PUSHmortal # define PUSHmortal PUSHs(sv_newmortal()) #endif #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) #endif #ifndef mPUSHn # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) #endif #ifndef mPUSHi # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) #endif #ifndef mPUSHu # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) #endif #ifndef mXPUSHs # define mXPUSHs(s) XPUSHs(sv_2mortal(s)) #endif #ifndef XPUSHmortal # define XPUSHmortal XPUSHs(sv_newmortal()) #endif #ifndef mXPUSHp # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END #endif #ifndef mXPUSHn # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END #endif #ifndef mXPUSHi # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END #endif #ifndef mXPUSHu # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END #endif /* Replace: 1 */ #ifndef call_sv # define call_sv perl_call_sv #endif #ifndef call_pv # define call_pv perl_call_pv #endif #ifndef call_argv # define call_argv perl_call_argv #endif #ifndef call_method # define call_method perl_call_method #endif #ifndef eval_sv # define eval_sv perl_eval_sv #endif /* Replace: 0 */ #ifndef PERL_LOADMOD_DENY # define PERL_LOADMOD_DENY 0x1 #endif #ifndef PERL_LOADMOD_NOIMPORT # define PERL_LOADMOD_NOIMPORT 0x2 #endif #ifndef PERL_LOADMOD_IMPORT_OPS # define PERL_LOADMOD_IMPORT_OPS 0x4 #endif #ifndef G_METHOD # define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif /* Replace perl_eval_pv with eval_pv */ #ifndef eval_pv #if defined(NEED_eval_pv) static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); static #else extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); #endif #ifdef eval_pv # undef eval_pv #endif #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) #define Perl_eval_pv DPPP_(my_eval_pv) #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error) { dSP; SV* sv = newSVpv(p, 0); PUSHMARK(sp); eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); SPAGAIN; sv = POPs; PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) croak(SvPVx(GvSV(errgv), na)); return sv; } #endif #endif #ifndef vload_module #if defined(NEED_vload_module) static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); static #else extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); #endif #ifdef vload_module # undef vload_module #endif #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) #define Perl_vload_module DPPP_(my_vload_module) #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) { dTHR; dVAR; OP *veop, *imop; OP * const modname = newSVOP(OP_CONST, 0, name); /* 5.005 has a somewhat hacky force_normal that doesn't croak on SvREADONLY() if PL_compling is true. Current perls take care in ck_require() to correctly turn off SvREADONLY before calling force_normal_flags(). This seems a better fix than fudging PL_compling */ SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { veop = newSVOP(OP_CONST, 0, ver); } else veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { imop = va_arg(*args, OP*); } else { SV *sv; imop = NULL; sv = va_arg(*args, SV*); while (sv) { imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); sv = va_arg(*args, SV*); } } { const line_t ocopline = PL_copline; COP * const ocurcop = PL_curcop; const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), veop, modname, imop); #else utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), modname, imop); #endif PL_expect = oexpect; PL_copline = ocopline; PL_curcop = ocurcop; } } #endif #endif #ifndef load_module #if defined(NEED_load_module) static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); static #else extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); #endif #ifdef load_module # undef load_module #endif #define load_module DPPP_(my_load_module) #define Perl_load_module DPPP_(my_load_module) #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) { va_list args; va_start(args, ver); vload_module(flags, name, ver, &args); va_end(args); } #endif #endif #ifndef newRV_inc # define newRV_inc(sv) newRV(sv) /* Replace */ #endif #ifndef newRV_noinc #if defined(NEED_newRV_noinc) static SV * DPPP_(my_newRV_noinc)(SV *sv); static #else extern SV * DPPP_(my_newRV_noinc)(SV *sv); #endif #ifdef newRV_noinc # undef newRV_noinc #endif #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) #define Perl_newRV_noinc DPPP_(my_newRV_noinc) #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) SV * DPPP_(my_newRV_noinc)(SV *sv) { SV *rv = (SV *)newRV(sv); SvREFCNT_dec(sv); return rv; } #endif #endif /* Hint: newCONSTSUB * Returns a CV* as of perl-5.7.1. This return value is not supported * by Devel::PPPort. */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) #if defined(NEED_newCONSTSUB) static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); static #else extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); #endif #ifdef newCONSTSUB # undef newCONSTSUB #endif #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ /* (There's no PL_parser in perl < 5.005, so this is completely safe) */ #define D_PPP_PL_copline PL_copline void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = D_PPP_PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_BCDVERSION < 0x5003022) start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) start_subparse(0), #else /* 5.003_23 onwards */ start_subparse(FALSE, 0), #endif newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) #ifndef START_MY_CXT /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE #define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # else # if IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # endif # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (SvREFCNT(_sv))++; \ _sv; \ }) # else # define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_simple(sv) \ ({ \ if (sv) \ (SvREFCNT(sv))++; \ (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) # endif #endif #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_NN(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ SvREFCNT(_sv)++; \ _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) # endif #endif #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_void(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) # endif #endif #ifndef SvREFCNT_inc_simple_void # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END #endif #ifndef SvREFCNT_inc_simple_NN # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) #endif #ifndef SvREFCNT_inc_void_NN # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef SvREFCNT_inc_simple_void_NN # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef newSV_type #if defined(NEED_newSV_type) static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); static #else extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); #endif #ifdef newSV_type # undef newSV_type #endif #define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a) #define Perl_newSV_type DPPP_(my_newSV_type) #if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL) SV* DPPP_(my_newSV_type)(pTHX_ svtype const t) { SV* const sv = newSV(0); sv_upgrade(sv, t); return sv; } #endif #endif #if (PERL_BCDVERSION < 0x5006000) # define D_PPP_CONSTPV_ARG(x) ((char *) (x)) #else # define D_PPP_CONSTPV_ARG(x) (x) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((data) \ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ : newSV(0)) #endif #ifndef newSVpvn_utf8 # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) #endif #ifndef SVf_UTF8 # define SVf_UTF8 0 #endif #ifndef newSVpvn_flags #if defined(NEED_newSVpvn_flags) static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); static #else extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); #endif #ifdef newSVpvn_flags # undef newSVpvn_flags #endif #define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) #define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) #if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) { SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); SvFLAGS(sv) |= (flags & SVf_UTF8); return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; } #endif #endif /* Backwards compatibility stuff... :-( */ #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) # define NEED_sv_2pv_flags #endif #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) # define NEED_sv_2pv_flags_GLOBAL #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). */ #ifndef sv_2pv_nolen # define sv_2pv_nolen(sv) SvPV_nolen(sv) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, newppp.h implements a version * borrowed from perl-5.7.3. */ #if (PERL_BCDVERSION < 0x5007000) #if defined(NEED_sv_2pvbyte) static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); static #else extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); #endif #ifdef sv_2pvbyte # undef sv_2pvbyte #endif #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif #ifndef sv_2pvbyte_nolen # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) #endif /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ /* If these are undefined, they're not handled by the core anyway */ #ifndef SV_IMMEDIATE_UNREF # define SV_IMMEDIATE_UNREF 0 #endif #ifndef SV_GMAGIC # define SV_GMAGIC 0 #endif #ifndef SV_COW_DROP_PV # define SV_COW_DROP_PV 0 #endif #ifndef SV_UTF8_NO_ENCODING # define SV_UTF8_NO_ENCODING 0 #endif #ifndef SV_NOSTEAL # define SV_NOSTEAL 0 #endif #ifndef SV_CONST_RETURN # define SV_CONST_RETURN 0 #endif #ifndef SV_MUTABLE_RETURN # define SV_MUTABLE_RETURN 0 #endif #ifndef SV_SMAGIC # define SV_SMAGIC 0 #endif #ifndef SV_HAS_TRAILING_NUL # define SV_HAS_TRAILING_NUL 0 #endif #ifndef SV_COW_SHARED_HASH_KEYS # define SV_COW_SHARED_HASH_KEYS 0 #endif #if (PERL_BCDVERSION < 0x5007002) #if defined(NEED_sv_2pv_flags) static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_2pv_flags # undef sv_2pv_flags #endif #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_2pv(sv, lp ? lp : &n_a); } #endif #if defined(NEED_sv_pvn_force_flags) static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_pvn_force_flags # undef sv_pvn_force_flags #endif #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_pvn_force(sv, lp ? lp : &n_a); } #endif #endif #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) # define DPPP_SVPV_NOLEN_LP_ARG &PL_na #else # define DPPP_SVPV_NOLEN_LP_ARG 0 #endif #ifndef SvPV_const # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_mutable # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_flags # define SvPV_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) #endif #ifndef SvPV_flags_const # define SvPV_flags_const(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_const_nolen # define SvPV_flags_const_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : \ (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_mutable # define SvPV_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_force # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nolen # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) #endif #ifndef SvPV_force_mutable # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nomg # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) #endif #ifndef SvPV_force_nomg_nolen # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) #endif #ifndef SvPV_force_flags # define SvPV_force_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) #endif #ifndef SvPV_force_flags_nolen # define SvPV_force_flags_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) #endif #ifndef SvPV_force_flags_mutable # define SvPV_force_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_nolen # define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) #endif #ifndef SvPV_nolen_const # define SvPV_nolen_const(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) #endif #ifndef SvPV_nomg # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) #endif #ifndef SvPV_nomg_const # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) #endif #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ } STMT_END #endif #ifndef SvMAGIC_set # define SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5009003) #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) (0 + SvPVX(sv)) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END #endif #else #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ ((sv)->sv_u.svu_rv = (val)); } STMT_END #endif #endif #ifndef SvSTASH_set # define SvSTASH_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5004000) #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END #endif #else #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); static #else extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); #endif #ifdef vnewSVpvf # undef vnewSVpvf #endif #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) { register SV *sv = newSV(0); sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); return sv; } #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ #ifndef sv_catpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # else # define sv_catpvf_mg Perl_sv_catpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) # define sv_vcatpvf_mg(sv, pat, args) \ STMT_START { \ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ #ifndef sv_setpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext # else # define sv_setpvf_mg Perl_sv_setpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) # define sv_vsetpvf_mg(sv, pat, args) \ STMT_START { \ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif /* Hint: newSVpvn_share * The SVs created by this function only mimic the behaviour of * shared PVs without really being shared. Only use if you know * what you're doing. */ #ifndef newSVpvn_share #if defined(NEED_newSVpvn_share) static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); static #else extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); #endif #ifdef newSVpvn_share # undef newSVpvn_share #endif #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) { SV *sv; if (len < 0) len = -len; if (!hash) PERL_HASH(hash, (char*) src, len); sv = newSVpvn((char *) src, len); sv_upgrade(sv, SVt_PVIV); SvIVX(sv) = hash; SvREADONLY_on(sv); SvPOK_on(sv); return sv; } #endif #endif #ifndef SvSHARED_HASH # define SvSHARED_HASH(sv) (0 + SvUVX(sv)) #endif #ifndef HvNAME_get # define HvNAME_get(hv) HvNAME(hv) #endif #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) #endif #ifndef GvSVn # define GvSVn(gv) GvSV(gv) #endif #ifndef isGV_with_GP # define isGV_with_GP(gv) isGV(gv) #endif #ifndef gv_fetchpvn_flags # define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) #endif #ifndef gv_fetchsv # define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) #endif #ifndef get_cvn_flags # define get_cvn_flags(name, namelen, flags) get_cv(name, flags) #endif #ifndef WARN_ALL # define WARN_ALL 0 #endif #ifndef WARN_CLOSURE # define WARN_CLOSURE 1 #endif #ifndef WARN_DEPRECATED # define WARN_DEPRECATED 2 #endif #ifndef WARN_EXITING # define WARN_EXITING 3 #endif #ifndef WARN_GLOB # define WARN_GLOB 4 #endif #ifndef WARN_IO # define WARN_IO 5 #endif #ifndef WARN_CLOSED # define WARN_CLOSED 6 #endif #ifndef WARN_EXEC # define WARN_EXEC 7 #endif #ifndef WARN_LAYER # define WARN_LAYER 8 #endif #ifndef WARN_NEWLINE # define WARN_NEWLINE 9 #endif #ifndef WARN_PIPE # define WARN_PIPE 10 #endif #ifndef WARN_UNOPENED # define WARN_UNOPENED 11 #endif #ifndef WARN_MISC # define WARN_MISC 12 #endif #ifndef WARN_NUMERIC # define WARN_NUMERIC 13 #endif #ifndef WARN_ONCE # define WARN_ONCE 14 #endif #ifndef WARN_OVERFLOW # define WARN_OVERFLOW 15 #endif #ifndef WARN_PACK # define WARN_PACK 16 #endif #ifndef WARN_PORTABLE # define WARN_PORTABLE 17 #endif #ifndef WARN_RECURSION # define WARN_RECURSION 18 #endif #ifndef WARN_REDEFINE # define WARN_REDEFINE 19 #endif #ifndef WARN_REGEXP # define WARN_REGEXP 20 #endif #ifndef WARN_SEVERE # define WARN_SEVERE 21 #endif #ifndef WARN_DEBUGGING # define WARN_DEBUGGING 22 #endif #ifndef WARN_INPLACE # define WARN_INPLACE 23 #endif #ifndef WARN_INTERNAL # define WARN_INTERNAL 24 #endif #ifndef WARN_MALLOC # define WARN_MALLOC 25 #endif #ifndef WARN_SIGNAL # define WARN_SIGNAL 26 #endif #ifndef WARN_SUBSTR # define WARN_SUBSTR 27 #endif #ifndef WARN_SYNTAX # define WARN_SYNTAX 28 #endif #ifndef WARN_AMBIGUOUS # define WARN_AMBIGUOUS 29 #endif #ifndef WARN_BAREWORD # define WARN_BAREWORD 30 #endif #ifndef WARN_DIGIT # define WARN_DIGIT 31 #endif #ifndef WARN_PARENTHESIS # define WARN_PARENTHESIS 32 #endif #ifndef WARN_PRECEDENCE # define WARN_PRECEDENCE 33 #endif #ifndef WARN_PRINTF # define WARN_PRINTF 34 #endif #ifndef WARN_PROTOTYPE # define WARN_PROTOTYPE 35 #endif #ifndef WARN_QW # define WARN_QW 36 #endif #ifndef WARN_RESERVED # define WARN_RESERVED 37 #endif #ifndef WARN_SEMICOLON # define WARN_SEMICOLON 38 #endif #ifndef WARN_TAINT # define WARN_TAINT 39 #endif #ifndef WARN_THREADS # define WARN_THREADS 40 #endif #ifndef WARN_UNINITIALIZED # define WARN_UNINITIALIZED 41 #endif #ifndef WARN_UNPACK # define WARN_UNPACK 42 #endif #ifndef WARN_UNTIE # define WARN_UNTIE 43 #endif #ifndef WARN_UTF8 # define WARN_UTF8 44 #endif #ifndef WARN_VOID # define WARN_VOID 45 #endif #ifndef WARN_ASSERTIONS # define WARN_ASSERTIONS 46 #endif #ifndef packWARN # define packWARN(a) (a) #endif #ifndef ckWARN # ifdef G_WARN_ON # define ckWARN(a) (PL_dowarn & G_WARN_ON) # else # define ckWARN(a) PL_dowarn # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) #if defined(NEED_warner) static void DPPP_(my_warner)(U32 err, const char *pat, ...); static #else extern void DPPP_(my_warner)(U32 err, const char *pat, ...); #endif #define Perl_warner DPPP_(my_warner) #if defined(NEED_warner) || defined(NEED_warner_GLOBAL) void DPPP_(my_warner)(U32 err, const char *pat, ...) { SV *sv; va_list args; PERL_UNUSED_ARG(err); va_start(args, pat); sv = vnewSVpvf(pat, &args); va_end(args); sv_2mortal(sv); warn("%s", SvPV_nolen(sv)); } #define warner Perl_warner #define Perl_warner_nocontext Perl_warner #endif #endif /* concatenating with "" ensures that only literal strings are accepted as argument * note that STR_WITH_LEN() can't be used as argument to macros or functions that * under some configurations might be macros */ #ifndef STR_WITH_LEN # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) #endif #ifndef newSVpvs # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) #endif #ifndef newSVpvs_flags # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) #endif #ifndef newSVpvs_share # define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) #endif #ifndef sv_catpvs # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) #endif #ifndef sv_setpvs # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) #endif #ifndef hv_fetchs # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) #endif #ifndef hv_stores # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) #endif #ifndef gv_fetchpvs # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) #endif #ifndef gv_stashpvs # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) #endif #ifndef get_cvs # define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags) #endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif #ifndef PERL_MAGIC_overload # define PERL_MAGIC_overload 'A' #endif #ifndef PERL_MAGIC_overload_elem # define PERL_MAGIC_overload_elem 'a' #endif #ifndef PERL_MAGIC_overload_table # define PERL_MAGIC_overload_table 'c' #endif #ifndef PERL_MAGIC_bm # define PERL_MAGIC_bm 'B' #endif #ifndef PERL_MAGIC_regdata # define PERL_MAGIC_regdata 'D' #endif #ifndef PERL_MAGIC_regdatum # define PERL_MAGIC_regdatum 'd' #endif #ifndef PERL_MAGIC_env # define PERL_MAGIC_env 'E' #endif #ifndef PERL_MAGIC_envelem # define PERL_MAGIC_envelem 'e' #endif #ifndef PERL_MAGIC_fm # define PERL_MAGIC_fm 'f' #endif #ifndef PERL_MAGIC_regex_global # define PERL_MAGIC_regex_global 'g' #endif #ifndef PERL_MAGIC_isa # define PERL_MAGIC_isa 'I' #endif #ifndef PERL_MAGIC_isaelem # define PERL_MAGIC_isaelem 'i' #endif #ifndef PERL_MAGIC_nkeys # define PERL_MAGIC_nkeys 'k' #endif #ifndef PERL_MAGIC_dbfile # define PERL_MAGIC_dbfile 'L' #endif #ifndef PERL_MAGIC_dbline # define PERL_MAGIC_dbline 'l' #endif #ifndef PERL_MAGIC_mutex # define PERL_MAGIC_mutex 'm' #endif #ifndef PERL_MAGIC_shared # define PERL_MAGIC_shared 'N' #endif #ifndef PERL_MAGIC_shared_scalar # define PERL_MAGIC_shared_scalar 'n' #endif #ifndef PERL_MAGIC_collxfrm # define PERL_MAGIC_collxfrm 'o' #endif #ifndef PERL_MAGIC_tied # define PERL_MAGIC_tied 'P' #endif #ifndef PERL_MAGIC_tiedelem # define PERL_MAGIC_tiedelem 'p' #endif #ifndef PERL_MAGIC_tiedscalar # define PERL_MAGIC_tiedscalar 'q' #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef PERL_MAGIC_sig # define PERL_MAGIC_sig 'S' #endif #ifndef PERL_MAGIC_sigelem # define PERL_MAGIC_sigelem 's' #endif #ifndef PERL_MAGIC_taint # define PERL_MAGIC_taint 't' #endif #ifndef PERL_MAGIC_uvar # define PERL_MAGIC_uvar 'U' #endif #ifndef PERL_MAGIC_uvar_elem # define PERL_MAGIC_uvar_elem 'u' #endif #ifndef PERL_MAGIC_vstring # define PERL_MAGIC_vstring 'V' #endif #ifndef PERL_MAGIC_vec # define PERL_MAGIC_vec 'v' #endif #ifndef PERL_MAGIC_utf8 # define PERL_MAGIC_utf8 'w' #endif #ifndef PERL_MAGIC_substr # define PERL_MAGIC_substr 'x' #endif #ifndef PERL_MAGIC_defelem # define PERL_MAGIC_defelem 'y' #endif #ifndef PERL_MAGIC_glob # define PERL_MAGIC_glob '*' #endif #ifndef PERL_MAGIC_arylen # define PERL_MAGIC_arylen '#' #endif #ifndef PERL_MAGIC_pos # define PERL_MAGIC_pos '.' #endif #ifndef PERL_MAGIC_backref # define PERL_MAGIC_backref '<' #endif #ifndef PERL_MAGIC_ext # define PERL_MAGIC_ext '~' #endif /* That's the best we can do... */ #ifndef sv_catpvn_nomg # define sv_catpvn_nomg sv_catpvn #endif #ifndef sv_catsv_nomg # define sv_catsv_nomg sv_catsv #endif #ifndef sv_setsv_nomg # define sv_setsv_nomg sv_setsv #endif #ifndef sv_pvn_nomg # define sv_pvn_nomg sv_pvn #endif #ifndef SvIV_nomg # define SvIV_nomg SvIV #endif #ifndef SvUV_nomg # define SvUV_nomg SvUV #endif #ifndef sv_catpv_mg # define sv_catpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catpvn_mg # define sv_catpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catsv_mg # define sv_catsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_catsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setiv_mg # define sv_setiv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setiv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setnv_mg # define sv_setnv_mg(sv, num) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setnv(TeMpSv,num); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpv_mg # define sv_setpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpvn_mg # define sv_setpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setsv_mg # define sv_setsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_setsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setuv_mg # define sv_setuv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setuv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_usepvn_mg # define sv_usepvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_usepvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef SvVSTRING_mg # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) #endif /* Hint: sv_magic_portable * This is a compatibility function that is only available with * Devel::PPPort. It is NOT in the perl core. * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when * it is being passed a name pointer with namlen == 0. In that * case, perl 5.8.0 and later store the pointer, not a copy of it. * The compatibility can be provided back to perl 5.004. With * earlier versions, the code will not compile. */ #if (PERL_BCDVERSION < 0x5004000) /* code that uses sv_magic_portable will not compile */ #elif (PERL_BCDVERSION < 0x5008000) # define sv_magic_portable(sv, obj, how, name, namlen) \ STMT_START { \ SV *SvMp_sv = (sv); \ char *SvMp_name = (char *) (name); \ I32 SvMp_namlen = (namlen); \ if (SvMp_name && SvMp_namlen == 0) \ { \ MAGIC *mg; \ sv_magic(SvMp_sv, obj, how, 0, 0); \ mg = SvMAGIC(SvMp_sv); \ mg->mg_len = -42; /* XXX: this is the tricky part */ \ mg->mg_ptr = SvMp_name; \ } \ else \ { \ sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ } \ } STMT_END #else # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) #endif #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) #endif #ifndef CopFILEGV # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) ((c)->cop_stashpv) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) #endif #ifndef CopSTASH # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ || (CopSTASHPV(c) && HvNAME(hv) \ && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else #ifndef CopFILEGV # define CopFILEGV(c) ((c)->cop_filegv) #endif #ifndef CopFILEGV_set # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) #endif #ifndef CopFILE # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) #endif #ifndef CopSTASH # define CopSTASH(c) ((c)->cop_stash) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) #endif #endif /* USE_ITHREADS */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif #ifndef IN_LOCALE_RUNTIME # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) #endif #ifndef IN_LOCALE_COMPILETIME # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) #endif #ifndef IN_LOCALE # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) #endif #ifndef IS_NUMBER_IN_UV # define IS_NUMBER_IN_UV 0x01 #endif #ifndef IS_NUMBER_GREATER_THAN_UV_MAX # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 #endif #ifndef IS_NUMBER_NOT_INT # define IS_NUMBER_NOT_INT 0x04 #endif #ifndef IS_NUMBER_NEG # define IS_NUMBER_NEG 0x08 #endif #ifndef IS_NUMBER_INFINITY # define IS_NUMBER_INFINITY 0x10 #endif #ifndef IS_NUMBER_NAN # define IS_NUMBER_NAN 0x20 #endif #ifndef GROK_NUMERIC_RADIX # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) #endif #ifndef PERL_SCAN_GREATER_THAN_UV_MAX # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 #endif #ifndef PERL_SCAN_SILENT_ILLDIGIT # define PERL_SCAN_SILENT_ILLDIGIT 0x04 #endif #ifndef PERL_SCAN_ALLOW_UNDERSCORES # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 #endif #ifndef PERL_SCAN_DISALLOW_PREFIX # define PERL_SCAN_DISALLOW_PREFIX 0x02 #endif #ifndef grok_numeric_radix #if defined(NEED_grok_numeric_radix) static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); static #else extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); #endif #ifdef grok_numeric_radix # undef grok_numeric_radix #endif #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) bool DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #else /* older perls don't have PL_numeric_radix_sv so the radix * must manually be requested from locale.h */ #include dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ if (*sp < send && **sp == '.') { ++*sp; return TRUE; } return FALSE; } #endif #endif #ifndef grok_number #if defined(NEED_grok_number) static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); static #else extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); #endif #ifdef grok_number # undef grok_number #endif #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) #define Perl_grok_number DPPP_(my_grok_number) #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) int DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) { const char *s = pv; const char *send = pv + len; const UV max_div_10 = UV_MAX / 10; const char max_mod_10 = UV_MAX % 10; int numtype = 0; int sawinf = 0; int sawnan = 0; while (s < send && isSPACE(*s)) s++; if (s == send) { return 0; } else if (*s == '-') { s++; numtype = IS_NUMBER_NEG; } else if (*s == '+') s++; if (s == send) return 0; /* next must be digit or the radix separator or beginning of infinity */ if (isDIGIT(*s)) { /* UVs are at least 32 bits, so the first 9 decimal digits cannot overflow. */ UV value = *s - '0'; /* This construction seems to be more optimiser friendly. (without it gcc does the isDIGIT test and the *s - '0' separately) With it gcc on arm is managing 6 instructions (6 cycles) per digit. In theory the optimiser could deduce how far to unroll the loop before checking for overflow. */ if (++s < send) { int digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { /* Now got 9 digits, so need to check each time for overflow. */ digit = *s - '0'; while (digit >= 0 && digit <= 9 && (value < max_div_10 || (value == max_div_10 && digit <= max_mod_10))) { value = value * 10 + digit; if (++s < send) digit = *s - '0'; else break; } if (digit >= 0 && digit <= 9 && (s < send)) { /* value overflowed. skip the remaining digits, don't worry about setting *valuep. */ do { s++; } while (s < send && isDIGIT(*s)); numtype |= IS_NUMBER_GREATER_THAN_UV_MAX; goto skip_value; } } } } } } } } } } } } } } } } } } numtype |= IS_NUMBER_IN_UV; if (valuep) *valuep = value; skip_value: if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT; while (s < send && isDIGIT(*s)) /* optional digits after the radix */ s++; } } else if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ /* no digits before the radix means we need digits after it */ if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); if (valuep) { /* integer approximation is valid - it's 0. */ *valuep = 0; } } else return 0; } else if (*s == 'I' || *s == 'i') { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; s++; if (s < send && (*s == 'I' || *s == 'i')) { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; s++; if (s == send || (*s != 'T' && *s != 't')) return 0; s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; s++; } sawinf = 1; } else if (*s == 'N' || *s == 'n') { /* XXX TODO: There are signaling NaNs and quiet NaNs. */ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; sawnan = 1; } else return 0; if (sawinf) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; } else if (sawnan) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; } else if (s < send) { /* we can have an optional exponent part */ if (*s == 'e' || *s == 'E') { /* The only flag we keep is sign. Blow away any "it's UV" */ numtype &= IS_NUMBER_NEG; numtype |= IS_NUMBER_NOT_INT; s++; if (s < send && (*s == '-' || *s == '+')) s++; if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); } else return 0; } } while (s < send && isSPACE(*s)) s++; if (s >= send) return numtype; if (len == 10 && memEQ(pv, "0 but true", 10)) { if (valuep) *valuep = 0; return IS_NUMBER_IN_UV; } return 0; } #endif #endif /* * The grok_* routines have been modified to use warn() instead of * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, * which is why the stack variable has been renamed to 'xdigit'. */ #ifndef grok_bin #if defined(NEED_grok_bin) static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_bin # undef grok_bin #endif #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) #define Perl_grok_bin DPPP_(my_grok_bin) #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) UV DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_2 = UV_MAX / 2; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading b or 0b. for compatibility silently suffer "b" and "0b" as valid binary numbers. */ if (len >= 1) { if (s[0] == 'b') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'b') { s+=2; len-=2; } } } for (; len-- && *s; s++) { char bit = *s; if (bit == '0' || bit == '1') { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_bin. */ redo: if (!overflowed) { if (value <= max_div_2) { value = (value << 1) | (bit - '0'); continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in binary number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 2.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_hex #if defined(NEED_grok_hex) static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_hex # undef grok_hex #endif #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) #define Perl_grok_hex DPPP_(my_grok_hex) #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) UV DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_16 = UV_MAX / 16; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; const char *xdigit; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading x or 0x. for compatibility silently suffer "x" and "0x" as valid hex numbers. */ if (len >= 1) { if (s[0] == 'x') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'x') { s+=2; len-=2; } } } for (; len-- && *s; s++) { xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_hex. */ redo: if (!overflowed) { if (value <= max_div_16) { value = (value << 4) | ((xdigit - PL_hexdigit) & 15); continue; } warn("Integer overflow in hexadecimal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 16.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] && (xdigit = strchr((char *) PL_hexdigit, s[1]))) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_oct #if defined(NEED_grok_oct) static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_oct # undef grok_oct #endif #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) #define Perl_grok_oct DPPP_(my_grok_oct) #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) UV DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_8 = UV_MAX / 8; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; for (; len-- && *s; s++) { /* gcc 2.95 optimiser not smart enough to figure that this subtraction out front allows slicker code. */ int digit = *s - '0'; if (digit >= 0 && digit <= 7) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. */ redo: if (!overflowed) { if (value <= max_div_8) { value = (value << 3) | digit; continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in octal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 8.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) { --len; ++s; goto redo; } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ if (digit == 8 || digit == 9) { if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal octal digit '%c' ignored", *s); } break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #if !defined(my_snprintf) #if defined(NEED_my_snprintf) static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); static #else extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); #endif #define my_snprintf DPPP_(my_my_snprintf) #define Perl_my_snprintf DPPP_(my_my_snprintf) #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) int DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) { dTHX; int retval; va_list ap; va_start(ap, format); #ifdef HAS_VSNPRINTF retval = vsnprintf(buffer, len, format, ap); #else retval = vsprintf(buffer, format, ap); #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } #endif #endif #if !defined(my_sprintf) #if defined(NEED_my_sprintf) static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); static #else extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); #endif #define my_sprintf DPPP_(my_my_sprintf) #define Perl_my_sprintf DPPP_(my_my_sprintf) #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) int DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) { va_list args; va_start(args, pat); vsprintf(buffer, pat, args); va_end(args); return strlen(buffer); } #endif #endif #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #if !defined(my_strlcat) #if defined(NEED_my_strlcat) static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); #endif #define my_strlcat DPPP_(my_my_strlcat) #define Perl_my_strlcat DPPP_(my_my_strlcat) #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) Size_t DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) { Size_t used, length, copy; used = strlen(dst); length = strlen(src); if (size > 0 && used < size - 1) { copy = (length >= size - used) ? size - used - 1 : length; memcpy(dst + used, src, copy); dst[used + copy] = '\0'; } return used + length; } #endif #endif #if !defined(my_strlcpy) #if defined(NEED_my_strlcpy) static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); #endif #define my_strlcpy DPPP_(my_my_strlcpy) #define Perl_my_strlcpy DPPP_(my_my_strlcpy) #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) Size_t DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) { Size_t length, copy; length = strlen(src); if (size > 0) { copy = (length >= size) ? size - 1 : length; memcpy(dst, src, copy); dst[copy] = '\0'; } return length; } #endif #endif #ifndef PERL_PV_ESCAPE_QUOTE # define PERL_PV_ESCAPE_QUOTE 0x0001 #endif #ifndef PERL_PV_PRETTY_QUOTE # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE #endif #ifndef PERL_PV_PRETTY_ELLIPSES # define PERL_PV_PRETTY_ELLIPSES 0x0002 #endif #ifndef PERL_PV_PRETTY_LTGT # define PERL_PV_PRETTY_LTGT 0x0004 #endif #ifndef PERL_PV_ESCAPE_FIRSTCHAR # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 #endif #ifndef PERL_PV_ESCAPE_UNI # define PERL_PV_ESCAPE_UNI 0x0100 #endif #ifndef PERL_PV_ESCAPE_UNI_DETECT # define PERL_PV_ESCAPE_UNI_DETECT 0x0200 #endif #ifndef PERL_PV_ESCAPE_ALL # define PERL_PV_ESCAPE_ALL 0x1000 #endif #ifndef PERL_PV_ESCAPE_NOBACKSLASH # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 #endif #ifndef PERL_PV_ESCAPE_NOCLEAR # define PERL_PV_ESCAPE_NOCLEAR 0x4000 #endif #ifndef PERL_PV_ESCAPE_RE # define PERL_PV_ESCAPE_RE 0x8000 #endif #ifndef PERL_PV_PRETTY_NOCLEAR # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR #endif #ifndef PERL_PV_PRETTY_DUMP # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #endif #ifndef PERL_PV_PRETTY_REGPROP # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE #endif /* Hint: pv_escape * Note that unicode functionality is only backported to * those perl versions that support it. For older perl * versions, the implementation will fall back to bytes. */ #ifndef pv_escape #if defined(NEED_pv_escape) static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); static #else extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); #endif #ifdef pv_escape # undef pv_escape #endif #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) #define Perl_pv_escape DPPP_(my_pv_escape) #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) char * DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags) { const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; char octbuf[32] = "%123456789ABCDF"; STRLEN wrote = 0; STRLEN chsize = 0; STRLEN readsize = 1; #if defined(is_utf8_string) && defined(utf8_to_uvchr) bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; #endif const char *pv = str; const char * const end = pv + count; octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) isuni = 1; #endif for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, "%"UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, "%cx{%"UVxf"}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { chsize = 2; switch (c) { case '\\' : /* fallthrough */ case '%' : if (c == esc) octbuf[1] = esc; else chsize = 1; break; case '\v' : octbuf[1] = 'v'; break; case '\t' : octbuf[1] = 't'; break; case '\r' : octbuf[1] = 'r'; break; case '\n' : octbuf[1] = 'n'; break; case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') octbuf[1] = '"'; else chsize = 1; break; default: chsize = my_snprintf(octbuf, sizeof octbuf, pv < end && isDIGIT((U8)*(pv+readsize)) ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } } if (max && wrote + chsize > max) { break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; } else { char tmp[2]; my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); wrote++; } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } if (escaped != NULL) *escaped= pv - str; return SvPVX(dsv); } #endif #endif #ifndef pv_pretty #if defined(NEED_pv_pretty) static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); static #else extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); #endif #ifdef pv_pretty # undef pv_pretty #endif #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) #define Perl_pv_pretty DPPP_(my_pv_pretty) #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) char * DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags) { const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, "<"); if (start_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); if (end_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) sv_catpvs(dsv, "..."); return SvPVX(dsv); } #endif #endif #ifndef pv_display #if defined(NEED_pv_display) static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); static #else extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); #endif #ifdef pv_display # undef pv_display #endif #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) #define Perl_pv_display DPPP_(my_pv_display) #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) char * DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } #endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File newppp.h */ libopengl-perl-0.6704+dfsg.orig/t/0000755000175000017500000000000012446030322016134 5ustar gregoagregoalibopengl-perl-0.6704+dfsg.orig/t/01_use.t0000644000175000017500000000007212334200655017420 0ustar gregoagregoause Test::More tests => 1; BEGIN { use_ok( 'OpenGL' ); } libopengl-perl-0.6704+dfsg.orig/t/10_opengl_array.t0000644000175000017500000004410312334200655021311 0ustar gregoagregoause strict; use OpenGL qw(GL_FLOAT GL_INT GL_UNSIGNED_BYTE); use Test::More tests => 141; my $o1 = OpenGL::Array->new(5, GL_FLOAT); ok($o1, "O::A->new"); is($o1->elements, 5, '$o1->elements'); ok($o1->length, '$o1->length'); my $o2 = OpenGL::Array->new(5, GL_INT, GL_INT, GL_INT, GL_INT, GL_INT); ok($o2, "O::A->new"); is($o2->elements, 25, '$o2->elements'); ok($o2->length, '$o->length'); ###----------------------------------------------------------------### sub init { OpenGL::Array->new_list(GL_FLOAT, 1..9) } sub fmt { my @val = ref($_[0]) ? $_[0]->retrieve(0, $_[0]->elements) : @_; push @val, 0 while @val < 9; return sprintf "%2d %2d %2d %2d %2d %2d %2d %2d %2d", @val; } sub lfmt { qr/^ \d \d \d \d \d \d \d \d \d$/ } $o1 = init(); $o2 = init(); ok($o1, "O::A->new_list"); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->retrieve'); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->retrieve'); $o1->assign(2, 7); is(fmt($o1), fmt(1,2,7,4,5,6,7,8,9), '$o1->assign(2,7)'); ###----------------------------------------------------------------### my $ptr = $o2->ptr(); ok($ptr, '$o2->ptr()'); $o1 = OpenGL::Array->new_pointer(GL_FLOAT, $ptr, 4); ok($o1, 'O::A->new_pointer'); is(fmt($o1), fmt(1,2,3,4,0,0,0,0,0), '$o1->retrieve'); $o2->assign(2, 7); is(fmt($o1), fmt(1,2,7,4,0,0,0,0,0), '$o1->assign(2,7)'); is(fmt($o2), fmt(1,2,7,4,5,6,7,8,9), '$o1->assign(2,7)'); $o1->assign(1, 7); is(fmt($o1), fmt(1,7,7,4,0,0,0,0,0), '$o1->assign(2,7)'); is(fmt($o2), fmt(1,7,7,4,5,6,7,8,9), '$o1->assign(2,7)'); $ptr = $o2->offset(5); ok($ptr, '$o2->offset(5)'); $o1 = OpenGL::Array->new_pointer(GL_FLOAT, $ptr, 4); ok($o1, 'O::A->new_pointer'); is(fmt($o1), fmt(6,7,8,9,0,0,0,0,0), '$o1->retrieve'); $o1->update_pointer($o2->ptr()); is(fmt($o1), fmt(1,7,7,4,0,0,0,0,0), '$o1->update_pointer($o2->ptr())'); ###----------------------------------------------------------------### $o2 = OpenGL::Array->new_list(GL_UNSIGNED_BYTE, 1..9); $o1 = OpenGL::Array->new_from_pointer($o2->ptr(), 9); ok($o1, 'O::A->new_from_pointer'); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->new_from_pointer'); $o2->assign(2, 7); is(fmt($o1), fmt(1,2,7,4,5,6,7,8,9), '$o1->assign(2,7)'); is(fmt($o2), fmt(1,2,7,4,5,6,7,8,9), '$o1->assign(2,7)'); $o1->assign(1, 7); is(fmt($o1), fmt(1,7,7,4,5,6,7,8,9), '$o1->assign(2,7)'); is(fmt($o2), fmt(1,7,7,4,5,6,7,8,9), '$o1->assign(2,7)'); ###----------------------------------------------------------------### my $str = pack 'C*', 1..9; $o1 = OpenGL::Array->new_scalar(GL_UNSIGNED_BYTE,$str,length($str)); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->new_scalar'); ###----------------------------------------------------------------### ok($o1->can('bind'), 'can ->bind'); ok(!$o1->bound, '$o1->bound()'); ###----------------------------------------------------------------### # affine my $left = -800; my $right = 800; my $bottom = -100; my $top = 100; my $zFar = 5; my $zNear = -5; my $A = 2 / ($right - $left); my $B = 2 / ($top - $bottom); my $C = -2 / ($zFar - $zNear); my $tx = -($right + $left) / ($right - $left); my $ty = -($top + $bottom) / ($top - $bottom); my $tz = -($zFar + $zNear) / ($zFar - $zNear); $o2 = OpenGL::Array->new_list(GL_FLOAT, $A, 0, 0, $tx, 0, $B, 0, $ty, 0, 0, $C, $tz, 0, 0, 0, 1); $o1 = OpenGL::Array->new_list(GL_FLOAT, 1, 1, 0); $o1->affine($o2); $o1->calc('1000,*'); is(fmt($o1), fmt(1,10,0,0,0,0,0,0,0), '$o1->affine($o2)'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o1->calc(1); is(fmt($o1), fmt(1,1,1,1,1,1,1,1,1), '$o1->calc(1)'); $o1->calc(1,2,3); is(fmt($o1), fmt(1,2,3,1,2,3,1,2,3), '$o1->calc(1,2,3)'); ok(!eval { $o1->calc(1,2,3,4) }, "Correctly failed because column count wasn't a divisor of total elements"); ###----------------------------------------------------------------### $o1->calc(1); $o1->assign_data(0, $o2->retrieve_data(0,$o2->length)); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), "retrieve_data / assign_data (all)"); my $size = $o2->length / $o2->elements; for my $i (1 .. $o2->elements) { $o1->calc(1); $o1->assign_data($i - 1, $o2->retrieve_data($i - 1, $size)); my @test = (1) x $o2->elements; $test[$i-1] = $i; is(fmt($o1), fmt(@test), "retrieve_data / assign_data (".($i-1).")"); } ###----------------------------------------------------------------### $o1->calc(0,4,1,-1,4,0,2,2,4); $o1->calc('!'); is(fmt($o1), fmt(1,0,0,0,0,1,0,0,0), '$o1->calc("!")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o1->calc("-"); is(fmt($o1), fmt(-1,-2,-3,-4,-5,-6,-7,-8,-9), '$o1->calc("-")'); $o1->calc("1,-"); is(fmt($o1), fmt(-1,-1,-1,-1,-1,-1,-1,-1,-1), '$o1->calc("1,-")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("+"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("+")'); $o1->calc("1,+"); is(fmt($o1), fmt(2,3,4,5,6,7,8,9,10), '$o1->calc("1,+")'); $o1 = init(); $o2 = init(); $o2->calc("or"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("or")'); $o1->calc("1,or"); is(fmt($o1), fmt(2,3,4,5,6,7,8,9,10), '$o1->calc("1,or")'); $o1 = init(); $o2 = init(); $o2->calc(3); $o1->calc($o2, "+"); is(fmt($o1), fmt(4,5,6,7,8,9,10,11,12), '$o1->calc($o2, "+")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("*"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("*")'); $o1->calc("2,*"); is(fmt($o1), fmt(2,4,6,8,10,12,14,16,18), '$o1->calc("2,*")'); $o1 = init(); $o2 = init(); $o2->calc("and"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("and")'); $o1->calc("2,and"); is(fmt($o1), fmt(2,4,6,8,10,12,14,16,18), '$o1->calc("2,and")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("/"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("/")'); $o1->calc("3,/"); is(fmt($o1), fmt(0,0,1,1,1,2,2,2,3), '$o1->calc("3,/") # S1 / S0'); is(sprintf('%.2f',$o1->retrieve(3,1)), '1.33', '$o1->calc("3,/")'); $o1 = init(); $o2 = init(); $o1->calc("3,/,floor"); is(fmt($o1), fmt(0,0,1,1,1,2,2,2,3), '$o1->calc("3,/,floor") # S1 / S0'); is(sprintf('%.2f',$o1->retrieve(3,1)), '1.00', '$o1->calc("3,/,floor")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("%"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("%")'); $o1->calc("3,%"); is(fmt($o1), fmt(1,2,0,1,2,0,1,2,0), '$o1->calc("3,%") # S1 % S0'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("="); is(fmt($o2), fmt(0,0,0,0,0,0,0,0,0), '$o2->calc("=")'); $o1->calc("3,="); is(fmt($o1), fmt(0,0,1,0,0,0,0,0,0), '$o1->calc("3,=")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc(">"); is(fmt($o2), fmt(1,1,1,1,1,1,1,1,1), '$o2->calc(">")'); $o1->calc("3,>"); is(fmt($o1), fmt(1,1,0,0,0,0,0,0,0), '$o1->calc("3,>") # S0 > S1'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("<"); is(fmt($o2), fmt(0,0,0,0,0,0,0,0,0), '$o2->calc("<")'); $o1->calc("3,<"); is(fmt($o1), fmt(0,0,0,1,1,1,1,1,1), '$o1->calc("3,<") # S0 < S1'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc('7,swap'); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc("7,swap")'); $o2->calc('7,swap,swap'); is(fmt($o2), fmt(7,7,7,7,7,7,7,7,7), '$o2->calc("7,swap,swap")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc('7,swap,pop'); is(fmt($o2), fmt(7,7,7,7,7,7,7,7,7), '$o2->calc("7,swap,pop")'); $o2->calc('7,swap,swap,pop'); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc("7,swap,swap,pop")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("dup"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("dup")'); $o1->calc("dup,+"); is(fmt($o1), fmt(2,4,6,8,10,12,14,16,18), '$o1->calc("dup,+")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("dec"); is(fmt($o2), fmt(0,1,2,3,4,5,6,7,8), '$o2->calc("dec")'); $o2->calc("inc"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("inc")'); ### ---------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("dec,4,swap,3,swap,2,swap,?"); # dec will introduce a zero is(fmt($o2), fmt(2,3,3,3,3,3,3,3,3), '$o1->calc("dec,4,swap,3,swap,2,swap,?")'); $o1->calc("inc,4,swap,3,swap,2,swap,?"); is(fmt($o1), fmt(3,3,3,3,3,3,3,3,3), '$o1->calc("inc,4,swap,3,swap,2,swap,?")'); $o1 = init(); $o2 = init(); $o2->calc("dec,4,swap,3,swap,2,swap,if"); # dec will introduce a zero is(fmt($o2), fmt(2,3,3,3,3,3,3,3,3), '$o1->calc("dec,4,swap,3,swap,2,swap,if")'); $o1->calc("inc,4,swap,3,swap,2,swap,if"); is(fmt($o1), fmt(3,3,3,3,3,3,3,3,3), '$o1->calc("inc,4,swap,3,swap,2,swap,if")'); ###----------------------------------------------------------------### $o1->calc('10,rand,*'); like(fmt($o1), lfmt(), '$o1->calc("10,rand,*")'); ###----------------------------------------------------------------### TODO: { local $TODO = 'OpenGL::Array tests under development'; $o2 = init(); $o2->calc('get,+,set'); is(fmt($o2), fmt(1,3,6,10,15,21,28,36,45), '$o2->calc("get,+,set")'); $o1 = init(); $o1->calc('get,+,set', '', ''); is(fmt($o1), fmt(1,2,3,5,5,6,12,8,9), '$o1->calc("get,+,set","","")'); } ###----------------------------------------------------------------### $o1 = init(); $o1->calc("2,colget", "", ""); is(fmt($o1), fmt(3,2,3,6,5,6,9,8,9), '$o1->calc("2,colget", "", "")'); $o1 = init(); $o1->calc('2,colset', '', ''); is(fmt($o1), fmt(1,2,1,4,5,4,7,8,7), '$o1->calc("2,colset", "", "")'); $o1 = init(); $o1->calc("1,2,rowget", "2,1,rowget", ""); is(fmt($o1), fmt(6,8,3,6,8,6,6,8,9), '$o1->calc("1,2,rowget", "2,1,rowget", ""'); $o1 = init(); $o1->calc("1,2,rowset", "2,1,rowset", "0,0,rowset"); is(fmt($o1), fmt(9,2,3,4,5,7,7,5,9), '$o1->calc("1,2,rowset", "2,1,rowset", "0,0,rowset")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); my $o3 = init(); my $o4 = init(); $o2->calc('-10,+'); $o3->calc('10,+'); $o4->calc('27'); $o1->calc("0,store,get","get","get"); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc("0,store,get","get","get")'); $o1->calc($o2,$o3,$o4,"0,store,get","get","get"); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc($o2,$o3,$o4,"0,store,get","get","get")'); $o1->calc($o2,$o3,$o4,"1,store",'',''); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc($o2,$o3,$o4,"1,store","","")'); $o1->calc($o2,$o3,$o4,"1,store,get",'','get'); is(fmt($o1), fmt(-9,2,-7,-6,5,-4,-3,8,-1), '$o1->calc($o2,$o3,$o4,"1,store,get","","get")'); $o1->calc($o2,$o3,$o4,"2,store,get"); is(fmt($o1), fmt(11,12,13,14,15,16,17,18,19), '$o1->calc($o2,$o3,$o4,"2,store,get")'); $o1->calc($o2,$o3,$o4,"3,store,get"); is(fmt($o1), fmt(27,27,27,27,27,27,27,27,27), '$o1->calc($o2,$o3,$o4,"3,store,get")'); $o1 = init(); $o2->assign(0, 7, 8 ,9, 10, 11, 12, 13, 14, 15); $o1->calc($o2, "1,store,get","","get"); is(fmt($o1), fmt(7, 2, 9, 10, 5, 12, 13, 8, 15), '$o1->calc($o2, "1,store,get","","get")'); $o2 = init(); $o2->calc('-10,+'); is(fmt($o2), fmt(-9,-8,-7,-6,-5,-4,-3,-2,-1), '$o1->calc("-10,+")'); $o1 = init(); $o1->calc($o2,$o3,$o4,"","","0,store,1,load"); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc("","","0,store,1,load")'); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc("","","0,store,1,load")'); $o1->calc($o2,$o3,$o4,"","","2,store,3,load"); is(fmt($o1), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc($o2,$o3,$o4,"","","2,store,3,load")'); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o1->calc($o2,$o3,$o4,"","","2,store,3,load")'); is(fmt($o3), fmt(11,12,13,14,15,16,17,18,19), '$o1->calc($o2,$o3,$o4,"","","2,store,3,load")'); is(fmt($o4), fmt(11,12,13,14,15,16,17,18,19), '$o1->calc($o2,$o3,$o4,"","","2,store,3,load")'); TODO: { local $TODO = 'OpenGL::Array tests under development'; $o1 = init(); $o2->assign(0, 7, 8 ,9, 10, 11, 12, 13, 14, 15); $o1->calc($o2, "set","", "set,1,load"); is(fmt($o2), fmt(1, 0, 3, 4, 0, 6, 7, 0, 9), '$o1->calc($o2, "set","", "set,1,store")'); } ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc(3,"5,end,8",''); is(fmt($o2), fmt(3,2,3,3,5,6,3,8,9), '$o2->calc(3,"5,end,8","")'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,end,8",9); is(fmt($o2), fmt(3,2,9,3,5,9,3,8,9), '$o2->calc(3,"5,end,8",9)'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,return,8",''); is(fmt($o2), fmt(3,5,3,3,5,6,3,5,9), '$o2->calc(3,"5,return,8","")'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,return,8",9); is(fmt($o2), fmt(3,5,9,3,5,9,3,5,9), '$o2->calc(3,"5,return,8",9)'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc(3,"5,1,endif,8",''); is(fmt($o2), fmt(3,2,3,3,5,6,3,8,9), '$o2->calc(3,"5,1,endif,8","")'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,0,endif,8",''); is(fmt($o2), fmt(3,8,3,3,8,6,3,8,9), '$o2->calc(3,"5,0,endif,8","")'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,1,returnif,8",''); is(fmt($o2), fmt(3,5,3,3,5,6,3,5,9), '$o2->calc(3,"5,1,returnif,8","")'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,0,returnif,8",''); is(fmt($o2), fmt(3,8,3,3,8,6,3,8,9), '$o2->calc(3,"5,0,returnif,8","")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc(3,"5,endrow,8",9); is(fmt($o2), fmt(3,2,3,3,5,6,3,8,9), '$o2->calc(3,"5,endrow,8",9)'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,returnrow,8",9); is(fmt($o2), fmt(3,5,3,3,5,6,3,5,9), '$o2->calc(3,"5,returnrow,8",9)'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc(3,"5,1,endrowif,8",9); is(fmt($o2), fmt(3,2,3,3,5,6,3,8,9), '$o2->calc(3,"5,1,endrowif,8",9)'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,0,endrowif,8",9); is(fmt($o2), fmt(3,8,9,3,8,9,3,8,9), '$o2->calc(3,"5,0,endrowif,8",9)'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,1,returnrowif,8",9); is(fmt($o2), fmt(3,5,3,3,5,6,3,5,9), '$o2->calc(3,"5,1,returnrowif,8",9)'); $o1 = init(); $o2 = init(); $o2->calc(3,"5,0,returnrowif,8",9); is(fmt($o2), fmt(3,8,9,3,8,9,3,8,9), '$o2->calc(3,"5,0,returnrowif,8",9)'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("sum"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("sum")'); $o2->calc("1,2,sum"); is(fmt($o2), fmt(4,5,6,7,8,9,10,11,12), '$o2->calc("1,2,sum")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("avg"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("avg")'); $o2->calc("5,avg"); is(fmt($o2), fmt(3,3,4,4,5,5,6,6,7), '$o2->calc("5,avg")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("-,abs"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("-,abs")'); $o2->calc(-3); $o2->calc('abs'); is(fmt($o2), fmt(3,3,3,3,3,3,3,3,3), '$o2->calc("abs")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("power"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("power")'); $o1->calc("2,power"); is(fmt($o1), fmt(1,4,9,16,25,36,49,64,81), '$o1->calc("2,power")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("min"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("min")'); $o1->calc("5,min"); is(fmt($o1), fmt(1,2,3,4,5,5,5,5,5), '$o2->calc("5,min")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("max"); is(fmt($o2), fmt(1,2,3,4,5,6,7,8,9), '$o2->calc("max")'); $o1->calc("5,max"); is(fmt($o1), fmt(5,5,5,5,5,6,7,8,9), '$o2->calc("5,max")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("pi"); ok((9 == grep {$_ =~ /^3\.14159\d+$/} $o2->retrieve(0,9)), '$o2->calc("pi")'); # this test may fail if the system floats have less that 6 digits of precision $o1->calc("dec,6,min,10,swap,power,pi,*,10,%"); # decrement # take a digit # make sure it is less than 6 # raise 10 to that digit # multiply by pi # mod 10 to get that digit of pi is(fmt($o1), fmt(3,1,4,1,5,9,2,2,2), '$o2->calc("dec,6,min,10,swap,power,pi,*,10,%")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("10,/,pi,*,sin,10,*"); # sin in 10 degree increments is(fmt($o2), fmt(3,5,8,9,10,9,8,5,3), '$o2->calc("10,/,pi,*,sin,10,*")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("10,/,pi,*,cos,10,*"); # cos in 10 degree increments is(fmt($o2), fmt(9,8,5,3,0,-3,-5,-8,-9), '$o2->calc("10,/,pi,*,cos,10,*")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("10,/,pi,*,tan,10,*,abs,100,min"); # tan in 10 degree increments is(fmt($o2), fmt(3,7,13,30,100,30,13,7,3), '$o2->calc("10,/,pi,*,tan,10,*,abs,100,min")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("1,swap,atan2,400,*,dup,0,swap,300,<,?"); # 3 digits of pie is(fmt($o2), fmt(314,0,0,0,0,0,0,0,0), '$o2->calc("1,swap,atan2,400,*,dup,0,swap,300,<,?")'); ###----------------------------------------------------------------### $o1 = init(); $o2 = init(); $o2->calc("count","count","count"); is(fmt($o2), fmt(9,9,9,9,9,9,9,9,9), '$o2->calc("count","count","count")'); $o2->calc("index","index","index"); is(fmt($o2), fmt(0,1,2,3,4,5,6,7,8), '$o2->calc("index","index","index")'); $o2->calc("columns","columns","columns"); is(fmt($o2), fmt(3,3,3,3,3,3,3,3,3), '$o2->calc("columns","columns","columns")'); $o2->calc("column","column","column"); is(fmt($o2), fmt(0,1,2,0,1,2,0,1,2), '$o2->calc("column","column","column")'); $o2->calc("rows","rows","rows"); is(fmt($o2), fmt(3,3,3,3,3,3,3,3,3), '$o2->calc("rows","rows","rows")'); $o2->calc("row","row","row"); is(fmt($o2), fmt(0,0,0,1,1,1,2,2,2), '$o2->calc("row","row","row")'); ###----------------------------------------------------------------### libopengl-perl-0.6704+dfsg.orig/t/00_require.t0000644000175000017500000000006512334200655020301 0ustar gregoagregoause Test::More tests => 1; require_ok( 'OpenGL' ); libopengl-perl-0.6704+dfsg.orig/Makefile.PL0000644000175000017500000006362312334200655017661 0ustar gregoagregoause strict; use warnings; use ExtUtils::MakeMaker; use ExtUtils::Liblist; use Data::Dumper; use Config; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. # Supported windowing interfaces our $is_valid_interface = { 'AGL' => 'GLUT framework on Mac OS X', 'FREEGLUT' => 'FreeGLUT, preferred over GLUT', 'GLUT' => 'GLUT; often really FreeGLUT on Linux', 'GLX' => 'GLX+X11 not supported; use GLUT or FreeGLUT', 'W32API' => 'Uses WGL+FreeGLUT on CYGWIN, instead of GLX+FreeGLUT', 'WGL' => 'Same as W32API', }; # Makefile.PL Usage sub Usage { print "\n@_\n\n"; print qq { USAGE: perl Makefile.PL [OPTIONS] OPTIONS include: help This help message verbose Display additional status info, can be repeated for more verbosity dist=NO_EXCLUSIONS Build with no OpenGL Extension exclusions dist=EXCLUSIONS Override NO_EXCLUSIONS default for Win32 interface=XFACE Build for a specific windowing interface Currently supports: }; print "\n"; foreach my $xface (sort keys %$is_valid_interface) { print substr(" $xface ",0,24). "$is_valid_interface->{$xface}\n"; } print "\n"; exit(0); } Usage() if (@ARGV and $ARGV[0] =~ m|^([-/]*)?h(elp)?|i); # Get debugging flags our $verbose = 0; if ( grep { if (m/^verbose/i) { $verbose++; 1; } else { 0; } } @ARGV ) { # Strip out interface args @ARGV = grep { !m/^verbose=/i } @ARGV; } print "\$verbose set to $verbose\n" if $verbose; # Get distribution build flags our $dist_flags = {}; if ( grep { m/^dist=/i } @ARGV ) { foreach my $arg (@ARGV) { $dist_flags->{uc($1)}++ if ($arg =~ m/^dist=(\w+)/i); } # Setting both EXCLUSIONS and NO_EXCLUSIONS cancels each other out if ($dist_flags->{NO_EXCLUSIONS} && $dist_flags->{EXCLUSIONS}) { delete($dist_flags->{NO_EXCLUSIONS}); delete($dist_flags->{EXCLUSIONS}); } # Strip out interface args @ARGV = grep { !m/^dist=/i } @ARGV; } # Detect CYGWIN our $IS_CYGWIN = $^O eq 'cygwin'; print "Build platform \$IS_CYGWIN==$IS_CYGWIN\n" if $IS_CYGWIN and $verbose; our $IS_W32API = ($IS_CYGWIN && grep { m/^interface=(W32API|WGL)/i } @ARGV ); print "Build platform \$IS_W32API==$IS_W32API\n" if $IS_W32API and $verbose; # Detect MINGW our $IS_MINGW = 0; if ($^O eq 'MSWin32' && !$IS_CYGWIN) { $IS_MINGW = (($Config{make} =~ /\bdmake/i) && ($Config{cc} =~ /\bgcc/i)); print "Build platform \$IS_MINGW==$IS_MINGW\n" if $IS_MINGW and $verbose; } # Detect Strawberry Perl our $IS_STRAWBERRY = 0; if ($IS_MINGW) { $IS_STRAWBERRY = ($Config{cf_by} =~ m/strawberry-perl/i); print "Build platform \$IS_STRAWBERRY==$IS_STRAWBERRY\n" if $IS_STRAWBERRY and $verbose; } # Default to NO_EXCLUSIONS on Windows if ($^O eq 'MSWin32' || $IS_W32API) { $dist_flags->{NO_EXCLUSIONS} = $dist_flags->{EXCLUSIONS} ? 0 : 1; } # Look for available libs our @libdirs = qw { -L/usr/lib -L/usr/X11R6/lib -L/usr/local/lib -L/usr/openwin/lib -L/opt/csw/lib -L/usr/local/freeglut/lib }; our @check_libs = qw { -lGL -lopengl -lMesaGL -lGLU -lglu -lMesaGLU -lfreeglut -lGLUT -lglut -lMesaGLUT }; our $found_libs = get_libs(@libdirs,@check_libs); die "No OpenGL related libs found\n" if (!scalar($found_libs)); if ($verbose) { print "found libs:\n"; foreach my $key (sort keys %$found_libs) { print " $key = '$found_libs->{$key}'\n"; } } # Check for OpenGL installation our $DIST_DEFS = get_extensions($found_libs,$dist_flags->{NO_EXCLUSIONS}); # Don't build Makefile if we cannot compile+run glversion exit(0) unless length($DIST_DEFS); # Get user-specified interface my $interface_lib; if ( grep { m/^interface=/i } @ARGV ) { my @my_argv = @ARGV; # safe copy my @interface_opts = (); my $fallback = 0; foreach my $arg (@my_argv) { if ($arg =~ m/^interface=(\w+)/i) { my $interface = uc($1); my $valid_type = $is_valid_interface->{$interface}; if (!$valid_type) { Usage("Invalid interface: '$interface'"); next; } # test if requested interfaces supported # !!! Should use lookup table if ($interface eq 'W32API' or $interface eq 'WGL') { if (!$found_libs->{FREEGLUT32} && !$found_libs->{GLUT32}) { print "W32API interface requires GLUT or FreeGLUT\n"; next; } if (!$found_libs->{OPENGL32}) { print "W32API interface requires OpenGL32.dll\n"; next; } if (!$found_libs->{GLU32}) { print "W32API interface requires GLU32.dll\n"; next; } } elsif ($interface eq 'AGL') { if ($^O ne 'darwin' || !$found_libs->{GLUT}) { print "AGL interface requires GLUT.framework\n"; next; } } elsif ($interface =~ m|GLUT|) { if ($interface eq 'FREEGLUT') { if (!$found_libs->{FREEGLUT} && !$found_libs->{FREEGLUT32}) { print "FREEGLUT interface requires FreeGLUT\n"; if ($found_libs->{GLUT}) { print "Falling back to the GLUT interface\n"; $interface = 'GLUT'; $fallback++; } else { print "Try installing FREEGLUT first\n"; next; } } } elsif ($interface eq 'GLUT') { if (!$found_libs->{GLUT} && $found_libs->{FREEGLUT}) { $found_libs->{GLUT} = $found_libs->{FREEGLUT}; } if (!$found_libs->{GLUT32} && $found_libs->{FREEGLUT32}) { $found_libs->{GLUT32} = $found_libs->{FREEGLUT32}; } if ($found_libs->{GLUT}) { delete($found_libs->{FREEGLUT}); } if ($found_libs->{GLUT32}) { delete($found_libs->{FREEGLUT32}); } if (!$found_libs->{GLUT} && !$found_libs->{GLUT32}) { print "GLUT interface requires GLUT or FreeGLUT but libs were not found\n"; next; } } else { print "Error in interface argument processing\n"; next; } } elsif ($interface eq 'GLX') { print "\n"; print "***********************************************************************\n"; print "* ERROR: GLX interface is not supported, use GLUT or FreeGLUT instead *\n"; print "***********************************************************************\n"; print "\n"; exit 0; if (!$found_libs->{GL} && !$found_libs->{MESA} && !$found_libs->{GLX}) { print "GLX interface requires GLX/X11 but the libraries were not found\n"; next; } } elsif (!$found_libs->{$interface}) { print "$interface interface not supported\n"; next; } push(@interface_opts,$interface); } } my $interfaces = scalar(@interface_opts); if (!$interfaces) { die "ERROR: no supported interfaces found.\n"; } elsif ($interfaces > 1) { die "ERROR: multiple opengl interfaces requested: @interface_opts.\n"; } ($interface_lib) = @interface_opts; print "User set interface to $interface_lib\n" if ($verbose && !$fallback); # Strip out interface args @ARGV = grep { !m/^interface=/i } @ARGV; } # Otherwise use available defaults elsif ($IS_CYGWIN) { if ($found_libs->{FREEGLUT}) { $interface_lib = 'FREEGLUT'; # CYGWIN will use X11 interface by default } elsif($found_libs->{GLUT}) { $interface_lib = 'GLUT'; } elsif($found_libs->{GLUT32} || $found_libs->{FREEGLUT32}) { $interface_lib = 'W32API'; } else { die "No suitable OpenGL+GLUT interface found for CYGWIN\n"; } } elsif ($^O eq 'darwin' && $found_libs->{GLUT}) { $interface_lib = 'AGL'; } elsif ($found_libs->{FREEGLUT} || $found_libs->{FREEGLUT32}) { $interface_lib = 'FREEGLUT'; } elsif ($found_libs->{GLUT} || $found_libs->{GLUT32}) { $interface_lib = 'GLUT'; } else { die "FreeGLUT or GLUT libraries were not found, won't build OpenGL module."; } print "\nUsing interface: $interface_lib\n\n"; # Marshall compiler defines our $DEFS = $DIST_DEFS; if ($IS_STRAWBERRY) { delete($found_libs->{'GLX'}); delete($found_libs->{'MESA'}); $found_libs->{'GLU'} = $found_libs->{'GLU32'}; $found_libs->{'GL'} = $found_libs->{'OPENGL32'}; $DEFS .= " -DIS_STRAWBERRY"; } elsif (($^O eq 'MSWin32') || $IS_W32API || $IS_MINGW) { delete($found_libs->{'GLX'}); delete($found_libs->{'MESA'}); $found_libs->{'FREEGLUT'} = $found_libs->{'FREEGLUT32'}; $found_libs->{'GLUT'} = $found_libs->{'GLUT32'}; $found_libs->{'GLU'} = $found_libs->{'GLU32'}; $found_libs->{'GL'} = $found_libs->{'OPENGL32'}; } elsif($IS_CYGWIN) { delete($found_libs->{'FREEGLUT32'}); delete($found_libs->{'GLUT32'}); delete($found_libs->{'GLU32'}); delete($found_libs->{'OPENGL32'}); } if (0) { # May be not necessary now, see if removing makes a difference if (!$found_libs->{'GL'}) { if ($found_libs->{'GLX'}) { $found_libs->{'GL'} = $found_libs->{'GLX'}; } elsif ($found_libs->{'MESA'}) { $found_libs->{'GL'} = $found_libs->{'MESA'}; } } } print "resulting libs:\n" if ($verbose); foreach my $key (sort keys %$found_libs) { next if (!$found_libs->{$key}); $DEFS .= " -DHAVE_$key"; print " $key = '$found_libs->{$key}'\n" if ($verbose); } # Configure MakeMaker my($INCS,$LIBS,$OPTS,$CLEAN,$LDFROM); my $EXES = []; my $DYNS = {}; if ($IS_W32API || (($^O eq 'MSWin32') && !$IS_CYGWIN)) # Win32 { my $glut_lib = '-lopengl32 -lglu32 '; if ($interface_lib eq 'GLUT') { $glut_lib .= '-lglut32'; } elsif ($interface_lib eq 'FREEGLUT' and $IS_STRAWBERRY) { $glut_lib .= '-lglut'; } else { $glut_lib .= '-LFreeGLUT -lfreeglut'; } if ($IS_MINGW) # MINGW { $LDFROM = $glut_lib; } elsif ($IS_W32API) # CYGWIN W32API { my $glut = ($found_libs->{FREEGLUT32}) ? $found_libs->{FREEGLUT32} : $found_libs->{GLUT32}; $LIBS = "-L/usr/lib/w32api $glut_lib"; $LDFROM = $glut_lib; ### $INCS = '-I/usr/include/w32api'; $INCS = '-I/usr/include/opengl'; $DEFS .= " -DHAVE_W32API"; $DYNS = { OTHERLDFLAGS => '-Wl,--exclude-symbols,'."\x7F".$glut.'_NULL_THUNK_DATA' }; } else # Windows VC6 { $LIBS = $glut_lib; $OPTS = "/ogity /GDs"; } # Using a dll as EXES is incorrect for EU::MM, since the EXES here mean # perl scripts and not windows binaries or DLLs. This puts the DLL in # blib/bin from whence it should be installed correctly. It is not # clear that this step is even needed since the freeglut.dll is installed # by this Makefile.PL if no FreeGLUT is found. # ## $EXES = ['FreeGLUT/freeglut.dll']; { system $^X , qw[-MExtUtils::Command -e mkpath --], qw[blib/bin]; system $^X , qw[-MExtUtils::Command -e cp --], qw[FreeGLUT/freeglut.dll blib/bin/freeglut.dll]; } } elsif ($interface_lib eq 'AGL') # Mac OS X { $INCS = ""; # no include flags required: Apple gcc will automatically pick up the system frameworks $DEFS .= " -DHAVE_AGL_GLUT"; # So we know we have glutWMCloseFunc() and glutCheckLoop() $DYNS = { OTHERLDFLAGS => "-framework OpenGL -framework GLUT" }; } else # Everyone else { my @includes = qw { -I/usr/include -I/usr/X11R6/include -I/usr/local/include -I/usr/openwin/include -I/opt/csw/include -I/usr/local/freeglut/include }; $INCS = "@includes"; # Test for obfuscated GLX # quite often GLX is in -lGL... Test for GL/glx.h instead... my $out = cfile_text('GL/glx.h'); # The cpp would not let this macro through. Check for something else # that still exists after the cpp pass. a typedef, or type would work my $has_glx = ($out =~ m|GLXContext|); if ($has_glx) { #delete($found_libs->{GLX}); $DEFS .= " -DHAVE_GLX"; } elsif (!$found_libs->{GLX} && $verbose) { print "GLX not found (neither library, nor headers)."; } # Test for obfuscated Freeglut # quite often Freeglut is in -lglut... Test for GL/freeglut.h instead... $out = cfile_text('GL/freeglut.h'); # The cpp would not let this macro through. Check for something else # that still exists after the cpp pass. a typedef, or type would work my $has_freeglut = ($out =~ m|glutMainLoopEvent|); if ($has_freeglut) { #delete($found_libs->{GLX}); $DEFS .= " -DHAVE_FREEGLUT -DHAVE_FREEGLUT_H"; $found_libs->{FREEGLUT}="glut"; } # Marshall libs my $libs = ' -l'.join(' -l',values(%$found_libs)); my @more_libs = qw { -lXext -lXmu -lXi -lICE -lX11 -lm }; #-lXIE $LIBS = "@libdirs $libs @more_libs"; $DEFS .= " -DGL_GLEXT_LEGACY"; # Handle obfuscated gcc my $no_lgcc = (grep /^NO_LGCC$/, @ARGV); @ARGV = grep !/^NO_LGCC$/, @ARGV; if (!$no_lgcc) { # This may be a gcc compiler in disguise. # Should check for gccversion as well. if ($Config{cc} ne 'gcc' && !$Config{gccversion}) { my $gcclibdir; my $gccout = `gcc -v 2>&1`; if ($gccout =~ /specs from (.*)/) # gcc present { ($gcclibdir = $1) =~ s,\bspecs\s*$,,; $LIBS .= " -L$gcclibdir -lgcc"; print STDERR qq { # ### Non-gcc compiler, and gcc is present. ### Adding -lgcc as a dependency: your OpenGL libraries may be gcc-compiled. ### Use NO_LGCC command-line option to disable this. # }; } } } } # Check for gcc version 3.2.3 and turn off OPTIMIZE to work # around compiler bug reported via cpan testers reports if ( defined( $Config{gccversion} ) and $Config{gccversion} =~ /^3\.2\.3 / ) { $OPTS = '-O0'; # turn off optimization for gcc 3.2.3 } clean_incs( $INCS ); clean_libs( $LIBS ); # This is the final build configuration my $build_config = { 'NAME' => 'OpenGL', 'VERSION_FROM'=> 'OpenGL.pm', 'PM' => { 'OpenGL.pm' => '$(INST_LIBDIR)/OpenGL.pm', 'OpenGL.pod'=> '$(INST_LIBDIR)/OpenGL.pod', 'Array.pod'=> '$(INST_LIBDIR)/OpenGL/Array.pod', 'Tessellation.pod'=> '$(INST_LIBDIR)/OpenGL/Tessellation.pod', 'Config.pm' => '$(INST_LIBDIR)/OpenGL/Config.pm' }, 'PREREQ_PM' => { 'Test::More' => 0 }, 'AUTHOR' => "Chris Marshall ".'', 'OBJECT' => '$(BASEEXT)$(OBJ_EXT) gl_util$(OBJ_EXT) pogl_const$(OBJ_EXT) pogl_gl_top$(OBJ_EXT) pogl_glu$(OBJ_EXT) pogl_rpn$(OBJ_EXT) pogl_glut$(OBJ_EXT) pogl_gl_Accu_GetM$(OBJ_EXT) pogl_gl_GetP_Pass$(OBJ_EXT) pogl_gl_Mult_Prog$(OBJ_EXT) pogl_gl_Pixe_Ver2$(OBJ_EXT) pogl_gl_Prog_Clam$(OBJ_EXT) pogl_gl_Tex2_Draw$(OBJ_EXT) pogl_gl_Ver3_Tex1$(OBJ_EXT) pogl_gl_Vert_Multi$(OBJ_EXT)', 'XSPROTOARG' => '-noprototypes', 'DEFINE' => $DEFS, 'INC' => $INCS, 'LIBS' => $LIBS, 'dynamic_lib' => $DYNS, 'LDFROM' => '$(OBJECT) '.(defined($LDFROM)?$LDFROM:''), 'META_MERGE' => { abstract => 'Perl bindings to the OpenGL API, GLU, and GLUT/FreeGLUT', resources => { homepage => 'http://sourceforge.net/projects/pogl/', bugtracker => 'http://sourceforge.net/tracker/?group_id=562483&atid=2281758', repository => 'git://pogl.git.sourceforge.net/gitroot/pogl/pogl', }, }, 'EXE_FILES' => $EXES, 'OPTIMIZE' => $OPTS, 'clean' => { FILES => "Config.pm ". "utils/glversion.txt ". "utils/glversion$Config{exe_ext} ". "utils/glversion$Config{obj_ext}" } }; if ($verbose) { print "\nMakeMaker configuration:\n"; } else { open(SAVEERR, ">&STDERR"); close(STDERR); } close(CONF) if (open(CONF,">Config.pm")); # Generate place-holder Config.pm WriteMakefile( %$build_config ); # Generate the Makefile WriteConfigPM( $build_config ); # Regenerate final Config.pm if (!$verbose) { open(STDERR, ">&SAVEERR"); } if ($found_libs->{GLX} && $ENV{TERM} ne 'xterm') { print "\nThis configuration should be built under an X11 shell\n\n"; } exit 0; # test header files for extensions sub cfile_text { my($filename) = @_; # Use $Config{cpprun}, instead of $Config{cpp}. cpp is simply set to # 'cpp' after Configure has run, which is not useful, since it lives # in /lib/ on many systems, which is normally not on the path. This # is documented, but silly behaviour. $Config{cpprun} is what is # documented to be set to a cpp that will take stuff on stdin my $cmd = "echo '\#include \"$filename\"' | ". "$Config{cpprun} $INCS $Config{cppflags} $Config{cppminus} 2>&1"; return `$cmd`; } # Find OpenGL-related Libs sub get_libs { my @glx_libs = @_; my $found = {}; my $libs; # Mac OS X if ($^O eq 'darwin' && -d '/System/Library/Frameworks/OpenGL.framework') { $found->{GL} = 'OpenGL.framework'; $found->{GLU} = 'AGL.framework'; $found->{GLUT} = 'GLUT.framework'; return $found; } # Win32 if ($IS_STRAWBERRY) { # libs for strawberry perl go here $found->{FREEGLUT} = 'glut'; $found->{OPENGL32} = 'opengl32'; $found->{GLU32} = 'glu32'; } elsif (($^O eq 'MSWin32') || $IS_W32API) { my $paths = $ENV{PATH}; $paths =~ s|\\|/|g; my $sep = $IS_W32API ? ':' : ';'; my @paths = split($sep.'\s*',$paths); my $sysroot = $ENV{'SYSTEMROOT'}; @paths = ("$sysroot/system32",@paths) if ($sysroot); $libs = {OPENGL32=>'opengl32.dll',GLU32=>'glu32.dll',GLUT32=>'glut32.dll',FREEGLUT32=>'freeglut.dll'}; foreach my $key (sort keys %$libs) { foreach my $path (@paths) { $path =~ s|/$||; my $lib = $libs->{$key}; next if (!-e "$path/$lib"); $lib =~ s/\.dll$//i; # print " $key: $lib\n"; $found->{$key} = $lib; last; } } # Install FreeGLUT if not found if (!$found->{FREEGLUT32} and !$IS_STRAWBERRY) { my $dll_dir = $Config{installsitebin}; my $exec; if ($IS_W32API) { $dll_dir = '/usr/local/bin' if ($dll_dir eq '/usr/bin'); $exec = "cp FreeGLUT/freeglut.dll $dll_dir"; } else { $exec = "copy FreeGLUT\\freeglut.dll $dll_dir"; } `$exec`; if (! -x "$dll_dir/freeglut.dll") { my $mode = (stat("$dll_dir/freeglut.dll"))[2]; my $perm = $mode & 07777; print "freeglut.dll not executable (perms=%4o), changing permissions...\n"; chmod $perm|0755, "$dll_dir/freeglut.dll" or warn "Error changing freeglut.dll perms: $!"; } if (-e "$dll_dir/freeglut.dll") { print "Installed freeglut.dll at $dll_dir\n"; $found->{FREEGLUT32} = 'freeglut' } else { print "Unable to install freeglut.dll to $dll_dir\n"; print "Try manually copying FreeGLUT/freeglut.dll to a folder in your PATH.\n"; } } return $found if (!$IS_W32API); } # Everyone else open(SAVEERR, ">&STDERR"); close(STDERR); ($libs) = ExtUtils::Liblist->ext(join(' ',@glx_libs),0); open(STDERR, ">&SAVEERR"); foreach my $lib (split(' ',$libs)) { next if ($lib =~ m|^-L|); $lib =~ s/^-l//; #print " $lib\n"; if ($lib =~ m|([\w]*freeglut[\w]*)|i) { $found->{FREEGLUT} = $1; } elsif ($lib =~ m|([\w]*glut[\w]*)$|i) { $found->{GLUT} = $1; } elsif ($lib =~ m|([\w]*glu[\w]*)$|i) { $found->{GLU} = $1; } elsif ($lib =~ m|([\w-]*glx)$|i) { $found->{GLX} = $1; } elsif ($lib =~ m|([\w]*gl)$|i) { $found->{GL} = $1; } if ($lib =~ m|([\w]*mesa(gl)?.*)|i) { $found->{MESA} = $1; } } return $found; } # Test for available OpenGL Extensions sub get_extensions { my($found,$no_excl) = @_; print "Testing for OpenGL Extensions\n" if ($verbose); # clean up previous output files my $exc_file = 'gl_exclude.h'; unlink($exc_file) if (-e $exc_file); my $glv_file = 'utils/glversion.txt'; unlink($glv_file) if (-e $glv_file); # Only run the rest if GLUT is installed print "Testing GLUT version\n" if ($verbose); my($lib,$def); if ($found->{FREEGLUT32} || $found->{FREEGLUT}) { $lib = $found->{FREEGLUT32} || $found->{FREEGLUT}; $def = "HAVE_FREEGLUT"; } elsif ($found->{GLUT32} || $found->{GLUT}) { $lib = $found->{GLUT32} || $found->{GLUT}; $def = "HAVE_GLUT"; } elsif ($verbose) { print "GLUT not found\n"; } # Platform-specific makefiles for glversion my $make_ver; if ($IS_STRAWBERRY) { $make_ver = "&strawberry.bat"; print "strawberry glversion: '$make_ver'\n" if $verbose>1; } elsif ($IS_MINGW) { $make_ver = "&mingw.bat"; print "mingw glversion: '$make_ver'\n" if $verbose>1; } elsif ($IS_W32API) { $make_ver = ";make -f Makefile.cygwin " . (length($lib) ? "GLUT_LIB=$lib " : "") . (length($def) ? "GLUT_DEF=$def " : ""); print "cygwin glversion: '$make_ver'\n" if $verbose>1; } elsif ($^O eq 'MSWin32') { $make_ver = '&nmake -f makefile.mak ' . (length($def) ? "GLUT_DEF=$def " : ""); print "MSWin32 glversion: '$make_ver'\n" if $verbose>1; } elsif ($^O eq 'darwin') { $make_ver = ";make -f Makefile.macosx " . (length($lib) ? "GLUT_LIB=$lib " : "") . (length($def) ? "GLUT_DEF=$def " : ""); print "MacOSX glversion: '$make_ver'\n" if $verbose>1; } else { if ($ENV{TERM} ne 'xterm') { print "\nIn order to test your GPU's capabilities, run this make under an X11 shell\n\n"; } $make_ver = ";make -f Makefile " . (length($lib) ? "GLUT_LIB=$lib " : "") . (length($def) ? "GLUT_DEF=$def " : ""); print "glversion: '$make_ver'\n" if $verbose>1; } my $exec = 'cd utils'."$make_ver clean".$make_ver; print "glversion: $exec\n" if ($verbose); my $stat = `$exec`; print "\n$stat\n\n" if ($verbose); # Parse glversion.txt file if ( !defined(open(GLDATA,$glv_file)) ) { print "get_extensions: could not open $glv_file: $!\n" if $verbose; return ''; } my $gldata = {}; my @gldata = ; close(GLDATA); foreach my $line (@gldata) { $line =~ s|[\r\n]+||; my($key,$val) = split('=',$line); $gldata->{$key} = $val; } if (!scalar(keys %$gldata)) { print "get_extensions: no extensions found in $glv_file\n" if $verbose; return ''; } # Parse glext_procs.h file return '' if (!open(GLEXT,"glext_procs.h")); my @lines = ; close(GLEXT); my $no_ext = {}; foreach my $line (@lines) { next if ($line !~ m|\#ifndef NO_([^\s]+)|); my $ext = $1; next if ($ext =~ m|^GL_VERSION_|); $no_ext->{$ext}++; } # Create gl_exclude.h die "Unable to write to $exc_file\n" if (!open(GLEXC,">$exc_file")); print GLEXC "// OpenGL Extension Exclusions - may be modified before building.\n"; print GLEXC "//\n"; print GLEXC "// Generated for ".$gldata->{VENDOR}.", ".$gldata->{RENDERER}."\n"; print GLEXC "// OpenGL v".$gldata->{VERSION}.", using "; # Fix GLUT flags based on results if ($gldata->{GLUT} > 0) { print 'Found FreeGLUT v'.$gldata->{GLUT}."\n"; print GLEXC 'FreeGLUT v'.$gldata->{GLUT}."\n"; if (!$found->{FREEGLUT} && !$found->{FREEGLUT32}) { $found->{FREEGLUT} = $lib; } } else { print "Found GLUT - unknown version\n"; } # Make an empty exclusion file if a Windows distribution build if ($no_excl) { print "OpenGL Extension exclusions disabled\n"; print GLEXC "//\n"; print GLEXC "// Exclusions omitted for distribution build.\n"; } else { print GLEXC "\n"; if ($gldata->{VERSION} =~ m|^(\d\.\d+)|) { my $ver = $1; print GLEXC "#define NO_GL_VERSION_2_0\n" if ($ver < 2.0); print GLEXC "#define NO_GL_VERSION_1_5\n" if ($ver < 1.5); print GLEXC "#define NO_GL_VERSION_1_4\n" if ($ver < 1.4); print GLEXC "#define NO_GL_VERSION_1_3\n" if ($ver < 1.3); print GLEXC "#define NO_GL_VERSION_1_2\n" if ($ver < 1.2); print GLEXC "#define NO_GL_VERSION_1_1\n" if ($ver < 1.1); } foreach my $ext (split(' ',$gldata->{EXTENSIONS})) { next if (!$no_ext->{$ext}); $no_ext->{$ext} = 0; } foreach my $ext (sort keys(%$no_ext)) { next if (!$no_ext->{$ext}); print GLEXC "#define NO_$ext\n"; } } close(GLEXC); # return Distributable Defs print "Have Version Data\n" if ($verbose); return '-DHAVE_VER'; } # Takes as input a INCS string ready for MakeMaker and cleans out # non-existant directories produce a minimal configuration value sub clean_incs { my $inincs = $_[0]; return unless defined $inincs; print "clean_incs: got input INCS='$inincs'\n" if $verbose>1; my @inincs = split / /, $inincs; # clean out -I args with non-existent directories print "clean_incs: removing bad directories\n" if $verbose>1; my @outincs = grep { my $tmp = $_; $tmp =~ s/^-I// and ( -d $tmp or -l $tmp) } @inincs; my $outincs = join ' ', @outincs; print "clean_incs: returning INCS='$outincs'\n" if $verbose>1; $_[0] = $outincs; } # Takes as input a LIBS string ready for MakeMaker and cleans out # non-existant directories and libraries to produce a better, # minimal configuration value sub clean_libs { my $inlibs = $_[0]; return unless defined $inlibs; print "clean_libs: got input LIBS='$inlibs'\n" if $verbose>1; my @inlibs = split ' ', $inlibs; # clean out -L args with non-existent directories print "clean_libs: removing bad directories\n" if $verbose>1; my @outlibs = grep { my $tmp = $_; /^-l/ or $tmp =~ s/^-L// and ( -d $tmp or -l $tmp) } @inlibs; my $outlibs = join ' ', @outlibs; print "clean_libs: returning LIBS='$outlibs'\n" if $verbose>1; $_[0] = $outlibs; } # Dump Config.pm sub WriteConfigPM { my($config) = @_; die "Unable to write to Config.pm\n" if (!open(CONFIGPM, ">Config.pm")); print CONFIGPM q { # This is the Perl OpenGL build configuration file. # It contains the final OpenGL build arguements from # the configuration process. Access the values by # use OpenGL::Config which defines the variable # $OpenGL::Config containing the hash arguments from # the WriteMakefile() call. # }; print CONFIGPM Data::Dumper->Dump( [$config], [qw(OpenGL::Config)] ); print CONFIGPM qq { 1; __END__ }; close(CONFIGPM); }; libopengl-perl-0.6704+dfsg.orig/pogl_gl_Mult_Prog.xs0000644000175000017500000012272612334200655021676 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:09:59 PM */ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* OpenGL GLX bindings */ #define IN_POGL_GLX_XS #include #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::MultProg PACKAGE = OpenGL #ifdef HAVE_GL #ifdef GL_ARB_multitexture #//# glMultiTexCoord3dARB($target,$s,$t,$r); void glMultiTexCoord3dARB(target,s,t,r) GLenum target GLdouble s GLdouble t GLdouble r INIT: loadProc(glMultiTexCoord3dARB,"glMultiTexCoord3dARB"); CODE: glMultiTexCoord3dARB(target,s,t,r); #//# glMultiTexCoord3dvARB_c(target,(CPTR)v); void glMultiTexCoord3dvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3dvARB,"glMultiTexCoord3dvARB"); CODE: glMultiTexCoord3dvARB(target,v); #//# glMultiTexCoord3dvARB_s(target,(PACKED)v); void glMultiTexCoord3dvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3dvARB,"glMultiTexCoord3dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)); glMultiTexCoord3dvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord3dARB #//# glMultiTexCoord3dvARB_p($target,$s,$t,$r); void glMultiTexCoord3dvARB_p(target,s,t,r) GLenum target GLdouble s GLdouble t GLdouble r INIT: loadProc(glMultiTexCoord3dvARB,"glMultiTexCoord3dvARB"); CODE: { GLdouble param[3]; param[0] = s; param[1] = t; param[2] = r; glMultiTexCoord3dvARB(target,param); } #//# glMultiTexCoord3fARB($target,$s,$t,$r); void glMultiTexCoord3fARB(target,s,t,r) GLenum target GLfloat s GLfloat t GLfloat r INIT: loadProc(glMultiTexCoord3fARB,"glMultiTexCoord3fARB"); CODE: glMultiTexCoord3fARB(target,s,t,r); #//# glMultiTexCoord3fvARB_c($target,(CPTR)v); void glMultiTexCoord3fvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3fvARB,"glMultiTexCoord3fvARB"); CODE: glMultiTexCoord3fvARB(target,v); #//# glMultiTexCoord3fvARB_s($target,(PACKED)v); void glMultiTexCoord3fvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3fvARB,"glMultiTexCoord3fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)); glMultiTexCoord3fvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord3fARB #//# glMultiTexCoord3fvARB_p($target,$s,$t,$r); void glMultiTexCoord3fvARB_p(target,s,t,r) GLenum target GLfloat s GLfloat t GLfloat r INIT: loadProc(glMultiTexCoord3fvARB,"glMultiTexCoord3fvARB"); CODE: { GLfloat param[3]; param[0] = s; param[1] = t; param[2] = r; glMultiTexCoord3fvARB(target,param); } #//# glMultiTexCoord3iARB($target,$s,$t,$r); void glMultiTexCoord3iARB(target,s,t,r) GLenum target GLint s GLint t GLint r INIT: loadProc(glMultiTexCoord3iARB,"glMultiTexCoord3iARB"); CODE: glMultiTexCoord3iARB(target,s,t,r); #//# glMultiTexCoord3ivARB_c($target,(CPTR)v); void glMultiTexCoord3ivARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3ivARB,"glMultiTexCoord3ivARB"); CODE: glMultiTexCoord3ivARB(target,v); #//# glMultiTexCoord3ivARB_s($target,(PACKED)v); void glMultiTexCoord3ivARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3ivARB,"glMultiTexCoord3ivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)); glMultiTexCoord3ivARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord3iARB #//# glMultiTexCoord3ivARB_p($target,$s,$t,$r); void glMultiTexCoord3ivARB_p(target,s,t,r) GLenum target GLint s GLint t GLint r INIT: loadProc(glMultiTexCoord3ivARB,"glMultiTexCoord3ivARB"); CODE: { GLint param[3]; param[0] = s; param[1] = t; param[2] = r; glMultiTexCoord3ivARB(target,param); } #//# glMultiTexCoord3sARB($target,$s,$t,$r); void glMultiTexCoord3sARB(target,s,t,r) GLenum target GLshort s GLshort t GLshort r INIT: loadProc(glMultiTexCoord3sARB,"glMultiTexCoord3sARB"); CODE: glMultiTexCoord3sARB(target,s,t,r); #//# glMultiTexCoord3svARB_c($target,(CPTR)v); void glMultiTexCoord3svARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3svARB,"glMultiTexCoord3svARB"); CODE: glMultiTexCoord3svARB(target,v); #//# glMultiTexCoord3svARB_s($target,(PACKED)v); void glMultiTexCoord3svARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord3svARB,"glMultiTexCoord3svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)); glMultiTexCoord3svARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord3sARB #//# glMultiTexCoord3svARB_p($target,$s,$t,$r); void glMultiTexCoord3svARB_p(target,s,t,r) GLenum target GLshort s GLshort t GLshort r INIT: loadProc(glMultiTexCoord3svARB,"glMultiTexCoord3svARB"); CODE: { GLshort param[3]; param[0] = s; param[1] = t; param[2] = r; glMultiTexCoord3svARB(target,param); } #//# glMultiTexCoord4dARB($target,$s,$t,$r,$q); void glMultiTexCoord4dARB(target,s,t,r,q) GLenum target GLdouble s GLdouble t GLdouble r GLdouble q INIT: loadProc(glMultiTexCoord4dARB,"glMultiTexCoord4dARB"); CODE: glMultiTexCoord4dARB(target,s,t,r,q); #//# glMultiTexCoord4dvARB_c($target,(CPTR)v); void glMultiTexCoord4dvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4dvARB,"glMultiTexCoord4dvARB"); CODE: glMultiTexCoord4dvARB(target,v); #//# glMultiTexCoord4dvARB_s($target,(PACKED)v); void glMultiTexCoord4dvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4dvARB,"glMultiTexCoord4dvARB"); CODE: { GLdouble * v_s = EL(v, sizeof(GLdouble)); glMultiTexCoord4dvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord4dARB #//# glMultiTexCoord4dvARB_p($target,$s,$t,$r,$q); void glMultiTexCoord4dvARB_p(target,s,t,r,q) GLenum target GLdouble s GLdouble t GLdouble r GLdouble q INIT: loadProc(glMultiTexCoord4dvARB,"glMultiTexCoord4dvARB"); CODE: { GLdouble param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glMultiTexCoord4dvARB(target,param); } #//# glMultiTexCoord4fARB($target,$s,$t,$r,$q); void glMultiTexCoord4fARB(target,s,t,r,q) GLenum target GLfloat s GLfloat t GLfloat r GLfloat q INIT: loadProc(glMultiTexCoord4fARB,"glMultiTexCoord4fARB"); CODE: glMultiTexCoord4fARB(target,s,t,r,q); #//# glMultiTexCoord4fvARB_c($target,(CPTR)v); void glMultiTexCoord4fvARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4fvARB,"glMultiTexCoord4fvARB"); CODE: glMultiTexCoord4fvARB(target,v); #//# glMultiTexCoord4fvARB_s($target,(PACKED)v); void glMultiTexCoord4fvARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4fvARB,"glMultiTexCoord4fvARB"); CODE: { GLfloat * v_s = EL(v, sizeof(GLfloat)); glMultiTexCoord4fvARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord4fARB #//# glMultiTexCoord4fvARB_p($target,$s,$t,$r,$q); void glMultiTexCoord4fvARB_p(target,s,t,r,q) GLenum target GLfloat s GLfloat t GLfloat r GLfloat q INIT: loadProc(glMultiTexCoord4fvARB,"glMultiTexCoord4fvARB"); CODE: { GLfloat param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glMultiTexCoord4fvARB(target,param); } #//# glMultiTexCoord4iARB($target,$s,$t,$r,$q) void glMultiTexCoord4iARB(target,s,t,r,q) GLenum target GLint s GLint t GLint r GLint q INIT: loadProc(glMultiTexCoord4iARB,"glMultiTexCoord4iARB"); CODE: glMultiTexCoord4iARB(target,s,t,r,q); #//# glMultiTexCoord4ivARB_c($target,(CPTR)v); void glMultiTexCoord4ivARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4ivARB,"glMultiTexCoord4ivARB"); CODE: glMultiTexCoord4ivARB(target,v); #//# glMultiTexCoord4ivARB_s($target,(PACKED)v); void glMultiTexCoord4ivARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4ivARB,"glMultiTexCoord4ivARB"); CODE: { GLint * v_s = EL(v, sizeof(GLint)); glMultiTexCoord4ivARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord4iARB #//# glMultiTexCoord4ivARB_p($target,$s,$t,$r,$q); void glMultiTexCoord4ivARB_p(target,s,t,r,q) GLenum target GLint s GLint t GLint r GLint q INIT: loadProc(glMultiTexCoord4ivARB,"glMultiTexCoord4ivARB"); CODE: { GLint param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glMultiTexCoord4ivARB(target,param); } #//# glMultiTexCoord4sARB($target,$s,$t,$r,$q); void glMultiTexCoord4sARB(target,s,t,r,q) GLenum target GLshort s GLshort t GLshort r GLshort q INIT: loadProc(glMultiTexCoord4sARB,"glMultiTexCoord4sARB"); CODE: glMultiTexCoord4sARB(target,s,t,r,q); #//# glMultiTexCoord4svARB_c($target,(CPTR)v); void glMultiTexCoord4svARB_c(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4svARB,"glMultiTexCoord4svARB"); CODE: glMultiTexCoord4svARB(target,v); #//# glMultiTexCoord4svARB_s($target,(PACKED)v); void glMultiTexCoord4svARB_s(target,v) GLenum target void *v INIT: loadProc(glMultiTexCoord4svARB,"glMultiTexCoord4svARB"); CODE: { GLshort * v_s = EL(v, sizeof(GLshort)); glMultiTexCoord4svARB(target,v_s); } #//!!! Do we really need this? It duplicates glMultiTexCoord4sARB #//# glMultiTexCoord4svARB_p($target,$s,$t,$r,$q); void glMultiTexCoord4svARB_p(target,s,t,r,q) GLenum target GLshort s GLshort t GLshort r GLshort q INIT: loadProc(glMultiTexCoord4svARB,"glMultiTexCoord4svARB"); CODE: { GLshort param[4]; param[0] = s; param[1] = t; param[2] = r; param[3] = q; glMultiTexCoord4svARB(target,param); } #endif #ifdef GL_ARB_shader_objects #//# glDeleteObjectARB($obj); void glDeleteObjectARB(obj) GLhandleARB obj INIT: loadProc(glDeleteObjectARB,"glDeleteObjectARB"); CODE: { glDeleteObjectARB(obj); } #//# glGetHandleARB($pname); GLhandleARB glGetHandleARB(pname) GLenum pname INIT: loadProc(glGetHandleARB,"glGetHandleARB"); CODE: { RETVAL = glGetHandleARB(pname); } OUTPUT: RETVAL #//# glDetachObjectARB($containerObj, $attachedObj); void glDetachObjectARB(containerObj, attachedObj) GLhandleARB containerObj GLhandleARB attachedObj INIT: loadProc(glDetachObjectARB,"glDetachObjectARB"); CODE: { glDetachObjectARB(containerObj, attachedObj); } #//# glCreateShaderObjectARB($shaderType); GLhandleARB glCreateShaderObjectARB(shaderType) GLenum shaderType INIT: loadProc(glCreateShaderObjectARB,"glCreateShaderObjectARB"); CODE: { RETVAL = glCreateShaderObjectARB(shaderType); } OUTPUT: RETVAL #//# glShaderSourceARB_c($shaderObj, $count, (CPTR)string, (CPTR)length); void glShaderSourceARB_c(shaderObj, count, string, length) GLhandleARB shaderObj GLsizei count void *string void *length INIT: loadProc(glShaderSourceARB,"glShaderSourceARB"); CODE: { glShaderSourceARB(shaderObj, count, string, length); } #//# glShaderSourceARB_p($shaderObj, @string); void glShaderSourceARB_p(shaderObj, ...) GLhandleARB shaderObj INIT: loadProc(glShaderSourceARB,"glShaderSourceARB"); CODE: { int i; int count = items - 1; GLcharARB **string = malloc(sizeof(GLcharARB *) * count); GLint *length = malloc(sizeof(GLint) * count); for(i=0;i> 1; GLfloat *value = malloc(sizeof(GLfloat) * elements); for(i=0;i> 2; GLfloat *value = malloc(sizeof(GLfloat) * elements); for(i=0;i> 1; GLint *value = malloc(sizeof(GLint) * elements); for(i=0;i> 2; GLint *value = malloc(sizeof(GLint) * elements); for(i=0;i #include "pgopogl.h" #ifdef HAVE_GL #include "gl_util.h" /* Note: this is caching procs once for all contexts */ /* !!! This should instead cache per context */ #if defined(_WIN32) || (defined(__CYGWIN__) && defined(HAVE_W32API)) #define loadProc(proc,name) \ { \ if (!proc) \ { \ proc = (void *)wglGetProcAddress(name); \ if (!proc) croak(name " is not supported by this renderer"); \ } \ } #define testProc(proc,name) ((proc) ? 1 : !!(proc = (void *)wglGetProcAddress(name))) #else /* not using WGL */ #define loadProc(proc,name) #define testProc(proc,name) 1 #endif /* not defined _WIN32, __CYGWIN__, and HAVE_W32API */ #endif /* defined HAVE_GL */ #ifdef HAVE_GLX #include "glx_util.h" #endif /* defined HAVE_GLX */ #ifdef HAVE_GLU #include "glu_util.h" #endif /* defined HAVE_GLU */ MODULE = OpenGL::GL::AccuGetM PACKAGE = OpenGL #ifdef HAVE_GL #// 1.0 #//# glAccum($op, $value); void glAccum(op, value) GLenum op GLfloat value #// 1.0 #//# glAlphaFunc($func, $ref); void glAlphaFunc(func, ref) GLenum func GLclampf ref #ifdef GL_VERSION_1_1 #//# glAreTexturesResident_c($n, (CPTR)textures, (CPTR)residences); void glAreTexturesResident_c(n, textures, residences) GLsizei n void * textures void * residences CODE: glAreTexturesResident(n, textures, residences); #//# glAreTexturesResident_s($n, (PACKED)textures, (PACKED)residences); void glAreTexturesResident_s(n, textures, residences) GLsizei n SV * textures SV * residences CODE: { void * textures_s = EL(textures, sizeof(GLuint)*n); void * residences_s = EL(residences, sizeof(GLboolean)*n); glAreTexturesResident(n, textures_s, residences_s); } #// 1.1 #//# (result,@residences) = glAreTexturesResident_p(@textureIDs); void glAreTexturesResident_p(...) PPCODE: { GLsizei n = items; GLuint * textures = malloc(sizeof(GLuint) * (n+1)); GLboolean * residences = malloc(sizeof(GLboolean) * (n+1)); GLboolean result; int i; for (i=0;ibind); } glColorPointer(size, oga->types[0], 0, oga->bind ? 0 : oga->data); #else glColorPointer(size, oga->types[0], 0, oga->data); #endif } #endif #// 1.0 #//# glCopyPixels($x, $y, $width, $height, $type); void glCopyPixels(x, y, width, height, type) GLint x GLint y GLsizei width GLsizei height GLenum type #ifdef GL_VERSION_1_1 #// 1.1 #//# glCopyTexImage1D($target, $level, $internalFormat, $x, $y, $width, $border); void glCopyTexImage1D(target, level, internalFormat, x, y, width, border) GLenum target GLint level GLenum internalFormat GLint x GLint y GLsizei width GLint border #// 1.1 #//# glCopyTexImage2D($target, $level, $internalFormat, $x, $y, $width, $height, $border); void glCopyTexImage2D(target, level, internalFormat, x, y, width, height, border) GLenum target GLint level GLenum internalFormat GLint x GLint y GLsizei width GLsizei height GLint border #// 1.1 #//# glCopyTexSubImage1D($target, $level, $xoffset, $x, $y, $width); void glCopyTexSubImage1D(target, level, xoffset, x, y, width) GLenum target GLint level GLint xoffset GLint x GLint y GLsizei width #// 1.1 #//# glCopyTexSubImage2D($target, $level, $xoffset, $yoffset, $x, $y, $width, $height); void glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) GLenum target GLint level GLint xoffset GLint yoffset GLint x GLint y GLsizei width GLsizei height #ifdef GL_VERSION_1_2 #// 1.2 #//# glCopyTexSubImage3D($target, $level, $xoffset, $yoffset, $zoffset, $x, $y, $width, $height); void glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height) GLenum target GLint level GLint xoffset GLint yoffset GLint zoffset GLint x GLint y GLsizei width GLsizei height INIT: loadProc(glCopyTexSubImage3D,"glCopyTexSubImage3D"); CODE: { glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); } #endif #endif #// 1.0 #//# glCullFace($mode); void glCullFace(mode) GLenum mode #// 1.0 #//# glDeleteLists($list, $range); void glDeleteLists(list, range) GLenum list GLsizei range #ifdef GL_VERSION_1_1 #// 1.1 #//# glDeleteTextures_c($items, (CPTR)list); void glDeleteTextures_c(items, list) GLint items void * list CODE: glDeleteTextures(items,list); #// 1.1 #//# glDeleteTextures_s($items, (PACKED)list); void glDeleteTextures_s(items, list) GLint items SV * list CODE: { void * list_s = EL(list, sizeof(GLuint) * items); glDeleteTextures(items,list_s); } #// 1.1 #//# glDeleteTextures_p(@textureIDs); void glDeleteTextures_p(...) CODE: if (items) { GLuint * list = malloc(sizeof(GLuint) * items); int i; for(i=0;i 3) { if (start < (GLuint)items-3) { GLuint * indices; GLuint i; if (start+count > (GLuint)(items-3)) count = (GLuint)items-(start+3); indices = malloc(sizeof(GLuint) * count); for (i=start; ibind); } glEdgeFlagPointer(0, oga->bind ? 0 : oga->data); #else glEdgeFlagPointer(0, oga->data); #endif } #endif #// 1.0 #//# glEnable($cap); void glEnable(cap) GLenum cap #// 1.0 #//# glDisable($cap); void glDisable(cap) GLenum cap #ifdef GL_VERSION_1_1 #// 1.1 #//# glEnableClientState($cap); void glEnableClientState(cap) GLenum cap #// 1.1 #//# glDisableClientState($cap); void glDisableClientState(cap) GLenum cap #endif #// 1.0 #//# glEvalCoord1d($u); void glEvalCoord1d(u) GLdouble u #// 1.0 #//# glEvalCoord1f($u); void glEvalCoord1f(u) GLfloat u #// 1.0 #//# glEvalCoord2d($u, $v); void glEvalCoord2d(u, v) GLdouble u GLdouble v #// 1.0 #//# glEvalCoord2f($u, $v); void glEvalCoord2f(u, v) GLfloat u GLfloat v #// 1.0 #//# glEvalMesh1($mode, $i1, $i2); void glEvalMesh1(mode, i1, i2) GLenum mode GLint i1 GLint i2 #// 1.0 #//# glEvalMesh2($mode, $i1, $i2, $j1, $j2); void glEvalMesh2(mode, i1, i2, j1, j2) GLenum mode GLint i1 GLint i2 GLint j1 GLint j2 #// 1.0 #//# glEvalPoint1($i); void glEvalPoint1(i) GLint i #// 1.0 #//# glEvalPoint2($i, $j); void glEvalPoint2(i, j) GLint i GLint j #// 1.0 #//# glFeedbackBuffer_c($size, $type, (CPTR)buffer); void glFeedbackBuffer_c(size, type, buffer) GLsizei size GLenum type void * buffer CODE: glFeedbackBuffer(size, type, (GLfloat*)(buffer)); #// 1.0 #//# glFinish(); void glFinish() #// 1.0 #//# glFlush(); void glFlush() #// 1.0 #//# glFogf($pname, $param); void glFogf(pname, param) GLenum pname GLfloat param #// 1.0 #//# glFogi($pname, $param); void glFogi(pname, param) GLenum pname GLint param #// 1.0 #//# glFogfv_c($pname, (CPTR)params); void glFogfv_c(pname, params) GLenum pname void * params CODE: glFogfv(pname, params); #// 1.0 #//# glFogiv_c($pname, (CPTR)params); void glFogiv_c(pname, params) GLenum pname void * params CODE: glFogiv(pname, params); #// 1.0 #//# glFogfv_s($pname, (PACKED)params); void glFogfv_s(pname, params) GLenum pname SV * params CODE: { GLfloat * params_s = EL(params, sizeof(GLfloat)*gl_fog_count(pname)); glFogfv(pname, params_s); } #// 1.0 #//# glFogiv_s($pname, (PACKED)params); void glFogiv_s(pname, params) GLenum pname SV * params CODE: { GLint * params_s = EL(params, sizeof(GLint)*gl_fog_count(pname)); glFogiv(pname, params_s); } #// 1.0 #//# glFogfv_p($pname, $param1, $param2=0, $param3=0, $param4=0); void glFogfv_p(pname, param1, param2=0, param3=0, param4=0) GLenum pname GLfloat param1 GLfloat param2 GLfloat param3 GLfloat param4 CODE: { GLfloat p[4]; p[0] = param1; p[1] = param2; p[2] = param3; p[3] = param4; glFogfv(pname, &p[0]); } #// 1.0 #//# glFogiv_p($pname, $param1, $param2=0, $param3=0, $param4=0); void glFogiv_p(pname, param1, param2=0, param3=0, param4=0) GLenum pname GLint param1 GLint param2 GLint param3 GLint param4 CODE: { GLint p[4]; p[0] = param1; p[1] = param2; p[2] = param3; p[3] = param4; glFogiv(pname, &p[0]); } #// 1.0 #//# glFrontFace($mode); void glFrontFace(mode) GLenum mode #// 1.0 #//# glFrustum($left, $right, $bottom, $top, $zNear, $zFar); void glFrustum(left, right, bottom, top, zNear, zFar) GLdouble left GLdouble right GLdouble bottom GLdouble top GLdouble zNear GLdouble zFar #// 1.0 #//# glGenLists($range); GLuint glGenLists(range) GLsizei range #ifdef GL_VERSION_1_1 #// 1.1 #//# glGenTextures_c($n, (CPTR)textures); void glGenTextures_c(n, textures) GLint n void * textures CODE: glGenTextures(n, textures); #// 1.1 #//# glGenTextures_s($n, (PACKED)textures); void glGenTextures_s(n, textures) GLint n SV * textures CODE: { void * textures_s = EL(textures, sizeof(GLuint)*n); glGenTextures(n, textures_s); } #// 1.1 #//# @textureIDs = glGenTextures_p($n); void glGenTextures_p(n) GLint n PPCODE: if (n) { GLuint * textures = malloc(sizeof(GLuint) * n); int i; glGenTextures(n, textures); EXTEND(sp, n); for(i=0;i' build_requires: ExtUtils::MakeMaker: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 6.86, CPAN::Meta::Converter version 2.142060' license: unknown meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: OpenGL no_index: directory: - t - inc requires: Test::More: '0' resources: bugtracker: http://sourceforge.net/tracker/?group_id=562483&atid=2281758 homepage: http://sourceforge.net/projects/pogl/ repository: git://pogl.git.sourceforge.net/gitroot/pogl/pogl version: '0.6704' libopengl-perl-0.6704+dfsg.orig/vertex.cg0000644000175000017500000000133012334200655017522 0ustar gregoagregoa// input vertex struct VertIn { float4 pos : POSITION; uniform float4x4 modelViewProj : state.matrix.mvp; }; // output vertex struct VertOut { float4 pos : POSITION; float2 texcoord : TEXCOORD0; }; uniform float4 center; uniform float4x4 xform; // vertex shader main entry VertOut main(VertIn IN) { VertOut OUT; OUT.pos = mul(IN.modelViewProj, IN.pos); OUT.pos = mul(xform, OUT.pos); // Calc texcoord values float d = sqrt(IN.pos.x * IN.pos.x + IN.pos.y * IN.pos.y); float a = atan2(IN.pos.x,IN.pos.y) / 3.1415; if (a < 0) a += 1; a *= 2; a -= int(a); IN.pos -= center; float h = IN.pos.z; h = abs(2 * atan2(h,d) / 3.1415); OUT.texcoord.x = a; OUT.texcoord.y = h; return OUT; } libopengl-perl-0.6704+dfsg.orig/test.jpg0000644000175000017500000002446212334200655017366 0ustar gregoagregoaÿØÿàJFIFHHÿí Photoshop 3.08BIMíHH8BIM x8BIMó8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIM ÿppP“ãÿØÿàJFIFHHÿþ&File written by Adobe Photoshop¨ 5.0ÿîAdobed€ÿÛ„            ÿÀpp"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT’I%)$’IJI$’R’I$”¤’I%)$’IJI$’SÿÐõT’I%)$’IJI$’R’I$”¤’I%)$’IJI$’SÿÑõUGªõ|n”ÊŸ’ÛÛßé·Ònøtû¿ÍW–GÖFbc¼‰äVOÀî¯þþ’’Wõ‹¥>7Zê§ý+ÏúNnÕ¡Uµ\ÁeOmŒ<9¤÷…Z¼<{inæƒ!ef`]ÒìûoN>›†¶UùºößÒHš]¬ÌÜLgåfZÚ(¬Kìy€?ó'~kW#•þ31E»z~ ¹U­Ö8Rl-¶Ç×=%Î}lê¹]g©[º¼J cãÁ}Ö~õ®ÿ Å›X ¦^d‰TzuzCàqž!“˜¿P±éáþóé]ë§KêÖŒW5ØyŽúÛÿø›[ì³úŸÎ-¼Œš1iuùTÁ.{´y¨¸‚%®¸hAEÍ?É]Cz†gT£¼Ã?fÞæÜïì#÷±fRù†Ã÷œ¿r‘ä=P;ÒOMWÖ^›kÃ@´4ñc«!¿ù/ú)cuú-»Ó¹‡§JÜ÷qŸ£íY51¢ *½wÙÓ.5im@]Tsº³êßTX¹ÙN`%Âåùéd˜öåcÔCl°5Îä…*íe‚Xdx¬ sÙ‘‹Ó³_Qדù…]£7c³žÅj DÀHuu;ˆ#vû²©e›cþƒIÕßÕF\7WÈ}ÿ^º+ŽÁkÈñ—´ßWr£",£OÿÒõU›õ…³Ò/tI¯eƒû/k–’©Õªõº^]q%Ô¾žÓµ%0Ã˯ÐdžÜ¥Ôœ×b¸æù]/©eý`ÃÉ£.ì6ý˜<=¤ú{«?BÆýÒ7óWUÕþ°ctþ’ûòžÖ7_7GÐgòœä%±_ˆ8“Ýã:¼ §@îª5Þh'©Ž [éºÁ¸°ö•W¨ß‘^?êâmy aæ7~rÍà''Riî3Ž˜ÏóB0ãÓµ;49¥Ã_¹t}8‚(Þ‘Ô:+1¿hdz·e·Õ¦Æ7;þ3óÏDêÔd¾úX}ØÏ¿Ì‘2?ê|Ö)D¿ôò_ñ“˜Ï# Ñ “é–þ“ÂôÌ-J“œ×3Äp~ ‘úÇ׺®6N7NéU 32Ás^á¸5 íö3ó¬ZýΪ1}.®k9Œq5p[ù»Ã}­³÷ö 1J8ã—Aļ¦<3†(ç4"NØàdºWØœ}Ý?*ÊAÿƒpß_ýq™…µ˜10>å—w£Õo¯‘K.åVçSÿRX›íF"WWðØû¼½ø»Øs\"{‹MiÈúûÓäϧˆïÆÂW¤//ú¸ï[ëÕn:ìÅoâç/PTsŠË1تFÉ/ÿÓõU[˜xp üÂ’I)ó±õ”àôv· õ}´81•[®èw§fÆË}íU°>¡uï¬5fõÛÿ@!̨hÐî±uÝKêJê]Xu,¤ÞÑBéh¥”TÊ™ôX |Hž'ëoÔŠ¿gÕ“ÒkÛ‘†Ý®hÿÏÝwò›ù‹ÏNemq®ÿÑXÞZý!{Ùˆ<,>­õ/ uWäã·yåÀAQdÛØ÷‡)ñ<ü´1SÆB}?ºøÎGV}Öñ\윻}¡Ò\gèËžgè®óê÷ÔKñ>¯ÄޤÿÒ6{÷Øÿë.›¤ýFú¿Ò­õ¨ ÚÂ×ê4ä[}8—[ÜÂ*¸vžÞ×JpÇâ{ý&·7ÌO™$䆸F8ü¼=Ÿ*Íë–ânnFPº’è`†¸þ훕΅Ô:–KŸ~F)Åà 6ßIÏåÓý”ÔÜÒçÓ’ãöºÜE¡Çs·~÷»énSêÿY*¢–;;!»iiTÐ×÷kgÒ{¿ygqc1ž1ŠC!5õS…ÅŒÆxc†C!5}\->©{¬úÁ]u‚÷³îsZ$êÿoýJ¡oYÁ¥Å–ä1“¨>`-ŸñuÓrú·VÉëÙŒ,eƒmMð`XÆÿeu‡ü]ýZuï½ôn{ÎçO‰[|—5“–Ä1ÄÞûºx±ðcŒNñ^?ü_äÕõ¶ÌŠ]êVÚZÀà H™åzºÌéŸWzOJy~ ©ÇBBÓQNfr2;ÈÛ#ÿÔõT’I%)$’IJI$’R’I$”óŸX¾£ôž¸ïYàÓ?³Úè¬>Ÿþ(úEì›|‡k?zïÒIH0ðñð¨mÌÖÑt’IJI$’SÿÕõT’I%)$’IJI$’R’I$”¤’I%)$’IJI$’SÿÙ8BIMÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿþ&File written by Adobe Photoshop¨ 5.0ÿîAdobed@ÿÛ„      ÿÀ€€ÿÝÿÄ¢  s!1AQa"q2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ „”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“ &6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ ?ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÔûùм÷ócZ×¼¹ùoç-{ÊòÅ¿¤i’ÝirÏ­’:7ÇG!Jâ¯|™ù±ùé©é6úî• j¢UʰO P ÈÃðÅ^eùúÚt©ž¼{åøÎϪٷ×-”ø²…Y}{Ö“¬izí…¾§£_éi÷HÞÀŒUùÏÿ9ÿ9ñeä½cQòäÍ•§š<ͧ»[ë>mº¬še”˳G!X‘ÄÔ ;|Y¤íÙ†ŸÓËêžÇÀÏQÚàfÔ\1žCø¤?@û_\ÎAÎDëZ©×o7üÅ ëK•Àµ´JšÑmaUˆö9ΞÜÍ)_í8¿àSÙ¸ððø1>ýÏÏ›ì?ÈùÎ6麭•ÿ9ä‹[Ñï]`µó”q,76ÎÆ‹õ¤Œ‘ êÀ;×7½ŸÛ)ŸÍòolÿàiùÚ@hncÏoèþ§éœ¿3üµäß(7ÜOúBÚ~1éVì —“È*‘Fw7-Ð ók­ÖcÒb9'Ëï|?]­Ç£Ärdä>ÓÜùvÏŸÍ^çëvöÚF“díX´õæ!{•Ü|HåœF_lgÅéËíĸý Öÿ1?15K˜5Ö$Ò¡„DÍ¥ÙÑ!gŽœi̇#pIËqûM“<Ål;žÚs©È:çµ~T~rØþey{ZÕ`¶1^èq ý‰4a5· éíR¹Þb<`Öžâ:óM´oÌ›½kÒ’=&;H%U`òJO_  ÚK³ŒE’í²vlaüVôÈîã’ÐLÓ*’µ,;jæ¾XÈ•:ÓŒ‰U<7Ëžº¹ù£æ_ʘ\Í­y]£ïàfeQô&(®h* r-OÿÕûùб;Y GÉÞj°&Ÿ[Òo"•Ý¡p6Å^;ùð^ùGM.ŠÇÐ@G]銽__ò–—ªÚMÖÈÜ”ƒP1)ˆ²üñüß¿óŸå.•æí#Éz¤šv™æ‹Ym®Xƒleymÿ‘™j >¹¦í qà ̾—ìo²øûOSŠSåd;¸|ß•6ÚdV34j»†;÷'ß<ï>c9?föWfÃO„:2Ë4m¨¤·ëÈÅËËLŽÚÂ;¢¨å~.£¯ê̼yL7xïhðFx%·GÖþE»×5}BÑu«ù/´ß.4Ÿ¡¢rO”/Ú¯pí˜]½Û’Ôc†3ü#æ±üãÿ‚Éló„vM{ßDi‘$Q …uläá2M¾ !&ÙAöì½vý‘OÇ6ú<¼2SÙZŽÞmù©)~yþ`ùA‰ƒOóšë:j·©*§¥ËZý9ì]‹¨ñtÑ=Û>ÛÙ™Æ\—s?ò·˜¾®ì—SR !g5åň øsÖa¤ñ1ƒÌ=͉ƞ¶|àéo³’²Í¡ÚµÍ^^ÏËHÓY&Ÿ ÿÎ5Ìú¯üæçþ£#úŒº¤Pò£÷VÑ-+íLåµ"²é5¢²È?\óÅÿÖûùЍÜD'·žFÈAèy7Å_!~Hù’×DÓnôë©7Óîç¶d¯C¬”ü1WÓ¶>b±Õ"oBU}»”9¾ÿœ¦)õ+ƒ@v=s•í£³ïÿð0äÉkéX^ÍFâ9›wöÎGwêìW‚áVŒÎÚc–ã‰.§—‡?¤&¾haÆ1-BF«×½37>† M9Ìuÿ879Õÿç!ÿ=5ryzÚì ·úˆ‰ü3Ç;DV¢c̺]Q¼’>oØÜÂqßÿ×ûùŠ»~Î]y{̲ygócGÐ5;ýM'Íbí.ìf’ »üqx•–§|P%½>ÿœS‡Ï?—>O¶Ò|÷æé¼Ô†(îô­NîS-ÂA*WÑ•ÎíÄô®ô8–BT^ÿ9iÿ9å[/3èÞIKs«k¾«£`~¯)+$ƒ°v í]$²BR\öÚ :MV,S;Ì×»û_ A.æyQª“žy’2~ËÑj\ Žç“þ`k>lšûCòǓ՗Xóæ$¹QÉ£U§Ù$ž¹Õû? Çœ™Op:>ÿkµ•xtdžY õwÝæ^ù§yóò…t=;óQš¦·j5+Ej £›ˆõ§R +–vö‹28XäóŸð?öƒ]ÚZÃU#>BG™±dyÓé¿Ê_̽YÔõÒð=ÿ—šÔcÛf9­7ÞƒcïžuÛ=—“#’Ci]|“ÿàÑ€DˆïdŸŸŸž£ò{ÈòùŽ==µ{éçŽÇEÒÑŠ‰®¦¯î+E{øfO³ ë³ W@ 'Éñßd»ùOSáÝ,Ÿ'™ÿÎ9~jÿÎCyÃZæG–4ý;Éz´2>›}kI ËBˆ9»zŠÂ ×qo´¦ÑéüHÅ`oÕïý£ökI ÒŒ˜Éâ°7ëý¤?;!7ÿ—úü‰þôYZûFVkB&B>”Íw²ÚŽ@£Ù]w‡©ˆéuóy>ný%ž®²:¥¼WŒÀ÷tR?ûبxº8{©öHf¢B¼þdwÚJ±ês«×èÄqšD3³ù÷ú_Ÿÿ6µñ4Úåß6÷V|ãÚ_ã9?¬~öœ†äKö[0˜?ÿÐûùŠ»|ù‹.‡¥~gùþËUX¤ŠõàºxgUea4MU¶"£)T‹ò÷Ïó•?˜þkÔõÿ$þQ~_ÞXêºuäúkÞÜÒU…âc4HÇ6ªÔÒ˜i²0ëoHÿœ]ÿŸy³ÍºÕçæ'ç\÷–©ª†’f¼bÒ38÷èh鉊o„å DÑÁ|ÿùçùMæùÇÿ>j:£ÓùbâvmW`x˜˜Õcöeé^ùÃö·bÊ3€¸ýÏÔßð;ÿ‚n-V(éõ2Ê6ßø¼Çé8Óµ¸¬u]7Ì:tÑŪiR ì.YUø8ïF§5Ú<ùô§Ðií}¤ìÎËíÜ@jb&ã¡âŸÌŸÎ=Röú÷Ìþ³7˜¼×¨fç+°cUQ²¢öPfóI¥Ë¬ŸN]Kå¾Ñö×gû;£ü¾”†#ï?¤žoªç¿çü÷sä2~kÊf‹Ì:•o=¥Ê×™V¯áá›~ÕìœzÝ?…ȧÉù‹·ôÊØgŸY7~iïš<õùw¬iÏ¢ùþëM‚M:`óéš«¬rC<f äTô#<ãOÙ:þÏÔ^(Èð/ö>E¥ì^Òì½Mâ„„»À°A M·üä×”ÛQÑ´}þ_4Ü,ÐYXÛÙ©6öð– JР|é2v.¯[ŽY5R ˆšn¾Àõ¹;Y¯Ç,š¹DM·]Ü€}#ù“®Åþó’¸4›²äšmè6rÝqÕÄy¼/aÄ\#ý!÷¾1òf¾G’¼¦Ò9&›SØ û7þº¸GL"~÷ܦ™Oçó*TÊñ&ƒ;¾Ô×âðÎì¡vúÏþ}~¢êçóR¥~µ¬]¸oÊÙó&º\ZŒ‡¾Gïr ö?1ÿÿÑûùŠ»~rÎmþGy×ÎÑËæ/Ë;»Ë/5ê–ðØÜÜBÿ E @(´Ù·ÜãL0M”§þp‡þqgÌ•7Ú‡æi«jú›úóÝÜRfsÕ™š¤œYò~–Å P ŽÖ$]‚¨ Å^1ùËùäïÎmãGó„r»¡Ü”žàâH69¿¿1ç×Þzµ¿ºo#ù¢hôéXúp¯ì†Pt¸I³î1ûCÚ8ãÁóÞË?!¿ç×èþb´óæF Ú£[H²¤%ªA¯|¸AÕåÍ<²2™2'©Ýû%g éÞFòu͆¡›èt›×F·àrÑFJÄ…¨ ½(+Œy´H ߉~sO-þpù§Xó©ä]/@¹‘å¶:CD$šR޳;€Kö; g—vç´Ú‘—„z#Èyw¾=íµú¸æáÄò]ìòÓÉŸ“¿–Ú&£%·‘Lþn‘-6õŠ}Zà)'âªÖ S¯|ÚmñdÓ |B+ú>ÿØîü°åÒ |R+ú7ßßð|åÿ95ù¡‘äÏðF•qëùÎ…tË+d5u‚BÄÄ€%T{œÂöS³ç—?!éŽÿޱ½—<úCÓþ=Oé?ó‡aóïüãדíô&:?™>«¶¤•I„t¨^^¹ê¸µ¹ðŠ„ÌG‘§Ö6·˜iŸóê¯Ì @ò×|ñ/¨k(k‰ k¹¨å‘ɫ͓Ꜽ”Ûõþq;þqŠùÇMçJKÃy%Éå$‡rNc¡ö&*ÿÿÒûùŠ»ZÈö”5:TWl6ƒÃov*ìUتÖPÊÊz0#ïÅ_“ÿó•ó˜º>¿©~b~Väuiõ]@BÈýÜÜ1ïãš.Ôö{MÚŠC†]ãô¼çl{/¤í3Å1Ã>ñ×ÞšbóŸüäÕÝÃhzGå{i·¬Lfös%ÇZUT*¿5z_bôØ¥r‘—•Wëtú?`4˜es™—•Wë}ÿ8³ÿ8ùç:Z~eþsK5Ìé"̱\öÔ*©Ù@ðÖáà 0€ Û zxc1¾º6“i¡é–z]”Kµœkh¢‚Š)–6¦˜«±Wb¯ÿÓûùŠ»v*ìUØ«±Wb®Å]Ь’(æB’¢ÈÕXTb©ò—–ÌÿX:5¡šµõ=5­~ìU=†`A1¬H:*€ኪâ®Å]Š»ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÙlibopengl-perl-0.6704+dfsg.orig/os2pm_X.h0000644000175000017500000005011512334200655017377 0ustar gregoagregoa# define INCL_DOSERRORS # define INCL_BASE # define INCL_PM # include "os2.h" # include # define glXSwapBuffers(d,w) (Perl_Serve_Messages(0),pglSwapBuffers(*(Display*)d,w)) # define XOpenDisplay(dummy0) (perl_hab_GET(),(hmq = Perl_Register_MQ(1)),myDisplay=Perl_hab,&myDisplay) # define glutCreateWindow(name) my_glutCreateWindow(name) # define XMapWindow(d, w) 0 # define glXChooseVisual(d, scr, att) pglChooseConfig(*d,att) /* XXXX isDirect: correct interpr? */ # define glXCreateContext(d, vis, sharel, isDirect) \ pglCreateContext(*d, vis, sharel, isDirect) # define XCreateColormap(d, win, vis, alloc) 0 # define RootWindow(d, screen) HWND_DESKTOP # define XCreateWindow(d, par, x, y, w, h, qqq0, de, io, vis, msk, attr) \ MyCreateWindow(d, par, x, y, w, h) # define XIfEvent(a,b,c,d) # define glXMakeCurrent(dpy, win, cx) pglMakeCurrent(*dpy, cx, win) # define None PGL_None # define XPending(d) (av_len(EventAv)+1) #define GLX_USE_GL PGL_USE_GL #define GLX_BUFFER_SIZE PGL_BUFFER_SIZE #define GLX_LEVEL PGL_LEVEL #define GLX_RGBA PGL_RGBA #define GLX_DOUBLEBUFFER PGL_DOUBLEBUFFER #define GLX_STEREO PGL_STEREO #define GLX_AUX_BUFFERS PGL_AUX_BUFFERS #define GLX_RED_SIZE PGL_RED_SIZE #define GLX_GREEN_SIZE PGL_GREEN_SIZE #define GLX_BLUE_SIZE PGL_BLUE_SIZE #define GLX_ALPHA_SIZE PGL_ALPHA_SIZE #define GLX_DEPTH_SIZE PGL_DEPTH_SIZE #define GLX_STENCIL_SIZE PGL_STENCIL_SIZE #define GLX_ACCUM_RED_SIZE PGL_ACCUM_RED_SIZE #define GLX_ACCUM_GREEN_SIZE PGL_ACCUM_GREEN_SIZE #define GLX_ACCUM_BLUE_SIZE PGL_ACCUM_BLUE_SIZE #define GLX_ACCUM_ALPHA_SIZE PGL_ACCUM_ALPHA_SIZE #define GLX_X_VISUAL_TYPE_EXT PGL_X_VISUAL_TYPE_EXT #define GLX_TRANSPARENT_TYPE_EXT PGL_TRANSPARENT_TYPE_EXT #define GLX_TRANSPARENT_INDEX_VALUE_EXT PGL_TRANSPARENT_INDEX_VALUE_EXT #define GLX_TRANSPARENT_RED_VALUE_EXT PGL_TRANSPARENT_RED_VALUE_EXT #define GLX_TRANSPARENT_GREEN_VALUE_EXT PGL_TRANSPARENT_GREEN_VALUE_EXT #define GLX_TRANSPARENT_BLUE_VALUE_EXT PGL_TRANSPARENT_BLUE_VALUE_EXT #define GLX_TRANSPARENT_ALPHA_VALUE_EXT PGL_TRANSPARENT_ALPHA_VALUE_EXT typedef HWND Window; typedef HAB Display; typedef VISUALCONFIG XVisualInfo; /* Exchange this with config */ typedef HGC GLXContext; /* Exchange this with config */ typedef struct XSetWindowAttributes { int colormap; int border_pixel; long event_mask; } XSetWindowAttributes; /* Not used! */ typedef long Colormap; /* Not used! */ typedef HWND Drawable; /* Not used! */ typedef HWND GLXDrawable; typedef int KeySym; typedef bool Bool; typedef long Time; /* Not used! */ typedef long Atom; /* Not used! */ typedef long XID; /* Not used! */ /* Input Event Masks. Used as event-mask window attribute and as arguments to Grab requests. Not to be confused with event names. */ #define NoEventMask 0L #define KeyPressMask (1L<<0) #define KeyReleaseMask (1L<<1) #define ButtonPressMask (1L<<2) #define ButtonReleaseMask (1L<<3) #define EnterWindowMask (1L<<4) #define LeaveWindowMask (1L<<5) #define PointerMotionMask (1L<<6) #define PointerMotionHintMask (1L<<7) #define Button1MotionMask (1L<<8) #define Button2MotionMask (1L<<9) #define Button3MotionMask (1L<<10) #define Button4MotionMask (1L<<11) #define Button5MotionMask (1L<<12) #define ButtonMotionMask (1L<<13) #define KeymapStateMask (1L<<14) #define ExposureMask (1L<<15) #define VisibilityChangeMask (1L<<16) #define StructureNotifyMask (1L<<17) #define ResizeRedirectMask (1L<<18) #define SubstructureNotifyMask (1L<<19) #define SubstructureRedirectMask (1L<<20) #define FocusChangeMask (1L<<21) #define PropertyChangeMask (1L<<22) #define ColormapChangeMask (1L<<23) #define OwnerGrabButtonMask (1L<<24) /* Event names. Used in "type" field in XEvent structures. Not to be confused with event masks above. They start from 2 because 0 and 1 are reserved in the protocol for errors and replies. */ #define KeyPress 2 #define KeyRelease 3 #define ButtonPress 4 #define ButtonRelease 5 #define MotionNotify 6 #define EnterNotify 7 #define LeaveNotify 8 #define FocusIn 9 #define FocusOut 10 #define KeymapNotify 11 #define Expose 12 #define GraphicsExpose 13 #define NoExpose 14 #define VisibilityNotify 15 #define CreateNotify 16 #define DestroyNotify 17 #define UnmapNotify 18 #define MapNotify 19 #define MapRequest 20 #define ReparentNotify 21 #define ConfigureNotify 22 #define ConfigureRequest 23 #define GravityNotify 24 #define ResizeRequest 25 #define CirculateNotify 26 #define CirculateRequest 27 #define PropertyNotify 28 #define SelectionClear 29 #define SelectionRequest 30 #define SelectionNotify 31 #define ColormapNotify 32 #define ClientMessage 33 #define MappingNotify 34 #define LASTEvent 35 /* must be bigger than any event # */ /* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer, state in various key-, mouse-, and button-related events. */ #define ShiftMask (1<<0) #define LockMask (1<<1) #define ControlMask (1<<2) #define Mod1Mask (1<<3) #define Mod2Mask (1<<4) #define Mod3Mask (1<<5) #define Mod4Mask (1<<6) #define Mod5Mask (1<<7) /* button masks. Used in same manner as Key masks above. Not to be confused with button names below. */ #define Button1MaskOS2 (1<<8) #define Button2MaskOS2 (1<<9) #define Button3MaskOS2 (1<<10) #define Button4Mask (1<<11) #define Button5Mask (1<<12) #define AnyModifier (1<<15) /* used in GrabButton, GrabKey */ #define True 1 #define XMaxTransChars 4 /* * Definitions of specific events. */ typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ char trans_chars[XMaxTransChars]; /* translated characters */ int nchars; } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occured on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /* same screen flag */ Bool focus; /* boolean focus */ unsigned int state; /* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; typedef struct { int type; /* FocusIn or FocusOut */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* window of event */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent; /* generated on EnterWindow and FocusIn when KeyMapState selected */ typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if non-zero, at least this many more */ } XExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /* if non-zero, at least this many more */ int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XGraphicsExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XNoExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int state; /* Visibility state */ } XVisibilityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; /* parent of the window */ Window window; /* window id of window created */ int x, y; /* window location */ int width, height; /* size of window */ int border_width; /* border width */ Bool override_redirect; /* creation should be overridden */ } XCreateWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool override_redirect; /* boolean, is override set... */ } XMapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom atom; Time time; int state; /* NewValue, Deleted */ } XPropertyEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /* ATOM or None */ Time time; } XSelectionEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Colormap colormap; /* COLORMAP or None */ #if defined(__cplusplus) || defined(c_plusplus) Bool c_new; /* C++ */ #else Bool new; #endif int state; /* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* unused */ int request; /* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /* first keycode */ int count; /* defines range of change w. first_keycode*/ } XMappingEvent; typedef struct { int type; Display *display; /* Display the event was read from */ XID resourceid; /* resource id */ unsigned long serial; /* serial number of failed request */ unsigned char error_code; /* error code of failed request */ unsigned char request_code; /* Major op-code of failed request */ unsigned char minor_code; /* Minor op-code of failed request */ } XErrorEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display;/* Display the event was read from */ Window window; /* window on which event was requested in event mask */ } XAnyEvent; /* * this union is defined so Xlib can always use the same sized * event structure internally, to avoid memory fragmentation. */ typedef union _XEvent { int type; /* must not be changed; first element */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; void InitSys(void); Bool XQueryPointer( Display* display, Window w, Window* root_return, Window* child_return, int* root_x_return, int* root_y_return, int* win_x_return, int* win_y_return, unsigned int* mask_return); void XNextEvent(Display *d, XEvent *event); void XLookupString(XKeyEvent *xkey, char *buf, int sizeof_buf, KeySym *ks, int f); Window MyCreateWindow(Display *d, Window par, int x, int y, int w, int h); void morphPM(); Window nativeWindowId(Display *, Window); void glpMoveResizeWindow(int x, int y, unsigned int width, unsigned int height, Window w, Display* display); void glpMoveWindow(int x, int y, Window w, Display* display); void glpResizeWindow(unsigned int width, unsigned int height, Window w, Display* display); extern AV *EventAv; extern unsigned long LastEventMask; /* XXXX Common for all the windows */ libopengl-perl-0.6704+dfsg.orig/glu_const.h0000644000175000017500000000472512334200655020053 0ustar gregoagregoa#ifndef GLU_INCOMPATIBLE_GL_VERSION #define GLU_INCOMPATIBLE_GL_VERSION 100903 #endif #ifdef GLU_VERSION_1_0 if (!strncmp(name, "GLU_", 4)) { i(GLU_SMOOTH) i(GLU_FLAT) i(GLU_NONE) i(GLU_POINT) i(GLU_LINE) i(GLU_FILL) i(GLU_SILHOUETTE) i(GLU_OUTSIDE) i(GLU_INSIDE) i(GLU_BEGIN) i(GLU_VERTEX) i(GLU_END) i(GLU_ERROR) i(GLU_EDGE_FLAG) i(GLU_CW) i(GLU_CCW) i(GLU_INTERIOR) i(GLU_EXTERIOR) i(GLU_UNKNOWN) i(GLU_TESS_ERROR1) i(GLU_TESS_ERROR2) i(GLU_TESS_ERROR3) i(GLU_TESS_ERROR4) i(GLU_TESS_ERROR5) i(GLU_TESS_ERROR6) i(GLU_TESS_ERROR7) i(GLU_TESS_ERROR8) i(GLU_AUTO_LOAD_MATRIX) i(GLU_CULLING) i(GLU_SAMPLING_TOLERANCE) i(GLU_DISPLAY_MODE) i(GLU_PATH_LENGTH) i(GLU_PARAMETRIC_ERROR) i(GLU_DOMAIN_DISTANCE) i(GLU_MAP1_TRIM_2) i(GLU_MAP1_TRIM_3) i(GLU_OUTLINE_POLYGON) i(GLU_OUTLINE_PATCH) i(GLU_NURBS_ERROR1) i(GLU_NURBS_ERROR2) i(GLU_NURBS_ERROR3) i(GLU_NURBS_ERROR4) i(GLU_NURBS_ERROR5) i(GLU_NURBS_ERROR6) i(GLU_NURBS_ERROR7) i(GLU_NURBS_ERROR8) i(GLU_NURBS_ERROR9) i(GLU_NURBS_ERROR10) i(GLU_NURBS_ERROR11) i(GLU_NURBS_ERROR12) i(GLU_NURBS_ERROR13) i(GLU_NURBS_ERROR14) i(GLU_NURBS_ERROR15) i(GLU_NURBS_ERROR16) i(GLU_NURBS_ERROR17) i(GLU_NURBS_ERROR18) i(GLU_NURBS_ERROR19) i(GLU_NURBS_ERROR20) i(GLU_NURBS_ERROR21) i(GLU_NURBS_ERROR22) i(GLU_NURBS_ERROR23) i(GLU_NURBS_ERROR24) i(GLU_NURBS_ERROR25) i(GLU_NURBS_ERROR26) i(GLU_NURBS_ERROR27) i(GLU_NURBS_ERROR28) i(GLU_NURBS_ERROR29) i(GLU_NURBS_ERROR30) i(GLU_NURBS_ERROR31) i(GLU_NURBS_ERROR32) i(GLU_NURBS_ERROR33) i(GLU_NURBS_ERROR34) i(GLU_NURBS_ERROR35) i(GLU_NURBS_ERROR36) i(GLU_NURBS_ERROR37) i(GLU_INVALID_ENUM) i(GLU_INVALID_VALUE) i(GLU_OUT_OF_MEMORY) i(GLU_INCOMPATIBLE_GL_VERSION) #ifdef GLU_VESION_1_1 i(GLU_VERSION) i(GLU_EXTENSIONS) #endif #ifdef GLU_VERSION_1_1 i(GLU_SAMPLING_METHOD) i(GLU_PARAMETRIC_TOLERANCE) i(GLU_U_STEP) i(GLU_V_STEP) #endif #ifdef GLU_VERSION_1_2 i(GLU_TESS_ERROR) i(GLU_TESS_BEGIN) i(GLU_TESS_EDGE_FLAG) i(GLU_TESS_VERTEX) i(GLU_TESS_COMBINE) i(GLU_TESS_END) i(GLU_TESS_ERROR_DATA) i(GLU_TESS_BEGIN_DATA) i(GLU_TESS_EDGE_FLAG_DATA) i(GLU_TESS_VERTEX_DATA) i(GLU_TESS_COMBINE_DATA) i(GLU_TESS_END_DATA) i(GLU_TESS_WINDING_RULE) i(GLU_TESS_WINDING_ODD) i(GLU_TESS_WINDING_NONZERO) i(GLU_TESS_WINDING_POSITIVE) i(GLU_TESS_WINDING_NEGATIVE) i(GLU_TESS_WINDING_ABS_GEQ_TWO) # endif /* 75 */ #ifdef GLU_EXT_object_space_tess i(GLU_OBJECT_PARAMETRIC_ERROR_EXT) i(GLU_OBJECT_PATH_LENGTH_EXT) #endif } else #endif libopengl-perl-0.6704+dfsg.orig/test.pl0000644000175000017500000011435312334200655017220 0ustar gregoagregoa#!/usr/bin/perl -w use strict; my $stat = `perl -v`; our $IS_ACTIVEPERL = ($stat =~ m|ActiveState|s); our $PERL_VERSION = $^V; $PERL_VERSION =~ s|^v||; use OpenGL qw/ :all /; use OpenGL::Config; # for build information eval 'use OpenGL::Image 1.03'; # Need to use OpenGL::Image 1.03 or higher! my $hasImage = !$@; my $hasIM_635 = $hasImage && OpenGL::Image::HasEngine('Magick','6.3.5'); eval 'use OpenGL::Shader'; my $hasShader = !$@; eval 'use Image::Magick'; my $hasIM = !$@; # This does not seem to be needed and it adds an extra, unneeded # dependency to the build process. Leaving this in as a comment # just in case it is being used somewhere here # # use Math::Trig; eval 'use Time::HiRes qw( gettimeofday )'; my $hasHires = !$@; $|++; # ---------------------- # Based on a cube demo by # Chris Halsall (chalsall@chalsall.com) for the # O'Reilly Network on Linux.com (oreilly.linux.com). # May 2000. # # Translated from C to Perl by J-L Morel # ( http://www.bribes.org/perl/wopengl.html ) # # Updated for FBO, VBO, Vertex/Fragment Program extensions # and ImageMagick support # by Bob "grafman" Free # ( http://graphcomp.com/opengl ) # # Requires GLUT/FreeGLUT if (!glpHasGLUT()) { print qq { This test requires GLUT: If you have X installed, you can try the scripts in ./examples/ Most of them do not use GLUT. It is recommended that you install FreeGLUT for improved Makefile.PL configuration, installation and debugging. }; print "Attempting to run examples/texhack instead...\n"; `perl examples/texhack`; exit 0; } use constant PROGRAM_TITLE => "OpenGL Test App"; use constant DO_TESTS => 0; # Run in Game Mode my $gameMode; if (scalar(@ARGV) and lc($ARGV[0]) eq 'gamemode') { $gameMode = $ARGV[1] || ''; } # Keyboard modifiers my $key_mods = { eval(GLUT_ACTIVE_SHIFT) => "SHIFT", eval(GLUT_ACTIVE_CTRL) => "CTRL", eval(GLUT_ACTIVE_ALT) => "ALT" }; # Some global variables. my $useMipMap = 1; my $hasFBO = 0; my $hasVBO = 0; my $hasFragProg = 0; my $hasImagePointer = 0; my $idleTime = time(); my $idleSecsMax = 5; my $er; # Window and texture IDs, window width and height. my $Window_ID; my $Window_Width = 300; my $Window_Height = 300; my $Inset_Width = 90; my $Inset_Height = 90; my $Window_State; # Texture dimanesions #my $Tex_File = 'test.jpg'; my $Tex_File = 'test.tga'; my $Tex_Width = 128; my $Tex_Height = 128; my $Tex_Format; my $Tex_Type; my $Tex_Size; my $Tex_Image; my $Tex_Pixels; # Our display mode settings. my $Light_On = 0; my $Blend_On = 0; my $Texture_On = 1; my $Alpha_Add = 1; my $FBO_On = 0; my $Inset_On = 1; my $Fullscreen_On = 0; my $Curr_TexMode = 0; my @TexModesStr = qw/ GL_DECAL GL_MODULATE GL_BLEND GL_REPLACE /; my @TexModes = ( GL_DECAL, GL_MODULATE, GL_BLEND, GL_REPLACE ); my($TextureID_image,$TextureID_FBO); my $FrameBufferID; my $RenderBufferID; my $VertexProgID; my $FragProgID; my $FBO_rendered = 0; my $Shader; # Object and scene global variables. my $Teapot_Rot = 0.0; # Cube position and rotation speed variables. my $X_Rot = 0.9; my $Y_Rot = 0.0; my $X_Speed = 0.0; my $Y_Speed = 0.5; my $Z_Off =-5.0; # Settings for our light. Try playing with these (or add more lights). my @Light_Ambient = ( 0.1, 0.1, 0.1, 1.0 ); my @Light_Diffuse = ( 1.2, 1.2, 1.2, 1.0 ); my @Light_Position = ( 2.0, 2.0, 0.0, 1.0 ); # Model/Projection/Viewport Matrices my $mm = OpenGL::Array->new(16,GL_DOUBLE); my $pm = OpenGL::Array->new(16,GL_DOUBLE); my $vp = OpenGL::Array->new(4,GL_INT); # Vertex Buffer Object data my($VertexObjID,$NormalObjID,$ColorObjID,$TexCoordObjID,$IndexObjID); my @verts = ( -1.0, -1.3, -1.0, 1.0, -1.3, -1.0, 1.0, -1.3, 1.0, -1.0, -1.3, 1.0, -1.0, 1.3, -1.0, -1.0, 1.3, 1.0, 1.0, 1.3, 1.0, 1.0, 1.3, -1.0, -1.0, -1.0, -1.3, -1.0, 1.0, -1.3, 1.0, 1.0, -1.3, 1.0, -1.0, -1.3, 1.3, -1.0, -1.0, 1.3, 1.0, -1.0, 1.3, 1.0, 1.0, 1.3, -1.0, 1.0, -1.0, -1.0, 1.3, 1.0, -1.0, 1.3, 1.0, 1.0, 1.3, -1.0, 1.0, 1.3, -1.3, -1.0, -1.0, -1.3, -1.0, 1.0, -1.3, 1.0, 1.0, -1.3, 1.0, -1.0 ); my $verts = OpenGL::Array->new_list(GL_FLOAT,@verts); # Could calc norms on the fly my @norms = ( 0.0, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,-1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, -1.0, 0.0, 0.0 ); my $norms = OpenGL::Array->new_list(GL_FLOAT,@norms); my @colors = ( 0.9,0.2,0.2,.75, 0.9,0.2,0.2,.75, 0.9,0.2,0.2,.75, 0.9,0.2,0.2,.75, 0.5,0.5,0.5,.5, 0.5,0.5,0.5,.5, 0.5,0.5,0.5,.5, 0.5,0.5,0.5,.5, 0.2,0.9,0.2,.5, 0.2,0.9,0.2,.5, 0.2,0.9,0.2,.5, 0.2,0.9,0.2,.5, 0.2,0.2,0.9,.25, 0.2,0.2,0.9,.25, 0.2,0.2,0.9,.25, 0.2,0.2,0.9,.25, 0.9, 0.2, 0.2, 0.5, 0.2, 0.9, 0.2, 0.5, 0.2, 0.2, 0.9, 0.5, 0.1, 0.1, 0.1, 0.5, 0.9,0.9,0.2,0.0, 0.9,0.9,0.2,0.66, 0.9,0.9,0.2,1.0, 0.9,0.9,0.2,0.33 ); my $colors = OpenGL::Array->new_list(GL_FLOAT,@colors); my @rainbow = ( 0.9, 0.2, 0.2, 0.5, 0.2, 0.9, 0.2, 0.5, 0.2, 0.2, 0.9, 0.5, 0.1, 0.1, 0.1, 0.5 ); my $rainbow = OpenGL::Array->new_list(GL_FLOAT,@rainbow); my $rainbow_offset = 64; my @rainbow_inc; my @texcoords = ( 0.800, 0.800, 0.200, 0.800, 0.200, 0.200, 0.800, 0.200, 0.005, 1.995, 0.005, 0.005, 1.995, 0.005, 1.995, 1.995, 0.995, 0.005, 2.995, 2.995, 0.005, 0.995, -1.995, -1.995, 0.995, 0.005, 0.995, 0.995, 0.005, 0.995, 0.005, 0.005, -0.5, -0.5, 1.5, -0.5, 1.5, 1.5, -0.5, 1.5, 0.005, 0.005, 0.995, 0.005, 0.995, 0.995, 0.005, 0.995 ); my $texcoords = OpenGL::Array->new_list(GL_FLOAT,@texcoords); my @indices = (0..23); my $indices = OpenGL::Array->new_list(GL_UNSIGNED_INT,@indices); my @xform = ( 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ); my $xform = OpenGL::Array->new_list(GL_FLOAT,@xform); # ------ # Frames per second (FPS) statistic variables and routine. use constant CLOCKS_PER_SEC => $hasHires ? 1000 : 1; use constant FRAME_RATE_SAMPLES => 50; my $FrameCount = 0; my $FrameRate = 0; my $last=0; sub ourDoFPS { if (++$FrameCount >= FRAME_RATE_SAMPLES) { my $now = $hasHires ? gettimeofday() : time(); # clock(); my $delta= ($now - $last); $last = $now; $FrameRate = FRAME_RATE_SAMPLES / ($delta || 1); $FrameCount = 0; } } # ------ # String rendering routine; leverages on GLUT routine. sub ourPrintString { my ($font, $str) = @_; my @c = split '', $str; for(@c) { glutBitmapCharacter($font, ord $_); } } # ------ # Does everything needed before losing control to the main # OpenGL event loop. sub ourInit { my ($Width, $Height) = @_; # Set initial colors for rainbow face for (my $i=0; $i<16; $i++) { $rainbow[$i] = rand(1.0); $rainbow_inc[$i] = 0.01 - rand(0.02); } # Initialize VBOs if supported if ($hasVBO) { ($VertexObjID,$NormalObjID,$ColorObjID,$TexCoordObjID,$IndexObjID) = glGenBuffersARB_p(5); #glBindBufferARB(GL_ARRAY_BUFFER_ARB, $VertexObjID); $verts->bind($VertexObjID); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $verts, GL_STATIC_DRAW_ARB); glVertexPointer_c(3, GL_FLOAT, 0, 0); if (DO_TESTS) { print "\nTests:\n"; my $size = glGetBufferParameterivARB_p(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB); print " Vertex Buffer Size (bytes): $size\n"; my $count = $verts->elements(); print " Vertex Buffer Size (elements): $count\n"; my $test = glGetBufferSubDataARB_p(GL_ARRAY_BUFFER_ARB,12,3,GL_FLOAT); my @test = $test->retrieve(0,3); my $ords = join('/',@test); print " glGetBufferSubDataARB_p: $ords\n"; } #glBindBufferARB(GL_ARRAY_BUFFER_ARB, $NormalObjID); $norms->bind($NormalObjID); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $norms, GL_STATIC_DRAW_ARB); glNormalPointer_c(GL_FLOAT, 0, 0); #glBindBufferARB(GL_ARRAY_BUFFER_ARB, $ColorObjID); $colors->bind($ColorObjID); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $colors, GL_DYNAMIC_DRAW_ARB); $rainbow->assign(0,@rainbow); glBufferSubDataARB_p(GL_ARRAY_BUFFER_ARB, $rainbow_offset, $rainbow); glColorPointer_c(4, GL_FLOAT, 0, 0); #glBindBufferARB(GL_ARRAY_BUFFER_ARB, $TexCoordObjID); $texcoords->bind($TexCoordObjID); glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $texcoords, GL_STATIC_DRAW_ARB); glTexCoordPointer_c(2, GL_FLOAT, 0, 0); #glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, $IndexObjID); $indices->bind($IndexObjID); glBufferDataARB_p(GL_ELEMENT_ARRAY_BUFFER_ARB, $indices, GL_STATIC_DRAW_ARB); } else { glVertexPointer_p(3, $verts); glNormalPointer_p($norms); $colors->assign($rainbow_offset,@rainbow); glColorPointer_p(4, $colors); glTexCoordPointer_p(2, $texcoords); } # Build texture. ($TextureID_image,$TextureID_FBO) = glGenTextures_p(2); ourBuildTextures(); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); # Initialize shaders. ourInitShaders(); # Initialize rendering parameters glEnable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glBlendFunc(GL_SRC_ALPHA,GL_ONE); #glEnable(GL_BLEND); # Color to clear color buffer to. glClearColor(0.1, 0.1, 0.1, 0.0); # Depth to clear depth buffer to; type of test. glClearDepth(1.0); glDepthFunc(GL_LESS); # Enables Smooth Color Shading; try GL_FLAT for (lack of) fun. glShadeModel(GL_SMOOTH); # Load up the correct perspective matrix; using a callback directly. cbResizeScene($Width, $Height); # Set up a light, turn it on. glLightfv_p(GL_LIGHT1, GL_POSITION, @Light_Position); glLightfv_p(GL_LIGHT1, GL_AMBIENT, @Light_Ambient); glLightfv_p(GL_LIGHT1, GL_DIFFUSE, @Light_Diffuse); glEnable(GL_LIGHT1); # A handy trick -- have surface material mirror the color. glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } # ------ # Function to build a simple full-color texture with alpha channel, # and then create mipmaps. # Also sets up FBO texture and Vertex/Fragment programs. sub ourBuildTextures { my $gluerr; my $tex; # Build Image Texture ($TextureID_image,$TextureID_FBO) = glGenTextures_p(2); print "\n"; # Use OpenGL::Image to load texture if ($hasImage && -e $Tex_File) { my $img = new OpenGL::Image(source=>$Tex_File); my($eng,$ver) = $img->Get('engine','version'); print "Using OpenGL::Image - $eng v$ver\n"; ($Tex_Width,$Tex_Height) = $img->Get('width','height'); my $alpha = $img->Get('alpha') ? 'has' : 'no'; print "Loading texture: $Tex_File, $Tex_Width x $Tex_Height, $alpha alpha\n"; ($Tex_Type,$Tex_Format,$Tex_Size) = $img->Get('gl_internalformat','gl_format','gl_type'); # Use OGA for testing $Tex_Image = $img; $Tex_Pixels = $img->GetArray(); print "Using ImageMagick's gaussian blur on inset\n" if ($hasIM_635); } # Build texture from scratch if OpenGL::Image not available else { my $hole_size = 3300; # ~ == 57.45 ^ 2. # Iterate across the texture array. for(my $y=0; $y<$Tex_Height; $y++) { for(my $x=0; $x<$Tex_Width; $x++) { # A simple repeating squares pattern. # Dark blue on white. if ( ( ($x+4)%32 < 8 ) && ( ($y+4)%32 < 8)) { $tex .= pack "C3", 0,0,120; # Dark blue } else { $tex .= pack "C3", 240, 240, 240; # White } # Make a round dot in the texture's alpha-channel. # Calculate distance to center (squared). my $t = ($x-64)*($x-64) + ($y-64)*($y-64); if ( $t < $hole_size) { $tex .= pack "C", 255; # The dot itself is opaque. } elsif ($t < $hole_size + 100) { $tex .= pack "C", 128; # Give our dot an anti-aliased edge. } else { $tex .= pack "C", 0; # Outside of the dot, it's transparent. } } } $Tex_Pixels = OpenGL::Array->new_scalar(GL_UNSIGNED_BYTE,$tex,length($tex)); $Tex_Type = GL_RGBA8; $Tex_Format = GL_RGBA; $Tex_Size = GL_UNSIGNED_BYTE; } glBindTexture(GL_TEXTURE_2D, $TextureID_image); # Use MipMap if ($useMipMap) { print "Using Mipmap\n"; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); # The GLU library helps us build MipMaps for our texture. if (($gluerr = gluBuild2DMipmaps_c(GL_TEXTURE_2D, $Tex_Type, $Tex_Width, $Tex_Height, $Tex_Format, $Tex_Size, $Tex_Pixels->ptr()))) { printf STDERR "GLULib%s\n", gluErrorString($gluerr); exit(-1); } } # Use normal texture - Note: dimensions must be power of 2 else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexImage2D_c(GL_TEXTURE_2D, 0, $Tex_Type, $Tex_Width, $Tex_Height, 0, $Tex_Format, $Tex_Size, $Tex_Pixels->ptr()); } # Benchmarks for Image Loading if (DO_TESTS && $hasIM) { my $loops = 1000; my $im = new Image::Magick(); $im->Read($Tex_File); $im->Set(magick=>'RGBA',depth=>8); $im->Negate(channel=>'alpha'); # Bench ImageToBlob my $start = gettimeofday(); for (my $i=0;$i<$loops;$i++) { my($blob) = $im->ImageToBlob(); glTexImage2D_s(GL_TEXTURE_2D, 0, GL_RGBA8, $Tex_Width, $Tex_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, $blob); } my $now = gettimeofday(); my $fps = $loops / ($now - $start); print "ImageToBlob + glTexImage2D_s: $fps\n"; # Bench GetPixels $start = gettimeofday(); for (my $i=0;$i<$loops;$i++) { my @pixels = $im->GetPixels(map=>'BGRA', width=>$Tex_Width, height=>$Tex_Height, normalize=>'false'); glTexImage2D_p(GL_TEXTURE_2D, 0, $Tex_Type, $Tex_Width, $Tex_Height, 0, $Tex_Format, $Tex_Size, @pixels); } $now = gettimeofday(); $fps = $loops / ($now - $start); print "GetPixels + glTexImage2D_p: $fps\n"; # Bench OpenGL::Image if ($hasIM_635) { my $start = gettimeofday(); for (my $i=0;$i<$loops;$i++) { glTexImage2D_c(GL_TEXTURE_2D, 0, $Tex_Type, $Tex_Width, $Tex_Height, 0, $Tex_Format, $Tex_Size, $Tex_Pixels->ptr()); } my $now = gettimeofday(); my $fps = $loops / ($now - $start); print "OpenGL::Image + glTexImage2D_c: $fps\n"; } } # Build FBO texture if ($hasFBO) { ($FrameBufferID) = glGenFramebuffersEXT_p(1); ($RenderBufferID) = glGenRenderbuffersEXT_p(1); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, $FrameBufferID); glBindTexture(GL_TEXTURE_2D, $TextureID_FBO); # Initiate texture glTexImage2D_c(GL_TEXTURE_2D, 0, $Tex_Type, $Tex_Width, $Tex_Height, 0, $Tex_Format, $Tex_Size, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); # Bind texture/frame/render buffers glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, $TextureID_FBO, 0); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, $RenderBufferID); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, $Tex_Width, $Tex_Height); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, $RenderBufferID); # Test status if (DO_TESTS) { my $stat = glCheckFramebufferStatusEXT(GL_RENDERBUFFER_EXT); printf("FBO Status: %04X\n",$stat); } } # Select active texture ourSelectTexture(); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); } sub ourSelectTexture { glBindTexture(GL_TEXTURE_2D, $FBO_On ? $TextureID_FBO : $TextureID_image); } sub ourInitShaders { # Setup Vertex/Fragment Programs to render FBO texture # Use OpenGL::Shader if ($hasShader && ($Shader = new OpenGL::Shader())) { my $type = $Shader->GetType(); my $ext = lc($type); my $stat = $Shader->LoadFiles("fragment.$ext","vertex.$ext"); if (!$stat) { my $ver = $Shader->GetVersion(); print "Using OpenGL::Shader('$type') v$ver\n"; return; } else { print "$stat\n"; } } # Fall back to doing it manually if ($hasFragProg) { ($VertexProgID,$FragProgID) = glGenProgramsARB_p(2); # NOP Vertex shader my $VertexProg = qq {!!ARBvp1.0 PARAM center = program.local[0]; PARAM xform[4] = {program.local[1..4]}; TEMP vertexClip; # ModelView projection DP4 vertexClip.x, state.matrix.mvp.row[0], vertex.position; DP4 vertexClip.y, state.matrix.mvp.row[1], vertex.position; DP4 vertexClip.z, state.matrix.mvp.row[2], vertex.position; DP4 vertexClip.w, state.matrix.mvp.row[3], vertex.position; # Additional transform, via matrix variable DP4 vertexClip.x, vertexClip, xform[0]; DP4 vertexClip.y, vertexClip, xform[1]; DP4 vertexClip.z, vertexClip, xform[2]; DP4 vertexClip.w, vertexClip, xform[3]; #SUB result.position, vertexClip, center; MOV result.position, vertexClip; # Pass through color MOV result.color, vertex.color; # Pass through texcoords SUB result.texcoord[0], vertex.texcoord, center; END }; glBindProgramARB(GL_VERTEX_PROGRAM_ARB, $VertexProgID); glProgramStringARB_p(GL_VERTEX_PROGRAM_ARB, $VertexProg); if (DO_TESTS) { my $format = glGetProgramivARB_p(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ARB); printf("glGetProgramivARB_p format: '#%04X'\n",$format); my @params = glGetProgramEnvParameterdvARB_p(GL_VERTEX_PROGRAM_ARB,0); my $params = join(', ',@params); print "glGetProgramEnvParameterdvARB_p: $params\n"; @params = glGetProgramEnvParameterfvARB_p(GL_VERTEX_PROGRAM_ARB,0); $params = join(', ',@params); print "glGetProgramEnvParameterfvARB_p: $params\n"; my $vprog = glGetProgramStringARB_p(GL_VERTEX_PROGRAM_ARB); print "Vertex Prog: $vprog\n"; } # Lazy Metalic Fragment shader my $FragProg = qq {!!ARBfp1.0 PARAM surfacecolor = program.local[5]; TEMP color; MUL color, fragment.texcoord[0].y, 2.0; ADD color, 1.0, -color; ABS color, color; ADD color, 1.01, -color; #Some cards have a rounding error MOV color.a, 1.0; MUL color, color, surfacecolor; MOV result.color, color; END }; glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, $FragProgID); glProgramStringARB_p(GL_FRAGMENT_PROGRAM_ARB, $FragProg); if (DO_TESTS) { my $fprog = glGetProgramStringARB_p(GL_FRAGMENT_PROGRAM_ARB); print "Fragment Prog: $fprog\n"; } } } # ------ # Routine which actually does the drawing sub cbRenderScene { # Quit if inactive if ($idleSecsMax < (time()-$idleTime)) { print "Idle timeout; completing test\n"; ourCleanup(); exit(0); } my $buf; # For our strings. # Animated Texture Rendering if ($FBO_On && ($FBO_On == 2 || !$FBO_rendered)) { $FBO_rendered = 1; glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, $FrameBufferID); glPushMatrix(); glTranslatef(-0.35, -0.48, -1.5); glRotatef($Teapot_Rot--, 0.0, 1.0, 0.0); glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushAttrib(GL_ENABLE_BIT); glEnable(GL_DEPTH_TEST); # Run shader programs for texture. # If installed, use OpenGL::Shader if ($Shader) { $Shader->Enable(); $Shader->SetVector('center',0.0,0.0,2.0,0.0); $Shader->SetMatrix('xform',$xform); $Shader->SetVector('surfacecolor',1.0,0.5,0.0,1.0); } # Otherwise, do it manually elsif ($hasFragProg) { glEnable(GL_VERTEX_PROGRAM_ARB); glEnable(GL_FRAGMENT_PROGRAM_ARB); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB, 0, 0.0,0.0,2.0,0.0); glProgramLocalParameter4fvARB_c(GL_VERTEX_PROGRAM_ARB, 1, $xform->offset(0)); glProgramLocalParameter4fvARB_c(GL_VERTEX_PROGRAM_ARB, 2, $xform->offset(4)); glProgramLocalParameter4fvARB_c(GL_VERTEX_PROGRAM_ARB, 3, $xform->offset(8)); glProgramLocalParameter4fvARB_c(GL_VERTEX_PROGRAM_ARB, 4, $xform->offset(12)); glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 5, 1.0,0.5,0.0,1.0); } glColor3f(1.0, 1.0, 1.0); #glutSolidTeapot(0.125); glutWireTeapot(0.125); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); if ($Shader) { $Shader->Disable(); } elsif ($hasFragProg) { glDisable(GL_FRAGMENT_PROGRAM_ARB); glDisable(GL_VERTEX_PROGRAM_ARB); } glPopAttrib(); glPopMatrix(); } ourSelectTexture(); # Enables, disables or otherwise adjusts as # appropriate for our current settings. if ($Texture_On) { glEnable(GL_TEXTURE_2D); } else { glDisable(GL_TEXTURE_2D); } if ($Light_On) { glEnable(GL_LIGHTING); } else { glDisable(GL_LIGHTING); } if ($Alpha_Add) { glBlendFunc(GL_SRC_ALPHA,GL_ONE); } else { glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); } # If we're blending, we don'$t want z-buffering. if ($Blend_On) { glDisable(GL_DEPTH_TEST); } else { glEnable(GL_DEPTH_TEST); } # Need to manipulate the ModelView matrix to move our model around. glMatrixMode(GL_MODELVIEW); # Reset to 0,0,0; no rotation, no scaling. glLoadIdentity(); # Move the object back from the screen. glTranslatef(0.0,0.0,$Z_Off); # Rotate the calculated amount. glRotatef($X_Rot,1.0,0.0,0.0); glRotatef($Y_Rot,0.0,1.0,0.0); # Clear the color and depth buffers. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); # Update Rainbow Cube Face for (my $i=0; $i 1) { $rainbow[$i] = 1.0; } else { next; } $rainbow_inc[$i] = -$rainbow_inc[$i]; } if ($hasVBO) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, $ColorObjID); my $color_map = glMapBufferARB_p(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB,GL_FLOAT); my $buffer = glGetBufferPointervARB_p(GL_ARRAY_BUFFER_ARB, GL_BUFFER_MAP_POINTER_ARB,GL_FLOAT); $color_map->assign($rainbow_offset,@rainbow); glUnmapBufferARB(GL_ARRAY_BUFFER_ARB); } else { $colors->assign($rainbow_offset,@rainbow); glColorPointer_p(4, $colors); } # Render cube glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); for (my $i=0; $i1) if ($Inset_On); # All done drawing. Let's show it. glutSwapBuffers(); # Now let's do the motion calculations. $X_Rot+=$X_Speed; $Y_Rot+=$Y_Speed; # And collect our statistics. ourDoFPS(); } # Capture window sub Capture { my(%params) = @_; my($w) = glutGet( GLUT_WINDOW_WIDTH ); my($h) = glutGet( GLUT_WINDOW_HEIGHT ); glPushAttrib( GL_ENABLE_BIT | GL_VIEWPORT_BIT | GL_TRANSFORM_BIT | GL_COLOR_BUFFER_BIT); glDisable( GL_LIGHTING ); glDisable( GL_FOG ); glDisable( GL_TEXTURE_2D ); glDisable( GL_DEPTH_TEST ); glDisable( GL_CULL_FACE ); glDisable( GL_STENCIL_TEST ); glViewport( 0, 0, $w, $h ); glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); eval { gluOrtho2D( 0, $w, 0, $h ); 1 } or $er++ or warn "Catched: $@"; glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); glPixelZoom( 1, 1 ); # Save if ($params{Save}) { Save($w,$h,$params{Save}); } # Inset elsif ($params{Inset}) { Inset($w,$h); } glMatrixMode( GL_PROJECTION ); glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glPopMatrix(); glPopAttrib(); } # Display inset sub Inset { my($w,$h) = @_; my $Capture_X = int(($w - $Inset_Width) / 2); my $Capture_Y = int(($h - $Inset_Height) / 2); my $Inset_X = $w - ($Inset_Width + 2); my $Inset_Y = $h - ($Inset_Height + 2); # Using OpenGL::Image and ImageMagick to read/modify/draw pixels if ($hasIM_635) { my $frame = new OpenGL::Image(engine=>'Magick', width=>$Inset_Width, height=>$Inset_Height); my($fmt,$size) = $frame->Get('gl_format','gl_type'); glReadPixels_c( $Capture_X, $Capture_Y, $Inset_Width, $Inset_Height, $fmt, $size, $frame->Ptr() ); # Do this before making native calls $frame->Sync(); # For grins, use ImageMagick to modify the inset $frame->Native->Blur(radius=>2,sigma=>2); # Do this when done making native calls $frame->SyncOGA(); glRasterPos2f( $Inset_X, $Inset_Y ); glDrawPixels_c( $Inset_Width, $Inset_Height, $fmt, $size, $frame->Ptr() ); } # Fastest approach else { my $len = $Inset_Width * $Inset_Height * 4; my $oga = new OpenGL::Array($len,GL_UNSIGNED_BYTE); glReadPixels_c( $Capture_X, $Capture_Y, $Inset_Width, $Inset_Height, GL_RGBA, GL_UNSIGNED_BYTE, $oga->ptr() ); glRasterPos2f( $Inset_X, $Inset_Y ); glDrawPixels_c( $Inset_Width, $Inset_Height, GL_RGBA, GL_UNSIGNED_BYTE, $oga->ptr() ); } } # Capture/save window sub Save { my($w,$h,$file) = @_; if ($hasImage) { my $frame = new OpenGL::Image(width=>$w, height=>$h); my($fmt,$size) = $frame->Get('gl_format','gl_type'); glReadPixels_c( 0, 0, $w, $h, $fmt, $size, $frame->Ptr() ); $frame->Save($file); } else { print "Need OpenGL::Image and ImageMagick 6.3.5 or newer for file capture!\n"; } } # Cleanup routine sub ourCleanup { # Disable app glutHideWindow(); glutKeyboardUpFunc(); glutKeyboardFunc(); glutSpecialUpFunc(); glutSpecialFunc(); glutIdleFunc(); glutReshapeFunc(); ReleaseResources(); # Now you can destroy window if (defined($gameMode)) { glutLeaveGameMode(); } else { glutDestroyWindow($Window_ID); } undef($Window_ID); } sub ReleaseResources { return if (!defined($Window_ID)); if ($hasFBO) { # Release resources glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, 0 ); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); glDeleteRenderbuffersEXT_p( $RenderBufferID ) if ($RenderBufferID); glDeleteFramebuffersEXT_p( $FrameBufferID ) if ($FrameBufferID); } if ($Shader) { undef($Shader); } elsif ($hasFragProg) { glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0); glDeleteProgramsARB_p( $VertexProgID ) if ($VertexProgID); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0); glDeleteProgramsARB_p( $FragProgID ) if ($FragProgID); } if ($hasVBO) { glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); glDeleteBuffersARB_p($VertexObjID) if ($VertexObjID); glDeleteBuffersARB_p($NormalObjID) if ($NormalObjID); glDeleteBuffersARB_p($ColorObjID) if ($ColorObjID); glDeleteBuffersARB_p($TexCoordObjID) if ($TexCoordObjID); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); glDeleteBuffersARB_p($IndexObjID) if ($IndexObjID); } glDeleteTextures_p($TextureID_image,$TextureID_FBO); } # ------ # Callback function called when a normal $key is pressed. sub cbKeyPressed { my $key = shift; my $c = uc chr $key; if ($key == 27 or $c eq 'Q') { ourCleanup(); exit(0); } elsif ($c eq 'B') { $Blend_On = !$Blend_On; if (!$Blend_On) { glDisable(GL_BLEND); } else { glEnable(GL_BLEND); } } elsif ($c eq 'K') { # ignore keypress if not FreeGLUT glutLeaveMainLoop() if OpenGL::_have_freeglut(); } elsif ($c eq 'L') { $Light_On = !$Light_On; } elsif ($c eq 'M') { if ( ++ $Curr_TexMode > 3 ) { $Curr_TexMode=0; } glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,$TexModes[$Curr_TexMode]); } elsif ($c eq 'T') { $Texture_On = !$Texture_On; } elsif ($c eq 'A') { $Alpha_Add = !$Alpha_Add; } elsif ($c eq 'F' && $hasFBO) { $FBO_On = ($FBO_On+1) % 3; ourSelectTexture(); } elsif ($c eq 'I') { $Inset_On = !$Inset_On; } elsif ($c eq 'S' or $key == 32) { $X_Speed=$Y_Speed=0; } elsif ($c eq 'R') { $X_Speed = -$X_Speed; $Y_Speed = -$Y_Speed; } elsif ($c eq 'G') { $Fullscreen_On = !$Fullscreen_On; if ($Fullscreen_On) { $Window_State = glpFullScreen(); $Window_Width = $Window_State->{w}; $Window_Height = $Window_State->{h}; } else { glpRestoreScreen($Window_State); } } elsif ($c eq 'C' && $hasImage) { Capture(Save=>'capture.tga'); } else { printf "KP: No action for %d.\n", $key; } $idleTime = time(); } # ------ # Callback Function called when a special $key is pressed. sub cbSpecialKeyPressed { my $key = shift; if ($key == GLUT_KEY_PAGE_UP) { $Z_Off -= 0.05; } elsif ($key == GLUT_KEY_PAGE_DOWN) { $Z_Off += 0.05; } elsif ($key == GLUT_KEY_UP) { $X_Speed -= 0.01; } elsif ($key == GLUT_KEY_DOWN) { $X_Speed += 0.01; } elsif ($key == GLUT_KEY_LEFT) { $Y_Speed -= 0.01; } elsif ($key == GLUT_KEY_RIGHT) { $Y_Speed += 0.01; } else { printf "SKP: No action for %d.\n", $key; } $idleTime = time(); } # ------ # Callback function called for key-up events. sub cbKeyUp { my($key) = @_; my $mod = GetKeyModifier(); print "Key up: $key w/ $mod\n" if ($mod); } # ------ # Callback function called for special key-up events. sub cbSpecialKeyUp { my($key) = @_; my $mod = GetKeyModifier(); print "Special Key up: $key w/ $mod\n" if ($mod); } # ------ # Callback function called for handling mouse clicks. sub cbMouseClick { my($button,$state,$x,$y) = @_; if ($button == GLUT_LEFT_BUTTON) { print "Left"; } elsif ($button == GLUT_MIDDLE_BUTTON) { print "Middle"; } elsif ($button == GLUT_RIGHT_BUTTON) { print "Right"; } else { print "Unknown"; } print " mouse button, "; if ($state == GLUT_DOWN) { print "DOWN"; } elsif ($state == GLUT_UP) { print "UP"; } else { print "State UNKNOWN"; } my $mod = GetKeyModifier(); print " w/ $mod" if ($mod); print ": $x, $y\n"; # Example of using GLU to determine 3D click points if ($state == GLUT_UP) { print "\n"; glGetDoublev_c(GL_MODELVIEW_MATRIX,$mm->ptr()); my @model = $mm->retrieve(0,16); glGetDoublev_c(GL_PROJECTION_MATRIX,$pm->ptr()); my @projection = $pm->retrieve(0,16); glGetIntegerv_c(GL_VIEWPORT,$vp->ptr()); my @viewport = $vp->retrieve(0,4); print "Model Matrix: $model[0], $model[1], $model[2], $model[3]\n"; print " $model[4], $model[5], $model[6], $model[7]\n"; print " $model[8], $model[9], $model[10], $model[11]\n"; print " $model[12], $model[13], $model[14], $model[15]\n"; print "Projection Matrix: $projection[0], $projection[1], $projection[2], $projection[3]\n"; print " $projection[4], $projection[5], $projection[6], $projection[7]\n"; print " $projection[8], $projection[9], $projection[10], $projection[11]\n"; print " $projection[12], $projection[13], $projection[14], $projection[15]\n"; print "Viewport: $viewport[0], $viewport[1], $viewport[2], $viewport[3]\n"; print "\n"; my @point = gluUnProject_p($x,$y,0, # Cursor point @model, # Model Matrix @projection, # Projection Matrix @viewport); # Viewport print "Model point: $point[0], $point[1], $point[2]\n"; # @point = gluProject_p(@point, # Model point # @model, # Model Matrix # @projection, # Projection Matrix # @viewport); # Viewport # print "Window point: $point[0], $point[1], $point[2]\n"; print "\n"; } $idleTime = time(); } sub GetKeyModifier { return $key_mods->{glutGetModifiers()}; } # ------ # Callback routine executed whenever our window is resized. Lets us # request the newly appropriate perspective projection matrix for # our needs. Try removing the gluPerspective() call to see what happens. sub cbResizeScene { my($Width, $Height) = @_; # Let's not core dump, no matter what. $Height = 1 if ($Height == 0); glViewport(0, 0, $Width, $Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,$Width/$Height,0.1,100.0); glMatrixMode(GL_MODELVIEW); $Window_Width = $Width; $Window_Height = $Height; $idleTime = time(); } sub cbWindowStat { my($stat) = @_; print "Window status: $stat\n"; } sub cbClose { my($wid) = @_; print "User has closed window: \#$wid\n"; ReleaseResources(); } # ------ # The main() function. Inits OpenGL. Calls our own init function, # then passes control onto OpenGL. # Initialize GLUT/FreeGLUT glutInit(); # To see OpenGL drawing, take out the GLUT_DOUBLE request. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA); if ($^O ne 'MSWin32' and $OpenGL::Config->{DEFINE} !~ /-DHAVE_W32API/) { # skip these MODE checks on win32, they don't work if (not glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { warn "glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA) not possible"; warn "...trying without GLUT_ALPHA"; # try without GLUT_ALPHA glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); if (not glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { warn "glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) not possible, exiting quietly"; exit 0; } } } #glutInitDisplayString("rgb alpha>=0 double depth"); # Open Window if (defined($gameMode) && glutGameModeString($gameMode)) { print "Running in Game Mode $gameMode\n"; glutGameModeString($gameMode); $Window_ID = glutEnterGameMode(); $Window_Width = glutGameModeGet( GLUT_GAME_MODE_WIDTH ); $Window_Height = glutGameModeGet( GLUT_GAME_MODE_HEIGHT ); } else { glutInitWindowSize($Window_Width, $Window_Height); $Window_ID = glutCreateWindow( PROGRAM_TITLE ); } # Get OpenGL Info print "\n"; print PROGRAM_TITLE; print ' (using hires timer)' if ($hasHires); print "\n\n"; my $version = glGetString(GL_VERSION); my $vendor = glGetString(GL_VENDOR); my $renderer = glGetString(GL_RENDERER); print "Using POGL v$OpenGL::BUILD_VERSION\n"; print "OpenGL installation: $version\n$vendor\n$renderer\n\n"; print "Installed extensions (* implemented in the module):\n"; my $extensions = glGetString(GL_EXTENSIONS); my @extensions = split(' ',$extensions); foreach my $ext (sort @extensions) { my $stat = glpCheckExtension($ext); printf("%s $ext\n",$stat?' ':'*'); print(" $stat\n") if ($stat && $stat !~ m|^$ext |); } if (!OpenGL::glpCheckExtension('GL_ARB_vertex_buffer_object')) { #$hasVBO = 1; # Perl 5.10 crashes on VBOs! $hasVBO = ($PERL_VERSION !~ m|^5\.10\.|); } if (!OpenGL::glpCheckExtension('GL_EXT_framebuffer_object')) { $hasFBO = 1; $FBO_On = 1; if (!OpenGL::glpCheckExtension('GL_ARB_fragment_program')) { $hasFragProg = 1; $FBO_On++; } } # Register the callback function to do the drawing. glutDisplayFunc(\&cbRenderScene); # If there's nothing to do, draw. glutIdleFunc(\&cbRenderScene); # It's a good idea to know when our window's resized. glutReshapeFunc(\&cbResizeScene); #glutWindowStatusFunc(\&cbWindowStat); # And let's get some keyboard input. glutKeyboardFunc(\&cbKeyPressed); glutSpecialFunc(\&cbSpecialKeyPressed); glutKeyboardUpFunc(\&cbKeyUp); glutSpecialUpFunc(\&cbSpecialKeyUp); # Mouse handlers. glutMouseFunc(\&cbMouseClick); #glutMotionFunc(\&cbMouseDrag); #glutPassiveMotionFunc(\&cbMouseTrack); # Handle window close events. glutCloseFunc(\&cbClose) if OpenGL::_have_freeglut(); # OK, OpenGL's ready to go. Let's call our own init function. ourInit($Window_Width, $Window_Height); # Print out a bit of help dialog. print qq { Hold down arrow keys to rotate, 'r' to reverse, 's' to stop. Page up/down will move cube away from/towards camera. Use first letter of shown display mode settings to alter. Press 'g' to toggle fullscreen mode (not supported on all platforms). Press 'c' to capture/save a RGBA targa file. 'q' or [Esc] to quit; OpenGL window must have focus for input. }; # Pass off control to OpenGL. # Above functions are called as appropriate. if (OpenGL::_have_freeglut()) { glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS) } glutMainLoop(); print "FreeGLUT returned from MainLoop\n"; __END__ libopengl-perl-0.6704+dfsg.orig/META.json0000644000175000017500000000226012446030325017315 0ustar gregoagregoa{ "abstract" : "Perl bindings to the OpenGL API, GLU, and GLUT/FreeGLUT", "author" : [ "Chris Marshall " ], "dynamic_config" : 1, "generated_by" : "ExtUtils::MakeMaker version 6.86, CPAN::Meta::Converter version 2.142060", "license" : [ "unknown" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "OpenGL", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "Test::More" : "0" } } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "http://sourceforge.net/tracker/?group_id=562483&atid=2281758" }, "homepage" : "http://sourceforge.net/projects/pogl/", "repository" : { "url" : "git://pogl.git.sourceforge.net/gitroot/pogl/pogl" } }, "version" : "0.6704" } libopengl-perl-0.6704+dfsg.orig/glx_const.h0000644000175000017500000000636012334200655020053 0ustar gregoagregoa#ifdef HAVE_GLX if (!strncmp(name, "GLX_", 4)) { i(GLX_USE_GL) i(GLX_BUFFER_SIZE) i(GLX_LEVEL) i(GLX_RGBA) i(GLX_DOUBLEBUFFER) i(GLX_STEREO) i(GLX_AUX_BUFFERS) i(GLX_RED_SIZE) i(GLX_GREEN_SIZE) i(GLX_BLUE_SIZE) i(GLX_ALPHA_SIZE) i(GLX_DEPTH_SIZE) i(GLX_STENCIL_SIZE) i(GLX_ACCUM_RED_SIZE) i(GLX_ACCUM_GREEN_SIZE) i(GLX_ACCUM_BLUE_SIZE) i(GLX_ACCUM_ALPHA_SIZE) #ifdef GLX_EXT_visual_info i(GLX_X_VISUAL_TYPE_EXT) i(GLX_TRANSPARENT_TYPE_EXT) i(GLX_TRANSPARENT_INDEX_VALUE_EXT) i(GLX_TRANSPARENT_RED_VALUE_EXT) i(GLX_TRANSPARENT_GREEN_VALUE_EXT) i(GLX_TRANSPARENT_BLUE_VALUE_EXT) i(GLX_TRANSPARENT_ALPHA_VALUE_EXT) #endif } if (1) { i(X_PROTOCOL) i(X_PROTOCOL_REVISION) i(NoEventMask) i(KeyPressMask) i(KeyReleaseMask) i(ButtonPressMask) i(ButtonReleaseMask) i(EnterWindowMask) i(LeaveWindowMask) i(PointerMotionMask) i(PointerMotionHintMask) i(Button1MotionMask) i(Button2MotionMask) i(Button3MotionMask) i(Button4MotionMask) i(Button5MotionMask) i(ButtonMotionMask) i(KeymapStateMask) i(ExposureMask) i(VisibilityChangeMask) i(StructureNotifyMask) i(ResizeRedirectMask) i(SubstructureNotifyMask) i(SubstructureRedirectMask) i(FocusChangeMask) i(PropertyChangeMask) i(ColormapChangeMask) i(OwnerGrabButtonMask) i(KeyPress) i(KeyRelease) i(ButtonPress) i(ButtonRelease) i(MotionNotify) i(EnterNotify) i(LeaveNotify) i(FocusIn) i(FocusOut) i(KeymapNotify) i(Expose) i(GraphicsExpose) i(NoExpose) i(VisibilityNotify) i(CreateNotify) i(DestroyNotify) i(UnmapNotify) i(MapNotify) i(MapRequest) i(ReparentNotify) i(ConfigureNotify) i(ConfigureRequest) i(GravityNotify) i(ResizeRequest) i(CirculateNotify) i(CirculateRequest) i(PropertyNotify) i(SelectionClear) i(SelectionRequest) i(SelectionNotify) i(ColormapNotify) i(ClientMessage) i(MappingNotify) i(LASTEvent) i(ShiftMask) i(LockMask) i(ControlMask) i(Mod1Mask) i(Mod2Mask) i(Mod3Mask) i(Mod4Mask) i(Mod5Mask) i(ShiftMapIndex) i(LockMapIndex) i(ControlMapIndex) i(Mod1MapIndex) i(Mod2MapIndex) i(Mod3MapIndex) i(Mod4MapIndex) i(Mod5MapIndex) i(Button1Mask) i(Button2Mask) i(Button3Mask) i(Button4Mask) i(Button5Mask) i(AnyModifier) i(Button1) i(Button2) i(Button3) i(Button4) i(Button5) i(NotifyNormal) i(NotifyGrab) i(NotifyUngrab) i(NotifyWhileGrabbed) i(NotifyHint) i(NotifyAncestor) i(NotifyVirtual) i(NotifyInferior) i(NotifyNonlinear) i(NotifyNonlinearVirtual) i(NotifyPointer) i(NotifyPointerRoot) i(NotifyDetailNone) i(VisibilityUnobscured) i(VisibilityPartiallyObscured) i(VisibilityFullyObscured) i(PlaceOnTop) i(PlaceOnBottom) i(FamilyInternet) i(FamilyDECnet) i(FamilyChaos) i(PropertyNewValue) i(PropertyDelete) i(ColormapUninstalled) i(ColormapInstalled) i(GrabModeSync) i(GrabModeAsync) i(GrabSuccess) i(AlreadyGrabbed) i(GrabInvalidTime) i(GrabNotViewable) i(GrabFrozen) i(AsyncPointer) i(SyncPointer) i(ReplayPointer) i(AsyncKeyboard) i(SyncKeyboard) i(ReplayKeyboard) i(AsyncBoth) i(SyncBoth) i(StaticGray) i(GrayScale) i(StaticColor) i(PseudoColor) i(TrueColor) i(DirectColor) } if (0) { } else #endif /* def HAVE_GLX */ libopengl-perl-0.6704+dfsg.orig/glu_util.h0000644000175000017500000000050412334200655017671 0ustar gregoagregoa#if defined(HAVE_AGL_GLUT) #include #else #include #endif #ifndef GLU_VERSION_1_0 #define GLU_VERSION_1_0 1 #endif #ifdef GLU_VERSION_1_0 #ifndef GLU_VERSION_1_1 typedef GLUnurbs GLUnurbsObj; typedef GLUtriangulatorObj GLUtriangulatorObj; typedef GLUquadricObj GLUquadricObjObj; #endif #endif libopengl-perl-0.6704+dfsg.orig/OpenGL.pm0000644000175000017500000042561212334203762017373 0ustar gregoagregoapackage OpenGL; # Copyright (c) 1998,1999 Kenneth Albanowski. All rights reserved. # Copyright (c) 2007 Bob Free. All rights reserved. # Copyright (c) 2009 Christopher Marshall. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. require Exporter; require DynaLoader; use Carp; $VERSION = '0.6704'; $BUILD_VERSION = $XS_VERSION = $VERSION; $VERSION = eval($VERSION); @ISA = qw(Exporter AutoLoader DynaLoader); our $gl_version; our $glext_installed = {}; # Implemented extensions and their dependencies our $glext_dependencies = { GL_ARB_color_buffer_float=>'2.0', #39 GL_ARB_depth_texture=>'1.1', #22 GL_ARB_draw_buffers=>'1.3', #37 GL_ARB_fragment_program=>'1.4;ARB_vertex_program', #27 GL_ARB_fragment_program_shadow=>'1.4;ARB_fragment_program,ARB_shadow', #36 GL_ARB_fragment_shader=>'1.4;ARB_shader_objects', #32 GL_ARB_half_float_pixel=>'1.5', #40 GL_ARB_multisample=>'1.0', #5 GL_ARB_multitexture=>'1.1', GL_ARB_pixel_buffer_object=>'1.5', #42 GL_ARB_point_parameters=>'1.0', #14 GL_ARB_point_sprite=>'1.4', #35 GL_ARB_shading_language_100=>'1.4;ARB_shader_objects,ARB_fragment_shader,ARB_vertex_shader', #33 GL_ARB_shader_objects=>'1.4', #30 GL_ARB_shadow=>'1.1;ARB_depth_texture', #23 GL_ARB_shadow_ambient=>'1.1;ARB_shadow,ARB_depth_texture', #23 GL_ARB_texture_border_clamp=>'1.0', #13 GL_ARB_texture_cube_map=>'1.0', #7 GL_ARB_texture_env_add=>'1.0', #6 GL_ARB_texture_env_combine=>'1.1;ARB_multitexture', #17 GL_ARB_texture_env_dot3=>'1.1;ARB_multitexture,ARB_texture_env_combine', #19 GL_ARB_texture_float=>'1.1', #41 GL_ARB_texture_mirrored_repeat=>'1.0', #21 GL_ARB_texture_non_power_of_two=>'1.4', #34 GL_ARB_texture_rectangle=>'1.1', #38 GL_ARB_vertex_buffer_object=>'1.4', #28 GL_ARB_vertex_program=>'1.3', #26 GL_ARB_vertex_shader=>'1.4;ARB_shader_objects', #31 GL_ATI_texture_float=>'1.1', #280 GL_ATI_texture_mirror_once=>'1.0;EXT_texture3D', #221 GL_EXT_abgr=>'1.0', #1 GL_EXT_bgra=>'1.0', #129 GL_EXT_blend_color=>'1.0', #2 GL_EXT_blend_subtract=>'1.0', #38 GL_EXT_Cg_shader=>'1.0;ARB_shader_objects', #??? GL_EXT_copy_texture=>'1.0', #10 GL_EXT_framebuffer_object=>'1.1', #310 GL_EXT_packed_pixels=>'1.0', #23 GL_EXT_pixel_buffer_object=>'1.0', #??? GL_EXT_rescale_normal=>'1.0', #27 GL_EXT_separate_specular_color=>'1.0', #144 GL_EXT_shadow_funcs=>'1.1;ARB_depth_texture,ARB_shadow', #267 GL_EXT_stencil_wrap=>'1.0', #176 GL_EXT_subtexture=>'1.0', #9 GL_EXT_texture=>'1.0', #4 GL_EXT_texture3D=>'1.1;EXT_abgr', #6 GL_EXT_texture_cube_map=>'1.0', #6 GL_EXT_texture_env_combine=>'1.0', #158 GL_EXT_texture_env_dot3=>'1.0;EXT_texture_env_combine', #220 GL_EXT_texture_filter_anisotropic=>'1.0', #187 GL_EXT_texture_lod_bias=>'1.0', #186 GL_EXT_texture_mirror_clamp=>'1.0', #298 GL_EXT_vertex_array=>'1.0', #30 GL_HP_occlusion_test=>'1.0', #137 GL_IBM_rasterpos_clip=>'1.0', #110 GL_NV_blend_square=>'1.0', #194 GL_NV_copy_depth_to_color=>'1.0;NV_packed_depth_stencil', #243 GL_NV_depth_clamp=>'1.0', #260 GL_NV_fog_distance=>'1.0', #192 GL_NV_fragment_program_option=>'1.0;ARB_fragment_program', #303 GL_NV_fragment_program2=>'1.0;ARB_fragment_program,NV_fragment_program_option', #304 GL_NV_light_max_exponent=>'1.0', #189 GL_NV_multisample_filter_hint=>'1.0;ARB_multisample', #259 GL_NV_packed_depth_stencil=>'1.0', #226 GL_NV_texgen_reflection=>'1.0', #179 GL_NV_texture_compression_vtc=>'1.0;ARB_texture_compression,EXT_texture_compression_s3tc,ARB_texture_non_power_of_two', #228 GL_NV_texture_expand_normal=>'1.1', #286 GL_NV_texture_rectangle=>'1.0', #229 GL_NV_texture_shader=>'1.0;ARB_multitexture,ARB_texture_cube_map', #230 GL_NV_texture_shader2=>'1.0;NV_texture_shader', #231 GL_NV_texture_shader3=>'1.0;NV_texture_shader2', #265 GL_NV_vertex_program1_1=>'1.0;NV_vertex_program', #266 GL_NV_vertex_program2=>'1.0;NV_vertex_program', #287 GL_NV_vertex_program2_option=>'1.0;ARB_vertex_program', #305 GL_NV_vertex_program3=>'1.0;ARB_vertex_program,NV_vertex_program2_option', #306 GL_S3_s3tc=>'1.1', #276 GL_SGIS_generate_mipmap=>'1.1', #32 GL_SGIS_texture_lod=>'1.1', #24 GL_SGIX_depth_texture=>'1.1', #63 GL_SGIX_shadow=>'1.0', #34 GL_SUN_slice_accum=>'1.0' #258 }; @gl_func = qw( glAccum glAlphaFunc glAreTexturesResident_s glAreTexturesResident_c glAreTexturesResident_p glArrayElement glBegin glEnd glBindTexture glBitmap_s glBitmap_c glBitmap_p glBlendFunc glCallList glCallLists_s glCallLists_c glCallLists_p glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane_p glClipPlane_s glClipPlane_c glColorMask glColorMaterial glColorPointer_c glColorPointer_s glColorPointer_p glCopyPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTexSubImage2D glCopyTexSubImage3D glCullFace glDeleteLists glDeleteTextures_s glDeleteTextures_c glDeleteTextures_p glDepthFunc glDepthMask glDepthRange glDrawArrays glDrawBuffer glDrawBuffers_s glDrawBuffers_c glDrawBuffers_p glDrawBuffersARB_s glDrawBuffersARB_c glDrawBuffersARB_p glDrawElements_s glDrawElements_c glDrawElements_p glDrawPixels_s glDrawPixels_c glDrawPixels_p glDrawRangeElements_s glDrawRangeElements_c glDrawRangeElements_p glEdgeFlag glEdgeFlagPointer_c glEdgeFlagPointer_s glEdgeFlagPointer_p glEnable glDisable glEnableClientState glDisableClientState glEvalCoord1d glEvalCoord1f glEvalCoord2d glEvalCoord2f glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer_c glFinish glFlush glFogf glFogi glFogfv_p glFogiv_p glFogfv_s glFogiv_s glFogfv_c glFogiv_c glFrontFace glFrustum glGenLists glGenTextures_s glGenTextures_c glGenTextures_p glGetDoublev_s glGetDoublev_c glGetBooleanv_s glGetBooleanv_c glGetIntegerv_s glGetIntegerv_c glGetFloatv_s glGetFloatv_c glGetDoublev_p glGetBooleanv_p glGetIntegerv_p glGetFloatv_p glGetClipPlane_p glGetClipPlane_s glGetClipPlane_c glGetError glGetLightfv_p glGetLightiv_p glGetLightfv_c glGetLightiv_c glGetLightfv_s glGetLightiv_s glGetMapfv_p glGetMapdv_p glGetMapiv_p glGetMapiv_c glGetMapfv_c glGetMapdv_c glGetMapdv_s glGetMapfv_s glGetMapiv_s glGetMaterialfv_p glGetMaterialiv_p glGetMaterialfv_c glGetMaterialiv_c glGetMaterialfv_s glGetMaterialiv_s glGetPixelMapfv_p glGetPixelMapuiv_p glGetPixelMapusv_p glGetPixelMapfv_c glGetPixelMapuiv_c glGetPixelMapusv_c glGetPixelMapfv_s glGetPixelMapuiv_s glGetPixelMapusv_s glGetPolygonStipple_s glGetPolygonStipple_c glGetPolygonStipple_p glGetPointerv_c glGetPointerv_s glGetPointerv_p glGetString glGetTexEnvfv_p glGetTexEnviv_p glGetTexEnvfv_c glGetTexEnviv_c glGetTexEnvfv_s glGetTexEnviv_s glGetTexGenfv_p glGetTexGendv_p glGetTexGeniv_p glGetTexGenfv_c glGetTexGendv_c glGetTexGeniv_c glGetTexGendv_s glGetTexGenfv_s glGetTexGeniv_s glGetTexImage_s glGetTexImage_c glGetTexImage_p glGetTexLevelParameterfv_p glGetTexLevelParameteriv_p glGetTexLevelParameterfv_s glGetTexLevelParameteriv_s glGetTexLevelParameterfv_c glGetTexLevelParameteriv_c glGetTexParameterfv_p glGetTexParameteriv_p glGetTexParameterfv_s glGetTexParameteriv_s glGetTexParameterfv_c glGetTexParameteriv_c glHint glIndexd glIndexi glIndexMask glIndexPointer_c glIndexPointer_s glIndexPointer_p glInitNames glInterleavedArrays_c glIsEnabled glIsList glIsTexture glLightf glLighti glLightfv_p glLightiv_p glLightfv_c glLightiv_c glLightfv_s glLightiv_s glLightModelf glLightModeli glLightModelfv_p glLightModeliv_p glLightModeliv_c glLightModelfv_c glLightModeliv_s glLightModelfv_s glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd_p glLoadMatrixf_p glLoadMatrixf_c glLoadMatrixd_c glLoadMatrixf_s glLoadMatrixd_s glLoadName glLogicOp glMap1d_p glMap1f_p glMap1d_c glMap1f_c glMap1d_s glMap1f_s glMap2d_p glMap2f_p glMap2d_c glMap2f_c glMap2d_s glMap2f_s glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMateriali glMaterialfv_p glMaterialiv_p glMaterialfv_s glMaterialiv_s glMaterialfv_c glMaterialiv_c glMatrixMode glMultMatrixd_p glMultMatrixf_p glNewList glEndList glNormalPointer_c glNormalPointer_s glNormalPointer_p glOrtho glPassThrough glPixelMapfv_p glPixelMapuiv_p glPixelMapusv_p glPixelMapfv_c glPixelMapuiv_c glPixelMapusv_c glPixelMapfv_s glPixelMapuiv_s glPixelMapusv_s glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffset glPolygonStipple_s glPolygonStipple_c glPolygonStipple_p glPrioritizeTextures_s glPrioritizeTextures_c glPrioritizeTextures_p glPushAttrib glPopAttrib glPushClientAttrib glPopClientAttrib glPushMatrix glPopMatrix glPushName glPopName glReadBuffer glReadPixels_s glReadPixels_c glReadPixels_p glRecti glRects glRectd glRectf glRectsv_c glRectiv_c glRectfv_c glRectdv_c glRectdv_s glRectfv_s glRectiv_s glRectsv_s glRenderMode glRotated glRotatef glScaled glScalef glScissor glSelectBuffer_c glShadeModel glStencilFunc glStencilMask glStencilOp glTexCoordPointer_c glTexCoordPointer_s glTexCoordPointer_p glTexEnvf glTexEnvi glTexEnvfv_p glTexEnviv_p glTexEnvfv_s glTexEnviv_s glTexGend glTexGenf glTexGeni glTexGendv_p glTexGenfv_p glTexGeniv_p glTexGendv_s glTexGenfv_s glTexGeniv_s glTexGendv_c glTexGenfv_c glTexGeniv_c glTexImage1D_s glTexImage1D_c glTexImage1D_p glTexImage2D_s glTexImage2D_c glTexImage2D_p glTexImage3D_s glTexImage3D_c glTexImage3D_p glTexImage3DEXT_c glTexImage3DEXT_s glTexImage3DEXT_p glTexParameterf glTexParameteri glTexParameterfv_p glTexParameteriv_p glTexParameterfv_s glTexParameteriv_s glTexParameterfv_c glTexParameteriv_c glTexSubImage1D_c glTexSubImage1D_s glTexSubImage1D_p glTexSubImage2D_s glTexSubImage2D_c glTexSubImage2D_p glTexSubImage3D_s glTexSubImage3D_c glTexSubImage3D_p glTexSubImage1DEXT_c glTexSubImage1DEXT_s glTexSubImage1DEXT_p glTexSubImage2DEXT_c glTexSubImage2DEXT_s glTexSubImage2DEXT_p glTranslated glTranslatef glVertexPointer_c glVertexPointer_s glVertexPointer_p glViewport glVertex2d glVertex2dv_p glVertex2dv_s glVertex2dv_c glVertex2f glVertex2fv_p glVertex2fv_s glVertex2fv_c glVertex2i glVertex2iv_p glVertex2iv_s glVertex2iv_c glVertex2s glVertex2sv_p glVertex2sv_s glVertex2sv_c glVertex3d glVertex3dv_p glVertex3dv_s glVertex3dv_c glVertex3f glVertex3fv_p glVertex3fv_s glVertex3fv_c glVertex3i glVertex3iv_p glVertex3iv_s glVertex3iv_c glVertex3s glVertex3sv_p glVertex3sv_s glVertex3sv_c glVertex4d glVertex4dv_p glVertex4dv_s glVertex4dv_c glVertex4f glVertex4fv_p glVertex4fv_s glVertex4fv_c glVertex4i glVertex4iv_p glVertex4iv_s glVertex4iv_c glVertex4s glVertex4sv_p glVertex4sv_s glVertex4sv_c glNormal3b glNormal3bv_p glNormal3bv_s glNormal3bv_c glNormal3d glNormal3dv_p glNormal3dv_s glNormal3dv_c glNormal3f glNormal3fv_p glNormal3fv_s glNormal3fv_c glNormal3i glNormal3iv_p glNormal3iv_s glNormal3iv_c glNormal3s glNormal3sv_p glNormal3sv_s glNormal3sv_c glColor3b glColor3bv_p glColor3bv_s glColor3bv_c glColor3d glColor3dv_p glColor3dv_s glColor3dv_c glColor3f glColor3fv_p glColor3fv_s glColor3fv_c glColor3i glColor3iv_p glColor3iv_s glColor3iv_c glColor3s glColor3sv_p glColor3sv_s glColor3sv_c glColor3ub glColor3ubv_p glColor3ubv_s glColor3ubv_c glColor3ui glColor3uiv_p glColor3uiv_s glColor3uiv_c glColor3us glColor3usv_p glColor3usv_s glColor3usv_c glColor4b glColor4bv_p glColor4bv_s glColor4bv_c glColor4d glColor4dv_p glColor4dv_s glColor4dv_c glColor4f glColor4fv_p glColor4fv_s glColor4fv_c glColor4i glColor4iv_p glColor4iv_s glColor4iv_c glColor4s glColor4sv_p glColor4sv_s glColor4sv_c glColor4ub glColor4ubv_p glColor4ubv_s glColor4ubv_c glColor4ui glColor4uiv_p glColor4uiv_s glColor4uiv_c glColor4us glColor4usv_p glColor4usv_s glColor4usv_c glTexCoord1d glTexCoord1dv_p glTexCoord1dv_s glTexCoord1dv_c glTexCoord1f glTexCoord1fv_p glTexCoord1fv_s glTexCoord1fv_c glTexCoord1i glTexCoord1iv_p glTexCoord1iv_s glTexCoord1iv_c glTexCoord1s glTexCoord1sv_p glTexCoord1sv_s glTexCoord1sv_c glTexCoord2d glTexCoord2dv_p glTexCoord2dv_s glTexCoord2dv_c glTexCoord2f glTexCoord2fv_p glTexCoord2fv_s glTexCoord2fv_c glTexCoord2i glTexCoord2iv_p glTexCoord2iv_s glTexCoord2iv_c glTexCoord2s glTexCoord2sv_p glTexCoord2sv_s glTexCoord2sv_c glTexCoord3d glTexCoord3dv_p glTexCoord3dv_s glTexCoord3dv_c glTexCoord3f glTexCoord3fv_p glTexCoord3fv_s glTexCoord3fv_c glTexCoord3i glTexCoord3iv_p glTexCoord3iv_s glTexCoord3iv_c glTexCoord3s glTexCoord3sv_p glTexCoord3sv_s glTexCoord3sv_c glTexCoord4d glTexCoord4dv_p glTexCoord4dv_s glTexCoord4dv_c glTexCoord4f glTexCoord4fv_p glTexCoord4fv_s glTexCoord4fv_c glTexCoord4i glTexCoord4iv_p glTexCoord4iv_s glTexCoord4iv_c glTexCoord4s glTexCoord4sv_p glTexCoord4sv_s glTexCoord4sv_c glRasterPos2d glRasterPos2dv_p glRasterPos2dv_s glRasterPos2dv_c glRasterPos2f glRasterPos2fv_p glRasterPos2fv_s glRasterPos2fv_c glRasterPos2i glRasterPos2iv_p glRasterPos2iv_s glRasterPos2iv_c glRasterPos2s glRasterPos2sv_p glRasterPos2sv_s glRasterPos2sv_c glRasterPos3d glRasterPos3dv_p glRasterPos3dv_s glRasterPos3dv_c glRasterPos3f glRasterPos3fv_p glRasterPos3fv_s glRasterPos3fv_c glRasterPos3i glRasterPos3iv_p glRasterPos3iv_s glRasterPos3iv_c glRasterPos3s glRasterPos3sv_p glRasterPos3sv_s glRasterPos3sv_c glRasterPos4d glRasterPos4dv_p glRasterPos4dv_s glRasterPos4dv_c glRasterPos4f glRasterPos4fv_p glRasterPos4fv_s glRasterPos4fv_c glRasterPos4i glRasterPos4iv_p glRasterPos4iv_s glRasterPos4iv_c glRasterPos4s glRasterPos4sv_p glRasterPos4sv_s glRasterPos4sv_c glPolygonOffsetEXT glIsTextureEXT glPrioritizeTexturesEXT_p glBindTextureEXT glDeleteTexturesEXT_p glGenTexturesEXT_p glAreTexturesResidentEXT_p glCopyTexImage1DEXT glCopyTexImage2DEXT glCopyTexSubImage1DEXT glCopyTexSubImage2DEXT glCopyTexSubImage3DEXT glBlendEquationEXT glBlendColorEXT glArrayElementEXT glDrawArraysEXT glVertexPointerEXT_c glVertexPointerEXT_s glVertexPointerEXT_p glNormalPointerEXT_c glNormalPointerEXT_s glNormalPointerEXT_p glColorPointerEXT_c glColorPointerEXT_s glColorPointerEXT_p glIndexPointerEXT_c glIndexPointerEXT_s glIndexPointerEXT_p glTexCoordPointerEXT_c glTexCoordPointerEXT_s glTexCoordPointerEXT_p glEdgeFlagPointerEXT_c glEdgeFlagPointerEXT_s glEdgeFlagPointerEXT_p glWindowPos2iMESA glWindowPos2dMESA glWindowPos3iMESA glWindowPos3dMESA glWindowPos4iMESA glWindowPos4dMESA glResizeBuffersMESA glIsRenderbufferEXT glBindRenderbufferEXT glDeleteRenderbuffersEXT_c glDeleteRenderbuffersEXT_s glDeleteRenderbuffersEXT_p glGenRenderbuffersEXT_c glGenRenderbuffersEXT_s glGenRenderbuffersEXT_p glRenderbufferStorageEXT glGetRenderbufferParameterivEXT_c glGetRenderbufferParameterivEXT_s glIsFramebufferEXT glBindFramebufferEXT glDeleteFramebuffersEXT_c glDeleteFramebuffersEXT_s glDeleteFramebuffersEXT_p glGenFramebuffersEXT_c glGenFramebuffersEXT_s glGenFramebuffersEXT_p glCheckFramebufferStatusEXT glFramebufferTexture1DEXT glFramebufferTexture2DEXT glFramebufferTexture3DEXT glFramebufferRenderbufferEXT glGetFramebufferAttachmentParameterivEXT_c glGetFramebufferAttachmentParameterivEXT_s glGenerateMipmapEXT glVertexAttrib1dARB glVertexAttrib1dvARB_c glVertexAttrib1dvARB_s glVertexAttrib1dvARB_p glVertexAttrib1fARB glVertexAttrib1fvARB_c glVertexAttrib1fvARB_s glVertexAttrib1fvARB_p glVertexAttrib1sARB glVertexAttrib1svARB_c glVertexAttrib1svARB_s glVertexAttrib1svARB_p glVertexAttrib2dARB glVertexAttrib2dvARB_c glVertexAttrib2dvARB_s glVertexAttrib2dvARB_p glVertexAttrib2fARB glVertexAttrib2fvARB_c glVertexAttrib2fvARB_s glVertexAttrib2fvARB_p glVertexAttrib2sARB glVertexAttrib2svARB_c glVertexAttrib2svARB_s glVertexAttrib2svARB_p glVertexAttrib3dARB glVertexAttrib3dvARB_c glVertexAttrib3dvARB_s glVertexAttrib3dvARB_p glVertexAttrib3fARB glVertexAttrib3fvARB_c glVertexAttrib3fvARB_s glVertexAttrib3fvARB_p glVertexAttrib3sARB glVertexAttrib3svARB_c glVertexAttrib3svARB_s glVertexAttrib3svARB_p glVertexAttrib4NbvARB_c glVertexAttrib4NbvARB_s glVertexAttrib4NbvARB_p glVertexAttrib4NivARB_c glVertexAttrib4NivARB_s glVertexAttrib4NivARB_p glVertexAttrib4NsvARB_c glVertexAttrib4NsvARB_s glVertexAttrib4NsvARB_p glVertexAttrib4NubARB glVertexAttrib4NubvARB_c glVertexAttrib4NubvARB_s glVertexAttrib4NubvARB_p glVertexAttrib4NuivARB_c glVertexAttrib4NuivARB_s glVertexAttrib4NuivARB_p glVertexAttrib4NusvARB_c glVertexAttrib4NusvARB_s glVertexAttrib4NusvARB_p glVertexAttrib4bvARB_c glVertexAttrib4bvARB_s glVertexAttrib4bvARB_p glVertexAttrib4dARB glVertexAttrib4dvARB_c glVertexAttrib4dvARB_s glVertexAttrib4dvARB_p glVertexAttrib4fARB glVertexAttrib4fvARB_c glVertexAttrib4fvARB_s glVertexAttrib4fvARB_p glVertexAttrib4ivARB_s glVertexAttrib4ivARB_c glVertexAttrib4ivARB_p glVertexAttrib4sARB glVertexAttrib4svARB_c glVertexAttrib4svARB_s glVertexAttrib4svARB_p glVertexAttrib4ubvARB_c glVertexAttrib4ubvARB_s glVertexAttrib4ubvARB_p glVertexAttrib4uivARB_c glVertexAttrib4uivARB_s glVertexAttrib4uivARB_p glVertexAttrib4usvARB_c glVertexAttrib4usvARB_s glVertexAttrib4usvARB_p glVertexAttribPointerARB_c glVertexAttribPointerARB_p glEnableVertexAttribArrayARB glDisableVertexAttribArrayARB glProgramStringARB_c glProgramStringARB_s glProgramStringARB_p glBindProgramARB glDeleteProgramsARB_c glDeleteProgramsARB_s glDeleteProgramsARB_p glGenProgramsARB_c glGenProgramsARB_s glGenProgramsARB_p glProgramEnvParameter4dARB glProgramEnvParameter4dvARB_c glProgramEnvParameter4dvARB_s glProgramEnvParameter4dvARB_p glProgramEnvParameter4fARB glProgramEnvParameter4fvARB_c glProgramEnvParameter4fvARB_s glProgramEnvParameter4fvARB_p glProgramLocalParameter4dARB glProgramLocalParameter4dvARB_c glProgramLocalParameter4dvARB_s glProgramLocalParameter4dvARB_p glProgramLocalParameter4fARB glProgramLocalParameter4fvARB_c glProgramLocalParameter4fvARB_s glProgramLocalParameter4fvARB_p glGetProgramEnvParameterdvARB_c glGetProgramEnvParameterdvARB_s glGetProgramEnvParameterdvARB_p glGetProgramEnvParameterfvARB_c glGetProgramEnvParameterfvARB_s glGetProgramEnvParameterfvARB_p glGetProgramLocalParameterdvARB_c glGetProgramLocalParameterdvARB_s glGetProgramLocalParameterdvARB_p glGetProgramLocalParameterfvARB_c glGetProgramLocalParameterfvARB_s glGetProgramLocalParameterfvARB_p glGetProgramivARB_c glGetProgramivARB_s glGetProgramivARB_p glGetProgramStringARB_c glGetProgramStringARB_s glGetProgramStringARB_p glGetVertexAttribdvARB_c glGetVertexAttribdvARB_s glGetVertexAttribdvARB_p glGetVertexAttribfvARB_c glGetVertexAttribfvARB_s glGetVertexAttribfvARB_p glGetVertexAttribivARB_c glGetVertexAttribivARB_s glGetVertexAttribivARB_p glGetVertexAttribPointervARB_c glGetVertexAttribPointervARB_p glIsProgramARB glBindBufferARB glDeleteBuffersARB_c glDeleteBuffersARB_s glDeleteBuffersARB_p glGenBuffersARB_c glGenBuffersARB_s glGenBuffersARB_p glIsBufferARB glBufferDataARB_c glBufferDataARB_s glBufferDataARB_p glBufferSubDataARB_c glBufferSubDataARB_s glBufferSubDataARB_p glGetBufferSubDataARB_c glGetBufferSubDataARB_s glGetBufferSubDataARB_p glMapBufferARB_c glMapBufferARB_p glUnmapBufferARB glGetBufferParameterivARB_c glGetBufferParameterivARB_s glGetBufferParameterivARB_p glGetBufferPointervARB_c glGetBufferPointervARB_s glGetBufferPointervARB_p glActiveTextureARB glClientActiveTextureARB glMultiTexCoord1dARB glMultiTexCoord1dvARB_c glMultiTexCoord1dvARB_c glMultiTexCoord1dvARB_c glMultiTexCoord1fARB glMultiTexCoord1fvARB_c glMultiTexCoord1fvARB_c glMultiTexCoord1fvARB_c glMultiTexCoord1iARB glMultiTexCoord1ivARB_c glMultiTexCoord1ivARB_c glMultiTexCoord1ivARB_c glMultiTexCoord1sARB glMultiTexCoord1svARB_c glMultiTexCoord1svARB_c glMultiTexCoord1svARB_c glMultiTexCoord2dARB glMultiTexCoord2dvARB_c glMultiTexCoord2dvARB_c glMultiTexCoord2dvARB_c glMultiTexCoord2fARB glMultiTexCoord2fvARB_c glMultiTexCoord2fvARB_c glMultiTexCoord2fvARB_c glMultiTexCoord2iARB glMultiTexCoord2ivARB_c glMultiTexCoord2ivARB_c glMultiTexCoord2ivARB_c glMultiTexCoord2sARB glMultiTexCoord2svARB_c glMultiTexCoord2svARB_c glMultiTexCoord2svARB_c glMultiTexCoord3dARB glMultiTexCoord3dvARB_c glMultiTexCoord3dvARB_c glMultiTexCoord3dvARB_c glMultiTexCoord3fARB glMultiTexCoord3fvARB_c glMultiTexCoord3fvARB_c glMultiTexCoord3fvARB_c glMultiTexCoord3iARB glMultiTexCoord3ivARB_c glMultiTexCoord3ivARB_c glMultiTexCoord3ivARB_c glMultiTexCoord3sARB glMultiTexCoord3svARB_c glMultiTexCoord3svARB_c glMultiTexCoord3svARB_c glMultiTexCoord4dARB glMultiTexCoord4dvARB_c glMultiTexCoord4dvARB_c glMultiTexCoord4dvARB_c glMultiTexCoord4fARB glMultiTexCoord4fvARB_c glMultiTexCoord4fvARB_c glMultiTexCoord4fvARB_c glMultiTexCoord4iARB glMultiTexCoord4ivARB_c glMultiTexCoord4ivARB_c glMultiTexCoord4ivARB_c glMultiTexCoord4sARB glMultiTexCoord4svARB_c glMultiTexCoord4svARB_c glMultiTexCoord4svARB_c glDeleteObjectARB glGetGLhandleARB glDetachObjectARB glCreateShaderObjectARB glShaderSourceARB_c glShaderSourceARB_p glCompileShaderARB glCreateProgramObjectARB glAttachObjectARB glLinkProgramARB glUseProgramObjectARB glValidateProgramARB glUniform1fARB glUniform2fARB glUniform3fARB glUniform4fARB glUniform1iARB glUniform2iARB glUniform3iARB glUniform4iARB glUniform1fvARB_c glUniform1fvARB_s glUniform1fvARB_p glUniform2fvARB_c glUniform2fvARB_s glUniform2fvARB_p glUniform3fvARB_c glUniform3fvARB_s glUniform3fvARB_p glUniform4fvARB_c glUniform4fvARB_s glUniform4fvARB_p glUniform1ivARB_c glUniform1ivARB_s glUniform1ivARB_p glUniform2ivARB_c glUniform2ivARB_s glUniform2ivARB_p glUniform3ivARB_c glUniform3ivARB_s glUniform3ivARB_p glUniform4ivARB_c glUniform4ivARB_s glUniform4ivARB_p glUniformMatrix2fvARB_c glUniformMatrix2fvARB_s glUniformMatrix2fvARB_p glUniformMatrix3fvARB_c glUniformMatrix3fvARB_s glUniformMatrix3fvARB_p glUniformMatrix4fvARB_c glUniformMatrix4fvARB_s glUniformMatrix4fvARB_p glGetObjectParameterfvARB_c glGetObjectParameterfvARB_s glGetObjectParameterfvARB_p glGetObjectParameterivARB_c glGetObjectParameterivARB_s glGetObjectParameterivARB_p glGetInfoLogARB_c glGetInfoLogARB_p glGetAttachedObjectsARB_c glGetAttachedObjectsARB_s glGetAttachedObjectsARB_p glGetUniformLocationARB_c glGetUniformLocationARB_p glGetActiveUniformARB_c glGetActiveUniformARB_s glGetActiveUniformARB_p glGetUniformfvARB_c glGetUniformfvARB_p glGetUniformivARB_c glGetUniformivARB_p glGetShaderSourceARB_c glGetShaderSourceARB_p glBindAttribLocationARB glGetActiveAttribARB_c glGetActiveAttribARB_s glGetActiveAttribARB_p glGetAttribLocationARB_c glGetAttribLocationARB_p glPointParameterfARB glPointParameterfvARB_c glPointParameterfvARB_s glPointParameterfvARB_p glSampleCoverageARB glClampColorARB glpHasGLUT glpCheckExtension glpFullScreen glpRestoreScreen ); # gl_func @glu_func = qw( gluBeginCurve gluBeginPolygon gluBeginSurface gluBeginTrim gluBuild1DMipmaps_c gluBuild1DMipmaps_s gluBuild2DMipmaps_c gluBuild2DMipmaps_s gluCylinder gluDeleteNurbsRenderer gluDeleteQuadric gluDeleteTess gluDisk gluEndCurve gluEndPolygon gluEndSurface gluEndTrim gluErrorString gluGetNurbsProperty_p gluGetString gluGetTessProperty_p gluLoadSamplingMatrices_p gluLookAt gluNewNurbsRenderer gluNewQuadric gluNewTess gluNextContour gluNurbsCurve_c gluNurbsSurface_c gluOrtho2D gluPartialDisk gluPerspective gluPickMatrix_p gluProject_p gluPwlCurve_c gluQuadricDrawStyle gluQuadricNormals gluQuadricOrientation gluQuadricTexture gluScaleImage_s gluSphere gluTessBeginContour gluTessBeginPolygon gluTessCallback gluTessEndContour gluTessEndPolygon gluTessNormal gluTessProperty gluTessVertex_p gluUnProject_p ); @glut_func = qw( done_glutInit glutAddMenuEntry glutAddSubMenu glutAttachMenu glutBitmapCharacter glutBitmapHeight glutBitmapLength glutBitmapString glutBitmapWidth glutButtonBoxFunc glutChangeToMenuEntry glutChangeToSubMenu glutCloseFunc glutCopyColormap glutCreateMenu glutCreateSubWindow glutCreateWindow glutDestroyMenu glutDestroyWindow glutDetachMenu glutDeviceGet glutDialsFunc glutDisplayFunc glutEnterGameMode glutEntryFunc glutEstablishOverlay glutExtensionSupported glutForceJoystickFunc glutFullScreen glutGameModeGet glutGameModeString glutGet glutGetColor glutGetMenu glutGetModifiers glutGetWindow glutHideOverlay glutHideWindow glutIconifyWindow glutIdleFunc glutIgnoreKeyRepeat glutInit glutInitDisplayMode glutInitDisplayString glutInitWindowPosition glutInitWindowSize glutKeyboardFunc glutKeyboardUpFunc glutLayerGet glutLeaveGameMode glutLeaveMainLoop glutMainLoop glutMainLoopEvent glutMenuDestroyFunc glutMenuStateFunc glutMenuStatusFunc glutMotionFunc glutMouseFunc glutMouseWheelFunc glutOverlayDisplayFunc glutPassiveMotionFunc glutPopWindow glutPositionWindow glutPostOverlayRedisplay glutPostRedisplay glutPostWindowOverlayRedisplay glutPostWindowRedisplay glutPushWindow glutRemoveMenuItem glutRemoveOverlay glutReportErrors glutReshapeFunc glutReshapeWindow glutSetColor glutSetCursor glutSetIconTitle glutSetKeyRepeat glutSetMenu glutSetOption glutSetWindow glutSetWindowTitle glutShowOverlay glutShowWindow glutSolidCone glutSolidCube glutSolidCylinder glutSolidDodecahedron glutSolidIcosahedron glutSolidOctahedron glutSolidRhombicDodecahedron glutSolidSphere glutSolidTeapot glutSolidTetrahedron glutSolidTorus glutSpaceballButtonFunc glutSpaceballMotionFunc glutSpaceballRotateFunc glutSpecialFunc glutSpecialUpFunc glutStrokeCharacter glutStrokeHeight glutStrokeLength glutStrokeString glutStrokeWidth glutSwapBuffers glutTabletButtonFunc glutTabletMotionFunc glutTimerFunc glutUseLayer glutVisibilityFunc glutWarpPointer glutWindowStatusFunc glutWireCone glutWireCube glutWireCylinder glutWireDodecahedron glutWireIcosahedron glutWireOctahedron glutWireRhombicDodecahedron glutWireSphere glutWireTeapot glutWireTetrahedron glutWireTorus ); ##------------------------------------------------------------------------ ## FreeGLUT not implemented yet -chm 2009-08-31 ##------------------------------------------------------------------------ ## ## Need to determine desired/useful interface ## glutGetProcAddress (const char *procName) ## ## Need to add pollInterval argument to glutJoystickFunc() call ## glutJoystickFunc (void(*callback)(unsigned int buttons, int xaxis, int yaxis, int zaxis), int pollInterval) ## ##------------------------------------------------------------------------ @glx_func = qw( glXSwapBuffers XPending glpXNextEvent glpXQueryPointer ); @gl_const = qw( GL_FALSE GL_TRUE GL_BYTE GL_UNSIGNED_BYTE GL_SHORT GL_UNSIGNED_SHORT GL_INT GL_UNSIGNED_INT GL_FLOAT GL_DOUBLE GL_2_BYTES GL_3_BYTES GL_4_BYTES GL_LINES GL_POINTS GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON GL_EDGE_FLAG 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 GL_MATRIX_MODE GL_MODELVIEW GL_PROJECTION GL_TEXTURE GL_POINT_SMOOTH GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_LINE_SMOOTH GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_POINT GL_LINE GL_FILL GL_CCW GL_CW GL_FRONT GL_BACK GL_CULL_FACE GL_CULL_FACE_MODE GL_POLYGON_SMOOTH GL_POLYGON_STIPPLE GL_FRONT_FACE GL_POLYGON_MODE GL_COMPILE GL_COMPILE_AND_EXECUTE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_NEVER GL_LESS GL_GEQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_EQUAL GL_ALWAYS GL_DEPTH_TEST GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_WRITEMASK GL_DEPTH_COMPONENT GL_LIGHTING GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_SHININESS GL_EMISSION GL_POSITION GL_SPOT_DIRECTION GL_AMBIENT_AND_DIFFUSE GL_COLOR_INDEXES GL_LIGHT_MODEL_TWO_SIDE GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_AMBIENT GL_FRONT_AND_BACK GL_SHADE_MODEL GL_FLAT GL_SMOOTH GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_NORMALIZE GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_ACCUM_RED_BITS GL_ACCUM_GREEN_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_ALPHA_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM GL_ADD GL_LOAD GL_MULT GL_RETURN GL_ALPHA_TEST GL_ALPHA_TEST_REF GL_ALPHA_TEST_FUNC GL_BLEND GL_BLEND_SRC GL_BLEND_DST GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_SRC_ALPHA_SATURATE GL_CONSTANT_COLOR GL_ONE_MINUS_CONSTANT_COLOR GL_CONSTANT_ALPHA GL_ONE_MINUS_CONSTANT_ALPHA GL_FEEDBACK GL_RENDER GL_SELECT GL_2D GL_3D GL_3D_COLOR GL_3D_COLOR_TEXTURE GL_4D_COLOR_TEXTURE GL_POINT_TOKEN GL_LINE_TOKEN GL_LINE_RESET_TOKEN GL_POLYGON_TOKEN GL_BITMAP_TOKEN GL_DRAW_PIXEL_TOKEN GL_COPY_PIXEL_TOKEN GL_PASS_THROUGH_TOKEN GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_MODE GL_FOG_DENSITY GL_FOG_COLOR GL_FOG_INDEX GL_FOG_START GL_FOG_END GL_LINEAR GL_EXP GL_EXP2 GL_LOGIC_OP GL_LOGIC_OP_MODE GL_CLEAR GL_SET GL_COPY GL_COPY_INVERTED GL_NOOP GL_INVERT GL_AND GL_NAND GL_OR GL_NOR GL_XOR GL_EQUIV GL_AND_REVERSE GL_AND_INVERTED GL_OR_REVERSE GL_OR_INVERTED GL_STENCIL_TEST GL_STENCIL_WRITEMASK GL_STENCIL_BITS GL_STENCIL_FUNC GL_STENCIL_VALUE_MASK GL_STENCIL_REF GL_STENCIL_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_CLEAR_VALUE GL_STENCIL_INDEX GL_KEEP GL_REPLACE GL_INCR GL_DECR GL_NONE GL_LEFT GL_RIGHT GL_FRONT GL_BACK GL_FRONT_AND_BACK GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_AUX0 GL_AUX1 GL_AUX2 GL_AUX3 GL_COLOR_INDEX GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_ALPHA_BITS GL_RED_BITS GL_GREEN_BITS GL_BLUE_BITS GL_INDEX_BITS GL_SUBPIXEL_BITS GL_AUX_BUFFERS GL_READ_BUFFER GL_DRAW_BUFFER GL_DOUBLEBUFFER GL_STEREO GL_BITMAP GL_COLOR GL_DEPTH GL_STENCIL GL_DITHER GL_RGB GL_RGBA GL_MAX_LIST_NESTING GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_CLIP_PLANES GL_MAX_TEXTURE_SIZE GL_MAX_PIXEL_MAP_TABLE GL_MAX_VIEWPORT_DIMS GL_ATTRIB_STACK_DEPTH GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_CLEAR_VALUE GL_COLOR_WRITEMASK GL_CURRENT_INDEX GL_CURRENT_COLOR GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_TEXTURE_COORDS GL_INDEX_CLEAR_VALUE GL_INDEX_MODE GL_INDEX_WRITEMASK GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_RENDER_MODE GL_RGBA_MODE GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_VIEWPORT GL_AUTO_NORMAL GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS 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_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS 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 GL_COEFF GL_DOMAIN GL_ORDER GL_FOG_HINT GL_LINE_SMOOTH_HINT GL_PERSPECTIVE_CORRECTION_HINT GL_POINT_SMOOTH_HINT GL_POLYGON_SMOOTH_HINT GL_DONT_CARE GL_FASTEST GL_NICEST GL_SCISSOR_TEST GL_SCISSOR_BOX 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 GL_PIXEL_MAP_S_TO_S_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_S_TO_S GL_PIXEL_MAP_I_TO_I 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 GL_PACK_ALIGNMENT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_UNPACK_ALIGNMENT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_ZOOM_X GL_ZOOM_Y GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_ENV_COLOR GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_GEN_MODE GL_TEXTURE_BORDER_COLOR GL_TEXTURE_WIDTH GL_TEXTURE_HEIGHT GL_TEXTURE_BORDER GL_TEXTURE_COMPONENTS 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_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR GL_OBJECT_LINEAR GL_OBJECT_PLANE GL_EYE_LINEAR GL_EYE_PLANE GL_SPHERE_MAP GL_DECAL GL_MODULATE GL_NEAREST GL_REPEAT GL_CLAMP GL_S GL_T GL_R GL_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_Q GL_VENDOR GL_RENDERER GL_VERSION GL_EXTENSIONS GL_INVALID_VALUE GL_INVALID_ENUM GL_INVALID_OPERATION GL_STACK_OVERFLOW GL_STACK_UNDERFLOW GL_OUT_OF_MEMORY GL_TEXTURE_RESIDENT GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_PRIORITY GL_PROXY_TEXTURE_1D GL_PROXY_TEXTURE_2D GL_FEEDBACK_BUFFER_POINTER 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_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 GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_UNITS GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_FILL GL_INDEX_LOGIC_OP GL_COLOR_LOGIC_OP GL_ALPHA4 GL_ALPHA8 GL_ALPHA12 GL_ALPHA16 GL_LUMINANCE4 GL_LUMINANCE8 GL_LUMINANCE12 GL_LUMINANCE16 GL_LUMINANCE4_ALPHA4 GL_LUMINANCE6_ALPHA2 GL_LUMINANCE8_ALPHA8 GL_LUMINANCE12_ALPHA4 GL_LUMINANCE12_ALPHA12 GL_LUMINANCE16_ALPHA16 GL_INTENSITY GL_INTENSITY4 GL_INTENSITY8 GL_INTENSITY12 GL_INTENSITY16 GL_R3_G3_B2 GL_RGB4 GL_RGB5 GL_RGB8 GL_RGB10 GL_RGB12 GL_RGB16 GL_RGBA2 GL_RGBA4 GL_RGB5_A1 GL_RGBA8 GL_RGB10_A2 GL_RGBA12 GL_RGBA16 GL_PACK_SKIP_IMAGES GL_PACK_IMAGE_HEIGHT GL_UNPACK_SKIP_IMAGES GL_UNPACK_IMAGE_HEIGHT GL_TEXTURE_3D GL_PROXY_TEXTURE_3D GL_TEXTURE_DEPTH GL_TEXTURE_WRAP_R GL_MAX_3D_TEXTURE_SIZE GL_TEXTURE_BINDING_3D GL_BGR GL_BGRA GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_BYTE_2_3_3_REV GL_UNSIGNED_SHORT_5_6_5 GL_UNSIGNED_SHORT_5_6_5_REV GL_UNSIGNED_SHORT_4_4_4_4 GL_UNSIGNED_SHORT_4_4_4_4_REV GL_UNSIGNED_SHORT_5_5_5_1 GL_UNSIGNED_SHORT_1_5_5_5_REV GL_UNSIGNED_INT_8_8_8_8 GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_INT_10_10_10_2 GL_UNSIGNED_INT_2_10_10_10_REV GL_RESCALE_NORMAL GL_LIGHT_MODEL_COLOR_CONTROL GL_SINGLE_COLOR GL_SEPARATE_SPECULAR_COLOR GL_CLAMP_TO_EDGE GL_TEXTURE_MIN_LOD GL_TEXTURE_MAX_LOD GL_TEXTURE_BASE_LEVEL GL_TEXTURE_MAX_LEVEL GL_MAX_ELEMENTS_VERTICES GL_MAX_ELEMENTS_INDICES GL_NO_ERROR GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_SELECTION_BUFFER_POINTER GL_SELECTION_BUFFER_SIZE GL_TEXTURE_INTERNAL_FORMAT GL_BLEND_COLOR GL_FUNC_ADD GL_MIN GL_MAX GL_BLEND_EQUATION GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_COLOR_MATRIX GL_COLOR_MATRIX_STACK_DEPTH GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_POST_COLOR_MATRIX_RED_SCALE GL_POST_COLOR_MATRIX_GREEN_SCALE GL_POST_COLOR_MATRIX_BLUE_SCALE GL_POST_COLOR_MATRIX_ALPHA_SCALE GL_POST_COLOR_MATRIX_RED_BIAS GL_POST_COLOR_MATRIX_GREEN_BIAS GL_POST_COLOR_MATRIX_BLUE_BIAS GL_POST_COLOR_MATRIX_ALPHA_BIAS GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_REDUCE GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT GL_POST_CONVOLUTION_RED_SCALE GL_POST_CONVOLUTION_GREEN_SCALE GL_POST_CONVOLUTION_BLUE_SCALE GL_POST_CONVOLUTION_ALPHA_SCALE GL_POST_CONVOLUTION_RED_BIAS GL_POST_CONVOLUTION_GREEN_BIAS GL_POST_CONVOLUTION_BLUE_BIAS GL_POST_CONVOLUTION_ALPHA_BIAS GL_CONSTANT_BORDER GL_REPLICATE_BORDER GL_CONVOLUTION_BORDER_COLOR GL_HISTOGRAM GL_PROXY_HISTOGRAM GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK GL_MINMAX GL_MINMAX_FORMAT GL_MINMAX_SINK GL_TABLE_TOO_LARGE GL_SMOOTH_POINT_SIZE_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_ALIASED_POINT_SIZE_RANGE GL_ALIASED_LINE_WIDTH_RANGE GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB GL_ACTIVE_TEXTURE_ARB GL_CLIENT_ACTIVE_TEXTURE_ARB GL_MAX_TEXTURE_UNITS_ARB GL_POLYGON_OFFSET_EXT GL_POLYGON_OFFSET_FACTOR_EXT GL_POLYGON_OFFSET_BIAS_EXT GL_ALPHA4_EXT GL_ALPHA8_EXT GL_ALPHA12_EXT GL_ALPHA16_EXT GL_LUMINANCE4_EXT GL_LUMINANCE8_EXT GL_LUMINANCE12_EXT GL_LUMINANCE16_EXT GL_LUMINANCE4_ALPHA4_EXT GL_LUMINANCE6_ALPHA2_EXT GL_LUMINANCE8_ALPHA8_EXT GL_LUMINANCE12_ALPHA4_EXT GL_LUMINANCE12_ALPHA12_EXT GL_LUMINANCE16_ALPHA16_EXT GL_INTENSITY_EXT GL_INTENSITY4_EXT GL_INTENSITY8_EXT GL_INTENSITY12_EXT GL_INTENSITY16_EXT GL_R3_G3_B2_EXT GL_RGB4_EXT GL_RGB5_EXT GL_RGB8_EXT GL_RGB10_EXT GL_RGB12_EXT GL_RGB16_EXT GL_RGBA2_EXT GL_RGBA4_EXT GL_RGB5_A1_EXT GL_RGBA8_EXT GL_RGB10_A2_EXT GL_RGBA12_EXT GL_RGBA16_EXT GL_TEXTURE_RED_SIZE_EXT GL_TEXTURE_GREEN_SIZE_EXT GL_TEXTURE_BLUE_SIZE_EXT GL_TEXTURE_ALPHA_SIZE_EXT GL_TEXTURE_LUMINANCE_SIZE_EXT GL_TEXTURE_INTENSITY_SIZE_EXT GL_REPLACE_EXT GL_PROXY_TEXTURE_1D GL_PROXY_TEXTURE_2D GL_TEXTURE_TOO_LARGE_EXT GL_CMYK_EXT GL_CMYKA_EXT GL_PACK_CMYK_HINT_EXT GL_UNPACK_CMYK_HINT_EXT GL_CMYK GL_CMYKA GL_PACK_CMYK_HINT GL_UNPACK_CMYK_HINT GL_TEXTURE_PRIORITY_EXT GL_TEXTURE_RESIDENT_EXT GL_TEXTURE_1D_BINDING_EXT GL_TEXTURE_2D_BINDING_EXT GL_TEXTURE_3D_BINDING_EXT GL_VERTEX_ARRAY_EXT GL_NORMAL_ARRAY_EXT GL_COLOR_ARRAY_EXT GL_INDEX_ARRAY_EXT GL_TEXTURE_COORD_ARRAY_EXT GL_EDGE_FLAG_ARRAY_EXT GL_VERTEX_ARRAY_SIZE_EXT GL_VERTEX_ARRAY_TYPE_EXT GL_VERTEX_ARRAY_STRIDE_EXT GL_NORMAL_ARRAY_TYPE_EXT GL_NORMAL_ARRAY_STRIDE_EXT GL_COLOR_ARRAY_SIZE_EXT GL_COLOR_ARRAY_TYPE_EXT GL_COLOR_ARRAY_STRIDE_EXT GL_INDEX_ARRAY_TYPE_EXT GL_INDEX_ARRAY_STRIDE_EXT GL_TEXTURE_COORD_ARRAY_SIZE_EXT GL_TEXTURE_COORD_ARRAY_TYPE_EXT GL_TEXTURE_COORD_ARRAY_STRIDE_EXT GL_EDGE_FLAG_ARRAY_STRIDE_EXT GL_VERTEX_ARRAY_POINTER_EXT GL_NORMAL_ARRAY_POINTER_EXT GL_COLOR_ARRAY_POINTER_EXT GL_INDEX_ARRAY_POINTER_EXT GL_TEXTURE_COORD_ARRAY_POINTER_EXT GL_EDGE_FLAG_ARRAY_POINTER_EXT GL_VERTEX_ARRAY_COUNT_EXT GL_NORMAL_ARRAY_COUNT_EXT GL_COLOR_ARRAY_COUNT_EXT GL_INDEX_ARRAY_COUNT_EXT GL_TEXTURE_COORD_ARRAY_COUNT_EXT GL_EDGE_FLAG_ARRAY_COUNT_EXT GL_MISC_BIT_EXT GL_CONSTANT_COLOR_EXT GL_ONE_MINUS_CONSTANT_COLOR_EXT GL_CONSTANT_ALPHA_EXT GL_ONE_MINUS_CONSTANT_ALPHA_EXT GL_BLEND_EQUATION_EXT GL_MIN_EXT GL_MAX_EXT GL_FUNC_ADD_EXT GL_FUNC_SUBTRACT_EXT GL_FUNC_REVERSE_SUBTRACT_EXT GL_BLEND_COLOR_EXT GL_ABGR_EXT GL_VOLUME_CLIPPING_HINT_EXT GL_TEXTURE_PRIORITY_EXT GL_TEXTURE_RESIDENT_EXT GL_TEXTURE_1D_BINDING_EXT GL_TEXTURE_2D_BINDING_EXT GL_PACK_SKIP_IMAGES_EXT GL_PACK_IMAGE_HEIGHT_EXT GL_UNPACK_SKIP_IMAGES_EXT GL_UNPACK_IMAGE_HEIGHT_EXT GL_TEXTURE_3D_EXT GL_PROXY_TEXTURE_3D_EXT GL_TEXTURE_DEPTH_EXT GL_TEXTURE_WRAP_R_EXT GL_MAX_3D_TEXTURE_SIZE_EXT GL_TEXTURE_3D_BINDING_EXT GL_TABLE_TOO_LARGE_EXT GL_COLOR_TABLE_FORMAT_EXT GL_COLOR_TABLE_WIDTH_EXT GL_COLOR_TABLE_RED_SIZE_EXT GL_COLOR_TABLE_GREEN_SIZE_EXT GL_COLOR_TABLE_BLUE_SIZE_EXT GL_COLOR_TABLE_ALPHA_SIZE_EXT GL_COLOR_TABLE_LUMINANCE_SIZE_EXT GL_COLOR_TABLE_INTENSITY_SIZE_EXT GL_TEXTURE_INDEX_SIZE_EXT GL_COLOR_INDEX1_EXT GL_COLOR_INDEX2_EXT GL_COLOR_INDEX4_EXT GL_COLOR_INDEX8_EXT GL_COLOR_INDEX12_EXT GL_COLOR_INDEX16_EXT GL_SHARED_TEXTURE_PALETTE_EXT GL_POINT_SIZE_MIN_EXT GL_POINT_SIZE_MAX_EXT GL_POINT_FADE_THRESHOLD_SIZE_EXT GL_DISTANCE_ATTENUATION_EXT GL_COMBINE_EXT GL_COMBINE_RGB_EXT GL_COMBINE_ALPHA_EXT GL_RGB_SCALE_EXT GL_ADD_SIGNED_EXT GL_INTERPOLATE_EXT GL_CONSTANT_EXT GL_PRIMARY_COLOR_EXT GL_PREVIOUS_EXT GL_SOURCE0_RGB_EXT GL_SOURCE1_RGB_EXT GL_SOURCE2_RGB_EXT GL_SOURCE0_ALPHA_EXT GL_SOURCE1_ALPHA_EXT GL_SOURCE2_ALPHA_EXT GL_OPERAND0_RGB_EXT GL_OPERAND1_RGB_EXT GL_OPERAND2_RGB_EXT GL_OPERAND0_ALPHA_EXT GL_OPERAND1_ALPHA_EXT GL_OPERAND2_ALPHA_EXT GL_GLEXT_VERSION GL_SMOOTH_POINT_SIZE_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_ALIASED_POINT_SIZE_RANGE GL_ALIASED_LINE_WIDTH_RANGE GL_BLEND_COLOR GL_FUNC_ADD GL_MIN GL_MAX GL_BLEND_EQUATION GL_FUNC_SUBTRACT GL_FUNC_REVERSE_SUBTRACT GL_CONVOLUTION_1D GL_CONVOLUTION_2D GL_SEPARABLE_2D GL_CONVOLUTION_BORDER_MODE GL_CONVOLUTION_FILTER_SCALE GL_CONVOLUTION_FILTER_BIAS GL_REDUCE GL_CONVOLUTION_FORMAT GL_CONVOLUTION_WIDTH GL_CONVOLUTION_HEIGHT GL_MAX_CONVOLUTION_WIDTH GL_MAX_CONVOLUTION_HEIGHT GL_POST_CONVOLUTION_RED_SCALE GL_POST_CONVOLUTION_GREEN_SCALE GL_POST_CONVOLUTION_BLUE_SCALE GL_POST_CONVOLUTION_ALPHA_SCALE GL_POST_CONVOLUTION_RED_BIAS GL_POST_CONVOLUTION_GREEN_BIAS GL_POST_CONVOLUTION_BLUE_BIAS GL_POST_CONVOLUTION_ALPHA_BIAS GL_HISTOGRAM GL_PROXY_HISTOGRAM GL_HISTOGRAM_WIDTH GL_HISTOGRAM_FORMAT GL_HISTOGRAM_RED_SIZE GL_HISTOGRAM_GREEN_SIZE GL_HISTOGRAM_BLUE_SIZE GL_HISTOGRAM_ALPHA_SIZE GL_HISTOGRAM_LUMINANCE_SIZE GL_HISTOGRAM_SINK GL_MINMAX GL_MINMAX_FORMAT GL_MINMAX_SINK GL_TABLE_TOO_LARGE GL_COLOR_MATRIX GL_COLOR_MATRIX_STACK_DEPTH GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_POST_COLOR_MATRIX_RED_SCALE GL_POST_COLOR_MATRIX_GREEN_SCALE GL_POST_COLOR_MATRIX_BLUE_SCALE GL_POST_COLOR_MATRIX_ALPHA_SCALE GL_POST_COLOR_MATRIX_RED_BIAS GL_POST_COLOR_MATRIX_GREEN_BIAS GL_POST_COLOR_MATRIX_BLUE_BIAS GL_POST_COLOR_MATRIX_ALPHA_BIAS GL_COLOR_TABLE GL_POST_CONVOLUTION_COLOR_TABLE GL_POST_COLOR_MATRIX_COLOR_TABLE GL_PROXY_COLOR_TABLE GL_PROXY_POST_CONVOLUTION_COLOR_TABLE GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE GL_COLOR_TABLE_SCALE GL_COLOR_TABLE_BIAS GL_COLOR_TABLE_FORMAT GL_COLOR_TABLE_WIDTH GL_COLOR_TABLE_RED_SIZE GL_COLOR_TABLE_GREEN_SIZE GL_COLOR_TABLE_BLUE_SIZE GL_COLOR_TABLE_ALPHA_SIZE GL_COLOR_TABLE_LUMINANCE_SIZE GL_COLOR_TABLE_INTENSITY_SIZE GL_CONSTANT_BORDER GL_REPLICATE_BORDER GL_CONVOLUTION_BORDER_COLOR GL_TEXTURE0 GL_TEXTURE1 GL_TEXTURE2 GL_TEXTURE3 GL_TEXTURE4 GL_TEXTURE5 GL_TEXTURE6 GL_TEXTURE7 GL_TEXTURE8 GL_TEXTURE9 GL_TEXTURE10 GL_TEXTURE11 GL_TEXTURE12 GL_TEXTURE13 GL_TEXTURE14 GL_TEXTURE15 GL_TEXTURE16 GL_TEXTURE17 GL_TEXTURE18 GL_TEXTURE19 GL_TEXTURE20 GL_TEXTURE21 GL_TEXTURE22 GL_TEXTURE23 GL_TEXTURE24 GL_TEXTURE25 GL_TEXTURE26 GL_TEXTURE27 GL_TEXTURE28 GL_TEXTURE29 GL_TEXTURE30 GL_TEXTURE31 GL_ACTIVE_TEXTURE GL_CLIENT_ACTIVE_TEXTURE GL_MAX_TEXTURE_UNITS GL_TRANSPOSE_MODELVIEW_MATRIX GL_TRANSPOSE_PROJECTION_MATRIX GL_TRANSPOSE_TEXTURE_MATRIX GL_TRANSPOSE_COLOR_MATRIX GL_MULTISAMPLE GL_SAMPLE_ALPHA_TO_COVERAGE GL_SAMPLE_ALPHA_TO_ONE GL_SAMPLE_COVERAGE GL_SAMPLE_BUFFERS GL_SAMPLES GL_SAMPLE_COVERAGE_VALUE GL_SAMPLE_COVERAGE_INVERT GL_MULTISAMPLE_BIT GL_NORMAL_MAP GL_REFLECTION_MAP GL_TEXTURE_CUBE_MAP GL_TEXTURE_BINDING_CUBE_MAP GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_PROXY_TEXTURE_CUBE_MAP GL_MAX_CUBE_MAP_TEXTURE_SIZE GL_COMPRESSED_ALPHA GL_COMPRESSED_LUMINANCE GL_COMPRESSED_LUMINANCE_ALPHA GL_COMPRESSED_INTENSITY GL_COMPRESSED_RGB GL_COMPRESSED_RGBA GL_TEXTURE_COMPRESSION_HINT GL_TEXTURE_COMPRESSED_IMAGE_SIZE GL_TEXTURE_COMPRESSED GL_NUM_COMPRESSED_TEXTURE_FORMATS GL_COMPRESSED_TEXTURE_FORMATS GL_CLAMP_TO_BORDER GL_COMBINE GL_COMBINE_RGB GL_COMBINE_ALPHA GL_SOURCE0_RGB GL_SOURCE1_RGB GL_SOURCE2_RGB GL_SOURCE0_ALPHA GL_SOURCE1_ALPHA GL_SOURCE2_ALPHA GL_OPERAND0_RGB GL_OPERAND1_RGB GL_OPERAND2_RGB GL_OPERAND0_ALPHA GL_OPERAND1_ALPHA GL_OPERAND2_ALPHA GL_RGB_SCALE GL_ADD_SIGNED GL_INTERPOLATE GL_SUBTRACT GL_CONSTANT GL_PRIMARY_COLOR GL_PREVIOUS GL_DOT3_RGB GL_DOT3_RGBA GL_BLEND_DST_RGB GL_BLEND_SRC_RGB GL_BLEND_DST_ALPHA GL_BLEND_SRC_ALPHA GL_POINT_SIZE_MIN GL_POINT_SIZE_MAX GL_POINT_FADE_THRESHOLD_SIZE GL_POINT_DISTANCE_ATTENUATION GL_GENERATE_MIPMAP GL_GENERATE_MIPMAP_HINT GL_DEPTH_COMPONENT16 GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT32 GL_MIRRORED_REPEAT GL_FOG_COORDINATE_SOURCE GL_FOG_COORDINATE GL_FRAGMENT_DEPTH GL_CURRENT_FOG_COORDINATE GL_FOG_COORDINATE_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY GL_COLOR_SUM GL_CURRENT_SECONDARY_COLOR GL_SECONDARY_COLOR_ARRAY_SIZE GL_SECONDARY_COLOR_ARRAY_TYPE GL_SECONDARY_COLOR_ARRAY_STRIDE GL_SECONDARY_COLOR_ARRAY_POINTER GL_SECONDARY_COLOR_ARRAY GL_MAX_TEXTURE_LOD_BIAS GL_TEXTURE_FILTER_CONTROL GL_TEXTURE_LOD_BIAS GL_INCR_WRAP GL_DECR_WRAP GL_TEXTURE_DEPTH_SIZE GL_DEPTH_TEXTURE_MODE GL_TEXTURE_COMPARE_MODE GL_TEXTURE_COMPARE_FUNC GL_COMPARE_R_TO_TEXTURE GL_BUFFER_SIZE GL_BUFFER_USAGE GL_QUERY_COUNTER_BITS GL_CURRENT_QUERY GL_QUERY_RESULT GL_QUERY_RESULT_AVAILABLE GL_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER GL_ARRAY_BUFFER_BINDING GL_ELEMENT_ARRAY_BUFFER_BINDING GL_VERTEX_ARRAY_BUFFER_BINDING GL_NORMAL_ARRAY_BUFFER_BINDING GL_COLOR_ARRAY_BUFFER_BINDING GL_INDEX_ARRAY_BUFFER_BINDING GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING GL_EDGE_FLAG_ARRAY_BUFFER_BINDING GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING GL_WEIGHT_ARRAY_BUFFER_BINDING GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING GL_READ_ONLY GL_WRITE_ONLY GL_READ_WRITE GL_BUFFER_ACCESS GL_BUFFER_MAPPED GL_BUFFER_MAP_POINTER GL_STREAM_DRAW GL_STREAM_READ GL_STREAM_COPY GL_STATIC_DRAW GL_STATIC_READ GL_STATIC_COPY GL_DYNAMIC_DRAW GL_DYNAMIC_READ GL_DYNAMIC_COPY GL_SAMPLES_PASSED GL_FOG_COORD_SRC GL_FOG_COORD GL_CURRENT_FOG_COORD GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORD_ARRAY GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_SRC0_RGB GL_SRC1_RGB GL_SRC2_RGB GL_SRC0_ALPHA GL_SRC1_ALPHA GL_SRC2_ALPHA GL_BLEND_EQUATION_RGB GL_VERTEX_ATTRIB_ARRAY_ENABLED GL_VERTEX_ATTRIB_ARRAY_SIZE GL_VERTEX_ATTRIB_ARRAY_STRIDE GL_VERTEX_ATTRIB_ARRAY_TYPE GL_CURRENT_VERTEX_ATTRIB GL_VERTEX_PROGRAM_POINT_SIZE GL_VERTEX_PROGRAM_TWO_SIDE GL_VERTEX_ATTRIB_ARRAY_POINTER GL_STENCIL_BACK_FUNC GL_STENCIL_BACK_FAIL GL_STENCIL_BACK_PASS_DEPTH_FAIL GL_STENCIL_BACK_PASS_DEPTH_PASS GL_MAX_DRAW_BUFFERS GL_DRAW_BUFFER0 GL_DRAW_BUFFER1 GL_DRAW_BUFFER2 GL_DRAW_BUFFER3 GL_DRAW_BUFFER4 GL_DRAW_BUFFER5 GL_DRAW_BUFFER6 GL_DRAW_BUFFER7 GL_DRAW_BUFFER8 GL_DRAW_BUFFER9 GL_DRAW_BUFFER10 GL_DRAW_BUFFER11 GL_DRAW_BUFFER12 GL_DRAW_BUFFER13 GL_DRAW_BUFFER14 GL_DRAW_BUFFER15 GL_BLEND_EQUATION_ALPHA GL_POINT_SPRITE GL_COORD_REPLACE GL_MAX_VERTEX_ATTRIBS GL_VERTEX_ATTRIB_ARRAY_NORMALIZED GL_MAX_TEXTURE_COORDS GL_MAX_TEXTURE_IMAGE_UNITS GL_FRAGMENT_SHADER GL_VERTEX_SHADER GL_MAX_FRAGMENT_UNIFORM_COMPONENTS GL_MAX_VERTEX_UNIFORM_COMPONENTS GL_MAX_VARYING_FLOATS GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS GL_SHADER_TYPE GL_FLOAT_VEC2 GL_FLOAT_VEC3 GL_FLOAT_VEC4 GL_INT_VEC2 GL_INT_VEC3 GL_INT_VEC4 GL_BOOL GL_BOOL_VEC2 GL_BOOL_VEC3 GL_BOOL_VEC4 GL_FLOAT_MAT2 GL_FLOAT_MAT3 GL_FLOAT_MAT4 GL_SAMPLER_1D GL_SAMPLER_2D GL_SAMPLER_3D GL_SAMPLER_CUBE GL_SAMPLER_1D_SHADOW GL_SAMPLER_2D_SHADOW GL_DELETE_STATUS GL_COMPILE_STATUS GL_LINK_STATUS GL_VALIDATE_STATUS GL_INFO_LOG_LENGTH GL_ATTACHED_SHADERS GL_ACTIVE_UNIFORMS GL_ACTIVE_UNIFORM_MAX_LENGTH GL_SHADER_SOURCE_LENGTH GL_ACTIVE_ATTRIBUTES GL_ACTIVE_ATTRIBUTE_MAX_LENGTH GL_FRAGMENT_SHADER_DERIVATIVE_HINT GL_SHADING_LANGUAGE_VERSION GL_CURRENT_PROGRAM GL_POINT_SPRITE_COORD_ORIGIN GL_LOWER_LEFT GL_UPPER_LEFT GL_STENCIL_BACK_REF GL_STENCIL_BACK_VALUE_MASK GL_STENCIL_BACK_WRITEMASK GL_TEXTURE0_ARB GL_TEXTURE1_ARB GL_TEXTURE2_ARB GL_TEXTURE3_ARB GL_TEXTURE4_ARB GL_TEXTURE5_ARB GL_TEXTURE6_ARB GL_TEXTURE7_ARB GL_TEXTURE8_ARB GL_TEXTURE9_ARB GL_TEXTURE10_ARB GL_TEXTURE11_ARB GL_TEXTURE12_ARB GL_TEXTURE13_ARB GL_TEXTURE14_ARB GL_TEXTURE15_ARB GL_TEXTURE16_ARB GL_TEXTURE17_ARB GL_TEXTURE18_ARB GL_TEXTURE19_ARB GL_TEXTURE20_ARB GL_TEXTURE21_ARB GL_TEXTURE22_ARB GL_TEXTURE23_ARB GL_TEXTURE24_ARB GL_TEXTURE25_ARB GL_TEXTURE26_ARB GL_TEXTURE27_ARB GL_TEXTURE28_ARB GL_TEXTURE29_ARB GL_TEXTURE30_ARB GL_TEXTURE31_ARB GL_ACTIVE_TEXTURE_ARB GL_CLIENT_ACTIVE_TEXTURE_ARB GL_MAX_TEXTURE_UNITS_ARB GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_MULTISAMPLE_BIT_ARB GL_NORMAL_MAP_ARB GL_REFLECTION_MAP_ARB GL_TEXTURE_CUBE_MAP_ARB GL_TEXTURE_BINDING_CUBE_MAP_ARB GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB GL_PROXY_TEXTURE_CUBE_MAP_ARB GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB GL_COMPRESSED_ALPHA_ARB GL_COMPRESSED_LUMINANCE_ARB GL_COMPRESSED_LUMINANCE_ALPHA_ARB GL_COMPRESSED_INTENSITY_ARB GL_COMPRESSED_RGB_ARB GL_COMPRESSED_RGBA_ARB GL_TEXTURE_COMPRESSION_HINT_ARB GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB GL_TEXTURE_COMPRESSED_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLAMP_TO_BORDER_ARB GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB GL_POINT_DISTANCE_ATTENUATION_ARB GL_MAX_VERTEX_UNITS_ARB GL_ACTIVE_VERTEX_UNITS_ARB GL_WEIGHT_SUM_UNITY_ARB GL_VERTEX_BLEND_ARB GL_CURRENT_WEIGHT_ARB GL_WEIGHT_ARRAY_TYPE_ARB GL_WEIGHT_ARRAY_STRIDE_ARB GL_WEIGHT_ARRAY_SIZE_ARB GL_WEIGHT_ARRAY_POINTER_ARB GL_WEIGHT_ARRAY_ARB GL_MODELVIEW0_ARB GL_MODELVIEW1_ARB GL_MODELVIEW2_ARB GL_MODELVIEW3_ARB GL_MODELVIEW4_ARB GL_MODELVIEW5_ARB GL_MODELVIEW6_ARB GL_MODELVIEW7_ARB GL_MODELVIEW8_ARB GL_MODELVIEW9_ARB GL_MODELVIEW10_ARB GL_MODELVIEW11_ARB GL_MODELVIEW12_ARB GL_MODELVIEW13_ARB GL_MODELVIEW14_ARB GL_MODELVIEW15_ARB GL_MODELVIEW16_ARB GL_MODELVIEW17_ARB GL_MODELVIEW18_ARB GL_MODELVIEW19_ARB GL_MODELVIEW20_ARB GL_MODELVIEW21_ARB GL_MODELVIEW22_ARB GL_MODELVIEW23_ARB GL_MODELVIEW24_ARB GL_MODELVIEW25_ARB GL_MODELVIEW26_ARB GL_MODELVIEW27_ARB GL_MODELVIEW28_ARB GL_MODELVIEW29_ARB GL_MODELVIEW30_ARB GL_MODELVIEW31_ARB GL_MATRIX_PALETTE_ARB GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB GL_MAX_PALETTE_MATRICES_ARB GL_CURRENT_PALETTE_MATRIX_ARB GL_MATRIX_INDEX_ARRAY_ARB GL_CURRENT_MATRIX_INDEX_ARB GL_MATRIX_INDEX_ARRAY_SIZE_ARB GL_MATRIX_INDEX_ARRAY_TYPE_ARB GL_MATRIX_INDEX_ARRAY_STRIDE_ARB GL_MATRIX_INDEX_ARRAY_POINTER_ARB GL_COMBINE_ARB GL_COMBINE_RGB_ARB GL_COMBINE_ALPHA_ARB GL_SOURCE0_RGB_ARB GL_SOURCE1_RGB_ARB GL_SOURCE2_RGB_ARB GL_SOURCE0_ALPHA_ARB GL_SOURCE1_ALPHA_ARB GL_SOURCE2_ALPHA_ARB GL_OPERAND0_RGB_ARB GL_OPERAND1_RGB_ARB GL_OPERAND2_RGB_ARB GL_OPERAND0_ALPHA_ARB GL_OPERAND1_ALPHA_ARB GL_OPERAND2_ALPHA_ARB GL_RGB_SCALE_ARB GL_ADD_SIGNED_ARB GL_INTERPOLATE_ARB GL_SUBTRACT_ARB GL_CONSTANT_ARB GL_PRIMARY_COLOR_ARB GL_PREVIOUS_ARB GL_DOT3_RGB_ARB GL_DOT3_RGBA_ARB GL_MIRRORED_REPEAT_ARB GL_DEPTH_COMPONENT16_ARB GL_DEPTH_COMPONENT24_ARB GL_DEPTH_COMPONENT32_ARB GL_TEXTURE_DEPTH_SIZE_ARB GL_DEPTH_TEXTURE_MODE_ARB GL_TEXTURE_COMPARE_MODE_ARB GL_TEXTURE_COMPARE_FUNC_ARB GL_COMPARE_R_TO_TEXTURE_ARB GL_TEXTURE_COMPARE_FAIL_VALUE_ARB GL_COLOR_SUM_ARB GL_VERTEX_PROGRAM_ARB GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB GL_CURRENT_VERTEX_ATTRIB_ARB GL_PROGRAM_LENGTH_ARB GL_PROGRAM_STRING_ARB GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB GL_MAX_PROGRAM_MATRICES_ARB GL_CURRENT_MATRIX_STACK_DEPTH_ARB GL_CURRENT_MATRIX_ARB GL_VERTEX_PROGRAM_POINT_SIZE_ARB GL_VERTEX_PROGRAM_TWO_SIDE_ARB GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB GL_PROGRAM_ERROR_POSITION_ARB GL_PROGRAM_BINDING_ARB GL_MAX_VERTEX_ATTRIBS_ARB GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB GL_PROGRAM_ERROR_STRING_ARB GL_PROGRAM_FORMAT_ASCII_ARB GL_PROGRAM_FORMAT_ARB GL_PROGRAM_INSTRUCTIONS_ARB GL_MAX_PROGRAM_INSTRUCTIONS_ARB GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB GL_PROGRAM_TEMPORARIES_ARB GL_MAX_PROGRAM_TEMPORARIES_ARB GL_PROGRAM_NATIVE_TEMPORARIES_ARB GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB GL_PROGRAM_PARAMETERS_ARB GL_MAX_PROGRAM_PARAMETERS_ARB GL_PROGRAM_NATIVE_PARAMETERS_ARB GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB GL_PROGRAM_ATTRIBS_ARB GL_MAX_PROGRAM_ATTRIBS_ARB GL_PROGRAM_NATIVE_ATTRIBS_ARB GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB GL_PROGRAM_ADDRESS_REGISTERS_ARB GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB GL_MAX_PROGRAM_ENV_PARAMETERS_ARB GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB GL_TRANSPOSE_CURRENT_MATRIX_ARB GL_MATRIX0_ARB GL_MATRIX1_ARB GL_MATRIX2_ARB GL_MATRIX3_ARB GL_MATRIX4_ARB GL_MATRIX5_ARB GL_MATRIX6_ARB GL_MATRIX7_ARB GL_MATRIX8_ARB GL_MATRIX9_ARB GL_MATRIX10_ARB GL_MATRIX11_ARB GL_MATRIX12_ARB GL_MATRIX13_ARB GL_MATRIX14_ARB GL_MATRIX15_ARB GL_MATRIX16_ARB GL_MATRIX17_ARB GL_MATRIX18_ARB GL_MATRIX19_ARB GL_MATRIX20_ARB GL_MATRIX21_ARB GL_MATRIX22_ARB GL_MATRIX23_ARB GL_MATRIX24_ARB GL_MATRIX25_ARB GL_MATRIX26_ARB GL_MATRIX27_ARB GL_MATRIX28_ARB GL_MATRIX29_ARB GL_MATRIX30_ARB GL_MATRIX31_ARB GL_FRAGMENT_PROGRAM_ARB GL_PROGRAM_ALU_INSTRUCTIONS_ARB GL_PROGRAM_TEX_INSTRUCTIONS_ARB GL_PROGRAM_TEX_INDIRECTIONS_ARB GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB GL_MAX_TEXTURE_COORDS_ARB GL_MAX_TEXTURE_IMAGE_UNITS_ARB GL_BUFFER_SIZE_ARB GL_BUFFER_USAGE_ARB GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB GL_READ_ONLY_ARB GL_WRITE_ONLY_ARB GL_READ_WRITE_ARB GL_BUFFER_ACCESS_ARB GL_BUFFER_MAPPED_ARB GL_BUFFER_MAP_POINTER_ARB GL_STREAM_DRAW_ARB GL_STREAM_READ_ARB GL_STREAM_COPY_ARB GL_STATIC_DRAW_ARB GL_STATIC_READ_ARB GL_STATIC_COPY_ARB GL_DYNAMIC_DRAW_ARB GL_DYNAMIC_READ_ARB GL_DYNAMIC_COPY_ARB GL_QUERY_COUNTER_BITS_ARB GL_CURRENT_QUERY_ARB GL_QUERY_RESULT_ARB GL_QUERY_RESULT_AVAILABLE_ARB GL_SAMPLES_PASSED_ARB GL_PROGRAM_OBJECT_ARB GL_SHADER_OBJECT_ARB GL_OBJECT_TYPE_ARB GL_OBJECT_SUBTYPE_ARB GL_FLOAT_VEC2_ARB GL_FLOAT_VEC3_ARB GL_FLOAT_VEC4_ARB GL_INT_VEC2_ARB GL_INT_VEC3_ARB GL_INT_VEC4_ARB GL_BOOL_ARB GL_BOOL_VEC2_ARB GL_BOOL_VEC3_ARB GL_BOOL_VEC4_ARB GL_FLOAT_MAT2_ARB GL_FLOAT_MAT3_ARB GL_FLOAT_MAT4_ARB GL_SAMPLER_1D_ARB GL_SAMPLER_2D_ARB GL_SAMPLER_3D_ARB GL_SAMPLER_CUBE_ARB GL_SAMPLER_1D_SHADOW_ARB GL_SAMPLER_2D_SHADOW_ARB GL_SAMPLER_2D_RECT_ARB GL_SAMPLER_2D_RECT_SHADOW_ARB GL_OBJECT_DELETE_STATUS_ARB GL_OBJECT_COMPILE_STATUS_ARB GL_OBJECT_LINK_STATUS_ARB GL_OBJECT_VALIDATE_STATUS_ARB GL_OBJECT_INFO_LOG_LENGTH_ARB GL_OBJECT_ATTACHED_OBJECTS_ARB GL_OBJECT_ACTIVE_UNIFORMS_ARB GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB GL_OBJECT_SHADER_SOURCE_LENGTH_ARB GL_VERTEX_SHADER_ARB GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB GL_MAX_VARYING_FLOATS_ARB GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB GL_OBJECT_ACTIVE_ATTRIBUTES_ARB GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB GL_FRAGMENT_SHADER_ARB GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB GL_SHADING_LANGUAGE_VERSION_ARB GL_POINT_SPRITE_ARB GL_COORD_REPLACE_ARB GL_MAX_DRAW_BUFFERS_ARB GL_DRAW_BUFFER0_ARB GL_DRAW_BUFFER1_ARB GL_DRAW_BUFFER2_ARB GL_DRAW_BUFFER3_ARB GL_DRAW_BUFFER4_ARB GL_DRAW_BUFFER5_ARB GL_DRAW_BUFFER6_ARB GL_DRAW_BUFFER7_ARB GL_DRAW_BUFFER8_ARB GL_DRAW_BUFFER9_ARB GL_DRAW_BUFFER10_ARB GL_DRAW_BUFFER11_ARB GL_DRAW_BUFFER12_ARB GL_DRAW_BUFFER13_ARB GL_DRAW_BUFFER14_ARB GL_DRAW_BUFFER15_ARB GL_TEXTURE_RECTANGLE_ARB GL_TEXTURE_BINDING_RECTANGLE_ARB GL_PROXY_TEXTURE_RECTANGLE_ARB GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB GL_RGBA_FLOAT_MODE_ARB GL_CLAMP_VERTEX_COLOR_ARB GL_CLAMP_FRAGMENT_COLOR_ARB GL_CLAMP_READ_COLOR_ARB GL_FIXED_ONLY_ARB GL_HALF_FLOAT_ARB GL_TEXTURE_RED_TYPE_ARB GL_TEXTURE_GREEN_TYPE_ARB GL_TEXTURE_BLUE_TYPE_ARB GL_TEXTURE_ALPHA_TYPE_ARB GL_TEXTURE_LUMINANCE_TYPE_ARB GL_TEXTURE_INTENSITY_TYPE_ARB GL_TEXTURE_DEPTH_TYPE_ARB GL_UNSIGNED_NORMALIZED_ARB GL_RGBA32F_ARB GL_RGB32F_ARB GL_ALPHA32F_ARB GL_INTENSITY32F_ARB GL_LUMINANCE32F_ARB GL_LUMINANCE_ALPHA32F_ARB GL_RGBA16F_ARB GL_RGB16F_ARB GL_ALPHA16F_ARB GL_INTENSITY16F_ARB GL_LUMINANCE16F_ARB GL_LUMINANCE_ALPHA16F_ARB GL_PIXEL_PACK_BUFFER_ARB GL_PIXEL_UNPACK_BUFFER_ARB GL_PIXEL_PACK_BUFFER_BINDING_ARB GL_PIXEL_UNPACK_BUFFER_BINDING_ARB GL_RGB2_EXT GL_PROXY_TEXTURE_1D_EXT GL_PROXY_TEXTURE_2D_EXT GL_FILTER4_SGIS GL_TEXTURE_FILTER4_SIZE_SGIS GL_HISTOGRAM_EXT GL_PROXY_HISTOGRAM_EXT GL_HISTOGRAM_WIDTH_EXT GL_HISTOGRAM_FORMAT_EXT GL_HISTOGRAM_RED_SIZE_EXT GL_HISTOGRAM_GREEN_SIZE_EXT GL_HISTOGRAM_BLUE_SIZE_EXT GL_HISTOGRAM_ALPHA_SIZE_EXT GL_HISTOGRAM_LUMINANCE_SIZE_EXT GL_HISTOGRAM_SINK_EXT GL_MINMAX_EXT GL_MINMAX_FORMAT_EXT GL_MINMAX_SINK_EXT GL_CONVOLUTION_1D_EXT GL_CONVOLUTION_2D_EXT GL_SEPARABLE_2D_EXT GL_CONVOLUTION_BORDER_MODE_EXT GL_CONVOLUTION_FILTER_SCALE_EXT GL_CONVOLUTION_FILTER_BIAS_EXT GL_REDUCE_EXT GL_CONVOLUTION_FORMAT_EXT GL_CONVOLUTION_WIDTH_EXT GL_CONVOLUTION_HEIGHT_EXT GL_MAX_CONVOLUTION_WIDTH_EXT GL_MAX_CONVOLUTION_HEIGHT_EXT GL_POST_CONVOLUTION_RED_SCALE_EXT GL_POST_CONVOLUTION_GREEN_SCALE_EXT GL_POST_CONVOLUTION_BLUE_SCALE_EXT GL_POST_CONVOLUTION_ALPHA_SCALE_EXT GL_POST_CONVOLUTION_RED_BIAS_EXT GL_POST_CONVOLUTION_GREEN_BIAS_EXT GL_POST_CONVOLUTION_BLUE_BIAS_EXT GL_POST_CONVOLUTION_ALPHA_BIAS_EXT GL_COLOR_MATRIX_SGI GL_COLOR_MATRIX_STACK_DEPTH_SGI GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI GL_POST_COLOR_MATRIX_RED_SCALE_SGI GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI GL_POST_COLOR_MATRIX_RED_BIAS_SGI GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI GL_COLOR_TABLE_SGI GL_POST_CONVOLUTION_COLOR_TABLE_SGI GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI GL_PROXY_COLOR_TABLE_SGI GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI GL_COLOR_TABLE_SCALE_SGI GL_COLOR_TABLE_BIAS_SGI GL_COLOR_TABLE_FORMAT_SGI GL_COLOR_TABLE_WIDTH_SGI GL_COLOR_TABLE_RED_SIZE_SGI GL_COLOR_TABLE_GREEN_SIZE_SGI GL_COLOR_TABLE_BLUE_SIZE_SGI GL_COLOR_TABLE_ALPHA_SIZE_SGI GL_COLOR_TABLE_LUMINANCE_SIZE_SGI GL_COLOR_TABLE_INTENSITY_SIZE_SGI GL_PIXEL_TEXTURE_SGIS GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS GL_PIXEL_GROUP_COLOR_SGIS GL_PIXEL_TEX_GEN_SGIX GL_PIXEL_TEX_GEN_MODE_SGIX GL_PACK_SKIP_VOLUMES_SGIS GL_PACK_IMAGE_DEPTH_SGIS GL_UNPACK_SKIP_VOLUMES_SGIS GL_UNPACK_IMAGE_DEPTH_SGIS GL_TEXTURE_4D_SGIS GL_PROXY_TEXTURE_4D_SGIS GL_TEXTURE_4DSIZE_SGIS GL_TEXTURE_WRAP_Q_SGIS GL_MAX_4D_TEXTURE_SIZE_SGIS GL_TEXTURE_4D_BINDING_SGIS GL_TEXTURE_COLOR_TABLE_SGI GL_PROXY_TEXTURE_COLOR_TABLE_SGI GL_DETAIL_TEXTURE_2D_SGIS GL_DETAIL_TEXTURE_2D_BINDING_SGIS GL_LINEAR_DETAIL_SGIS GL_LINEAR_DETAIL_ALPHA_SGIS GL_LINEAR_DETAIL_COLOR_SGIS GL_DETAIL_TEXTURE_LEVEL_SGIS GL_DETAIL_TEXTURE_MODE_SGIS GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS GL_LINEAR_SHARPEN_SGIS GL_LINEAR_SHARPEN_ALPHA_SGIS GL_LINEAR_SHARPEN_COLOR_SGIS GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS GL_UNSIGNED_BYTE_3_3_2_EXT GL_UNSIGNED_SHORT_4_4_4_4_EXT GL_UNSIGNED_SHORT_5_5_5_1_EXT GL_UNSIGNED_INT_8_8_8_8_EXT GL_UNSIGNED_INT_10_10_10_2_EXT GL_TEXTURE_MIN_LOD_SGIS GL_TEXTURE_MAX_LOD_SGIS GL_TEXTURE_BASE_LEVEL_SGIS GL_TEXTURE_MAX_LEVEL_SGIS GL_MULTISAMPLE_SGIS GL_SAMPLE_ALPHA_TO_MASK_SGIS GL_SAMPLE_ALPHA_TO_ONE_SGIS GL_SAMPLE_MASK_SGIS GL_1PASS_SGIS GL_2PASS_0_SGIS GL_2PASS_1_SGIS GL_4PASS_0_SGIS GL_4PASS_1_SGIS GL_4PASS_2_SGIS GL_4PASS_3_SGIS GL_SAMPLE_BUFFERS_SGIS GL_SAMPLES_SGIS GL_SAMPLE_MASK_VALUE_SGIS GL_SAMPLE_MASK_INVERT_SGIS GL_SAMPLE_PATTERN_SGIS GL_RESCALE_NORMAL_EXT GL_GENERATE_MIPMAP_SGIS GL_GENERATE_MIPMAP_HINT_SGIS GL_LINEAR_CLIPMAP_LINEAR_SGIX GL_TEXTURE_CLIPMAP_CENTER_SGIX GL_TEXTURE_CLIPMAP_FRAME_SGIX GL_TEXTURE_CLIPMAP_OFFSET_SGIX GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX GL_TEXTURE_CLIPMAP_DEPTH_SGIX GL_MAX_CLIPMAP_DEPTH_SGIX GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX GL_NEAREST_CLIPMAP_NEAREST_SGIX GL_NEAREST_CLIPMAP_LINEAR_SGIX GL_LINEAR_CLIPMAP_NEAREST_SGIX GL_TEXTURE_COMPARE_SGIX GL_TEXTURE_COMPARE_OPERATOR_SGIX GL_TEXTURE_LEQUAL_R_SGIX GL_TEXTURE_GEQUAL_R_SGIX GL_CLAMP_TO_EDGE_SGIS GL_CLAMP_TO_BORDER_SGIS GL_INTERLACE_SGIX GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX GL_PIXEL_TILE_CACHE_INCREMENT_SGIX GL_PIXEL_TILE_WIDTH_SGIX GL_PIXEL_TILE_HEIGHT_SGIX GL_PIXEL_TILE_GRID_WIDTH_SGIX GL_PIXEL_TILE_GRID_HEIGHT_SGIX GL_PIXEL_TILE_GRID_DEPTH_SGIX GL_PIXEL_TILE_CACHE_SIZE_SGIX GL_DUAL_ALPHA4_SGIS GL_DUAL_ALPHA8_SGIS GL_DUAL_ALPHA12_SGIS GL_DUAL_ALPHA16_SGIS GL_DUAL_LUMINANCE4_SGIS GL_DUAL_LUMINANCE8_SGIS GL_DUAL_LUMINANCE12_SGIS GL_DUAL_LUMINANCE16_SGIS GL_DUAL_INTENSITY4_SGIS GL_DUAL_INTENSITY8_SGIS GL_DUAL_INTENSITY12_SGIS GL_DUAL_INTENSITY16_SGIS GL_DUAL_LUMINANCE_ALPHA4_SGIS GL_DUAL_LUMINANCE_ALPHA8_SGIS GL_QUAD_ALPHA4_SGIS GL_QUAD_ALPHA8_SGIS GL_QUAD_LUMINANCE4_SGIS GL_QUAD_LUMINANCE8_SGIS GL_QUAD_INTENSITY4_SGIS GL_QUAD_INTENSITY8_SGIS GL_DUAL_TEXTURE_SELECT_SGIS GL_QUAD_TEXTURE_SELECT_SGIS GL_SPRITE_SGIX GL_SPRITE_MODE_SGIX GL_SPRITE_AXIS_SGIX GL_SPRITE_TRANSLATION_SGIX GL_SPRITE_AXIAL_SGIX GL_SPRITE_OBJECT_ALIGNED_SGIX GL_SPRITE_EYE_ALIGNED_SGIX GL_TEXTURE_MULTI_BUFFER_HINT_SGIX GL_POINT_SIZE_MIN_SGIS GL_POINT_SIZE_MAX_SGIS GL_POINT_FADE_THRESHOLD_SIZE_SGIS GL_DISTANCE_ATTENUATION_SGIS GL_INSTRUMENT_BUFFER_POINTER_SGIX GL_INSTRUMENT_MEASUREMENTS_SGIX GL_POST_TEXTURE_FILTER_BIAS_SGIX GL_POST_TEXTURE_FILTER_SCALE_SGIX GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX GL_FRAMEZOOM_SGIX GL_FRAMEZOOM_FACTOR_SGIX GL_MAX_FRAMEZOOM_FACTOR_SGIX GL_TEXTURE_DEFORMATION_BIT_SGIX GL_GEOMETRY_DEFORMATION_BIT_SGIX GL_GEOMETRY_DEFORMATION_SGIX GL_TEXTURE_DEFORMATION_SGIX GL_DEFORMATIONS_MASK_SGIX GL_MAX_DEFORMATION_ORDER_SGIX GL_REFERENCE_PLANE_SGIX GL_REFERENCE_PLANE_EQUATION_SGIX GL_DEPTH_COMPONENT16_SGIX GL_DEPTH_COMPONENT24_SGIX GL_DEPTH_COMPONENT32_SGIX GL_FOG_FUNC_SGIS GL_FOG_FUNC_POINTS_SGIS GL_MAX_FOG_FUNC_POINTS_SGIS GL_FOG_OFFSET_SGIX GL_FOG_OFFSET_VALUE_SGIX GL_IMAGE_SCALE_X_HP GL_IMAGE_SCALE_Y_HP GL_IMAGE_TRANSLATE_X_HP GL_IMAGE_TRANSLATE_Y_HP GL_IMAGE_ROTATE_ANGLE_HP GL_IMAGE_ROTATE_ORIGIN_X_HP GL_IMAGE_ROTATE_ORIGIN_Y_HP GL_IMAGE_MAG_FILTER_HP GL_IMAGE_MIN_FILTER_HP GL_IMAGE_CUBIC_WEIGHT_HP GL_CUBIC_HP GL_AVERAGE_HP GL_IMAGE_TRANSFORM_2D_HP GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP GL_IGNORE_BORDER_HP GL_CONSTANT_BORDER_HP GL_REPLICATE_BORDER_HP GL_CONVOLUTION_BORDER_COLOR_HP GL_TEXTURE_ENV_BIAS_SGIX GL_VERTEX_DATA_HINT_PGI GL_VERTEX_CONSISTENT_HINT_PGI GL_MATERIAL_SIDE_HINT_PGI GL_MAX_VERTEX_HINT_PGI GL_COLOR3_BIT_PGI GL_COLOR4_BIT_PGI GL_EDGEFLAG_BIT_PGI GL_INDEX_BIT_PGI GL_MAT_AMBIENT_BIT_PGI GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI GL_MAT_DIFFUSE_BIT_PGI GL_MAT_EMISSION_BIT_PGI GL_MAT_COLOR_INDEXES_BIT_PGI GL_MAT_SHININESS_BIT_PGI GL_MAT_SPECULAR_BIT_PGI GL_NORMAL_BIT_PGI GL_TEXCOORD1_BIT_PGI GL_TEXCOORD2_BIT_PGI GL_TEXCOORD3_BIT_PGI GL_TEXCOORD4_BIT_PGI GL_VERTEX23_BIT_PGI GL_VERTEX4_BIT_PGI GL_PREFER_DOUBLEBUFFER_HINT_PGI GL_CONSERVE_MEMORY_HINT_PGI GL_RECLAIM_MEMORY_HINT_PGI GL_NATIVE_GRAPHICS_HANDLE_PGI GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI GL_NATIVE_GRAPHICS_END_HINT_PGI GL_ALWAYS_FAST_HINT_PGI GL_ALWAYS_SOFT_HINT_PGI GL_ALLOW_DRAW_OBJ_HINT_PGI GL_ALLOW_DRAW_WIN_HINT_PGI GL_ALLOW_DRAW_FRG_HINT_PGI GL_ALLOW_DRAW_MEM_HINT_PGI GL_STRICT_DEPTHFUNC_HINT_PGI GL_STRICT_LIGHTING_HINT_PGI GL_STRICT_SCISSOR_HINT_PGI GL_FULL_STIPPLE_HINT_PGI GL_CLIP_NEAR_HINT_PGI GL_CLIP_FAR_HINT_PGI GL_WIDE_LINE_HINT_PGI GL_BACK_NORMALS_HINT_PGI GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_LIST_PRIORITY_SGIX GL_IR_INSTRUMENT1_SGIX GL_CALLIGRAPHIC_FRAGMENT_SGIX GL_TEXTURE_LOD_BIAS_S_SGIX GL_TEXTURE_LOD_BIAS_T_SGIX GL_TEXTURE_LOD_BIAS_R_SGIX GL_SHADOW_AMBIENT_SGIX GL_INDEX_MATERIAL_EXT GL_INDEX_MATERIAL_PARAMETER_EXT GL_INDEX_MATERIAL_FACE_EXT GL_INDEX_TEST_EXT GL_INDEX_TEST_FUNC_EXT GL_INDEX_TEST_REF_EXT GL_IUI_V2F_EXT GL_IUI_V3F_EXT GL_IUI_N3F_V2F_EXT GL_IUI_N3F_V3F_EXT GL_T2F_IUI_V2F_EXT GL_T2F_IUI_V3F_EXT GL_T2F_IUI_N3F_V2F_EXT GL_T2F_IUI_N3F_V3F_EXT GL_ARRAY_ELEMENT_LOCK_FIRST_EXT GL_ARRAY_ELEMENT_LOCK_COUNT_EXT GL_CULL_VERTEX_EXT GL_CULL_VERTEX_EYE_POSITION_EXT GL_CULL_VERTEX_OBJECT_POSITION_EXT GL_YCRCB_422_SGIX GL_YCRCB_444_SGIX GL_FRAGMENT_LIGHTING_SGIX GL_FRAGMENT_COLOR_MATERIAL_SGIX GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX GL_MAX_FRAGMENT_LIGHTS_SGIX GL_MAX_ACTIVE_LIGHTS_SGIX GL_CURRENT_RASTER_NORMAL_SGIX GL_LIGHT_ENV_MODE_SGIX GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX GL_FRAGMENT_LIGHT0_SGIX GL_FRAGMENT_LIGHT1_SGIX GL_FRAGMENT_LIGHT2_SGIX GL_FRAGMENT_LIGHT3_SGIX GL_FRAGMENT_LIGHT4_SGIX GL_FRAGMENT_LIGHT5_SGIX GL_FRAGMENT_LIGHT6_SGIX GL_FRAGMENT_LIGHT7_SGIX GL_RASTER_POSITION_UNCLIPPED_IBM GL_TEXTURE_LIGHTING_MODE_HP GL_TEXTURE_POST_SPECULAR_HP GL_TEXTURE_PRE_SPECULAR_HP GL_MAX_ELEMENTS_VERTICES_EXT GL_MAX_ELEMENTS_INDICES_EXT GL_PHONG_WIN GL_PHONG_HINT_WIN GL_FOG_SPECULAR_TEXTURE_WIN GL_FRAGMENT_MATERIAL_EXT GL_FRAGMENT_NORMAL_EXT GL_FRAGMENT_COLOR_EXT GL_ATTENUATION_EXT GL_SHADOW_ATTENUATION_EXT GL_TEXTURE_APPLICATION_MODE_EXT GL_TEXTURE_LIGHT_EXT GL_TEXTURE_MATERIAL_FACE_EXT GL_TEXTURE_MATERIAL_PARAMETER_EXT GL_ALPHA_MIN_SGIX GL_ALPHA_MAX_SGIX GL_PIXEL_TEX_GEN_Q_CEILING_SGIX GL_PIXEL_TEX_GEN_Q_ROUND_SGIX GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX GL_BGR_EXT GL_BGRA_EXT GL_ASYNC_MARKER_SGIX GL_ASYNC_TEX_IMAGE_SGIX GL_ASYNC_DRAW_PIXELS_SGIX GL_ASYNC_READ_PIXELS_SGIX GL_MAX_ASYNC_TEX_IMAGE_SGIX GL_MAX_ASYNC_DRAW_PIXELS_SGIX GL_MAX_ASYNC_READ_PIXELS_SGIX GL_ASYNC_HISTOGRAM_SGIX GL_MAX_ASYNC_HISTOGRAM_SGIX GL_PARALLEL_ARRAYS_INTEL GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL GL_OCCLUSION_TEST_HP GL_OCCLUSION_TEST_RESULT_HP GL_PIXEL_TRANSFORM_2D_EXT GL_PIXEL_MAG_FILTER_EXT GL_PIXEL_MIN_FILTER_EXT GL_PIXEL_CUBIC_WEIGHT_EXT GL_CUBIC_EXT GL_AVERAGE_EXT GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT GL_PIXEL_TRANSFORM_2D_MATRIX_EXT GL_LIGHT_MODEL_COLOR_CONTROL_EXT GL_SINGLE_COLOR_EXT GL_SEPARATE_SPECULAR_COLOR_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_SECONDARY_COLOR_ARRAY_POINTER_EXT GL_SECONDARY_COLOR_ARRAY_EXT GL_PERTURB_EXT GL_TEXTURE_NORMAL_EXT GL_FOG_COORDINATE_SOURCE_EXT GL_FOG_COORDINATE_EXT GL_FRAGMENT_DEPTH_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_FOG_COORDINATE_ARRAY_POINTER_EXT GL_FOG_COORDINATE_ARRAY_EXT GL_SCREEN_COORDINATES_REND GL_INVERTED_SCREEN_W_REND GL_TANGENT_ARRAY_EXT GL_BINORMAL_ARRAY_EXT GL_CURRENT_TANGENT_EXT GL_CURRENT_BINORMAL_EXT GL_TANGENT_ARRAY_TYPE_EXT GL_TANGENT_ARRAY_STRIDE_EXT GL_BINORMAL_ARRAY_TYPE_EXT GL_BINORMAL_ARRAY_STRIDE_EXT GL_TANGENT_ARRAY_POINTER_EXT GL_BINORMAL_ARRAY_POINTER_EXT GL_MAP1_TANGENT_EXT GL_MAP2_TANGENT_EXT GL_MAP1_BINORMAL_EXT GL_MAP2_BINORMAL_EXT GL_COMBINE_EXT GL_COMBINE_RGB_EXT GL_COMBINE_ALPHA_EXT GL_RGB_SCALE_EXT GL_ADD_SIGNED_EXT GL_INTERPOLATE_EXT GL_CONSTANT_EXT GL_PRIMARY_COLOR_EXT GL_PREVIOUS_EXT GL_SOURCE0_RGB_EXT GL_SOURCE1_RGB_EXT GL_SOURCE2_RGB_EXT GL_SOURCE0_ALPHA_EXT GL_SOURCE1_ALPHA_EXT GL_SOURCE2_ALPHA_EXT GL_OPERAND0_RGB_EXT GL_OPERAND1_RGB_EXT GL_OPERAND2_RGB_EXT GL_OPERAND0_ALPHA_EXT GL_OPERAND1_ALPHA_EXT GL_OPERAND2_ALPHA_EXT GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE GL_TRANSFORM_HINT_APPLE GL_FOG_SCALE_SGIX GL_FOG_SCALE_VALUE_SGIX GL_UNPACK_CONSTANT_DATA_SUNX GL_TEXTURE_CONSTANT_DATA_SUNX GL_GLOBAL_ALPHA_SUN GL_GLOBAL_ALPHA_FACTOR_SUN GL_RESTART_SUN GL_REPLACE_MIDDLE_SUN GL_REPLACE_OLDEST_SUN GL_TRIANGLE_LIST_SUN GL_REPLACEMENT_CODE_SUN GL_REPLACEMENT_CODE_ARRAY_SUN GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN GL_R1UI_V3F_SUN GL_R1UI_C4UB_V3F_SUN GL_R1UI_C3F_V3F_SUN GL_R1UI_N3F_V3F_SUN GL_R1UI_C4F_N3F_V3F_SUN GL_R1UI_T2F_V3F_SUN GL_R1UI_T2F_N3F_V3F_SUN GL_R1UI_T2F_C4F_N3F_V3F_SUN GL_BLEND_DST_RGB_EXT GL_BLEND_SRC_RGB_EXT GL_BLEND_DST_ALPHA_EXT GL_BLEND_SRC_ALPHA_EXT GL_RED_MIN_CLAMP_INGR GL_GREEN_MIN_CLAMP_INGR GL_BLUE_MIN_CLAMP_INGR GL_ALPHA_MIN_CLAMP_INGR GL_RED_MAX_CLAMP_INGR GL_GREEN_MAX_CLAMP_INGR GL_BLUE_MAX_CLAMP_INGR GL_ALPHA_MAX_CLAMP_INGR GL_INTERLACE_READ_INGR GL_INCR_WRAP_EXT GL_DECR_WRAP_EXT GL_422_EXT GL_422_REV_EXT GL_422_AVERAGE_EXT GL_422_REV_AVERAGE_EXT GL_NORMAL_MAP_NV GL_REFLECTION_MAP_NV GL_NORMAL_MAP_EXT GL_REFLECTION_MAP_EXT GL_TEXTURE_CUBE_MAP_EXT GL_TEXTURE_BINDING_CUBE_MAP_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT GL_PROXY_TEXTURE_CUBE_MAP_EXT GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT GL_WRAP_BORDER_SUN GL_MAX_TEXTURE_LOD_BIAS_EXT GL_TEXTURE_FILTER_CONTROL_EXT GL_TEXTURE_LOD_BIAS_EXT GL_TEXTURE_MAX_ANISOTROPY_EXT GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW1_STACK_DEPTH_EXT GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW1_MATRIX_EXT GL_VERTEX_WEIGHTING_EXT GL_MODELVIEW0_EXT GL_MODELVIEW1_EXT GL_CURRENT_VERTEX_WEIGHT_EXT GL_VERTEX_WEIGHT_ARRAY_EXT GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT GL_MAX_SHININESS_NV GL_MAX_SPOT_EXPONENT_NV GL_VERTEX_ARRAY_RANGE_NV GL_VERTEX_ARRAY_RANGE_LENGTH_NV GL_VERTEX_ARRAY_RANGE_VALID_NV GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV GL_VERTEX_ARRAY_RANGE_POINTER_NV GL_REGISTER_COMBINERS_NV GL_VARIABLE_A_NV GL_VARIABLE_B_NV GL_VARIABLE_C_NV GL_VARIABLE_D_NV GL_VARIABLE_E_NV GL_VARIABLE_F_NV GL_VARIABLE_G_NV GL_CONSTANT_COLOR0_NV GL_CONSTANT_COLOR1_NV GL_PRIMARY_COLOR_NV GL_SECONDARY_COLOR_NV GL_SPARE0_NV GL_SPARE1_NV GL_DISCARD_NV GL_E_TIMES_F_NV GL_SPARE0_PLUS_SECONDARY_COLOR_NV GL_UNSIGNED_IDENTITY_NV GL_UNSIGNED_INVERT_NV GL_EXPAND_NORMAL_NV GL_EXPAND_NEGATE_NV GL_HALF_BIAS_NORMAL_NV GL_HALF_BIAS_NEGATE_NV GL_SIGNED_IDENTITY_NV GL_SIGNED_NEGATE_NV GL_SCALE_BY_TWO_NV GL_SCALE_BY_FOUR_NV GL_SCALE_BY_ONE_HALF_NV GL_BIAS_BY_NEGATIVE_ONE_HALF_NV GL_COMBINER_INPUT_NV GL_COMBINER_MAPPING_NV GL_COMBINER_COMPONENT_USAGE_NV GL_COMBINER_AB_DOT_PRODUCT_NV GL_COMBINER_CD_DOT_PRODUCT_NV GL_COMBINER_MUX_SUM_NV GL_COMBINER_SCALE_NV GL_COMBINER_BIAS_NV GL_COMBINER_AB_OUTPUT_NV GL_COMBINER_CD_OUTPUT_NV GL_COMBINER_SUM_OUTPUT_NV GL_MAX_GENERAL_COMBINERS_NV GL_NUM_GENERAL_COMBINERS_NV GL_COLOR_SUM_CLAMP_NV GL_COMBINER0_NV GL_COMBINER1_NV GL_COMBINER2_NV GL_COMBINER3_NV GL_COMBINER4_NV GL_COMBINER5_NV GL_COMBINER6_NV GL_COMBINER7_NV GL_FOG_DISTANCE_MODE_NV GL_EYE_RADIAL_NV GL_EYE_PLANE_ABSOLUTE_NV GL_EMBOSS_LIGHT_NV GL_EMBOSS_CONSTANT_NV GL_EMBOSS_MAP_NV GL_COMBINE4_NV GL_SOURCE3_RGB_NV GL_SOURCE3_ALPHA_NV GL_OPERAND3_RGB_NV GL_OPERAND3_ALPHA_NV GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT GL_CULL_VERTEX_IBM GL_VERTEX_ARRAY_LIST_IBM GL_NORMAL_ARRAY_LIST_IBM GL_COLOR_ARRAY_LIST_IBM GL_INDEX_ARRAY_LIST_IBM GL_TEXTURE_COORD_ARRAY_LIST_IBM GL_EDGE_FLAG_ARRAY_LIST_IBM GL_FOG_COORDINATE_ARRAY_LIST_IBM GL_SECONDARY_COLOR_ARRAY_LIST_IBM GL_VERTEX_ARRAY_LIST_STRIDE_IBM GL_NORMAL_ARRAY_LIST_STRIDE_IBM GL_COLOR_ARRAY_LIST_STRIDE_IBM GL_INDEX_ARRAY_LIST_STRIDE_IBM GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM GL_PACK_SUBSAMPLE_RATE_SGIX GL_UNPACK_SUBSAMPLE_RATE_SGIX GL_PIXEL_SUBSAMPLE_4444_SGIX GL_PIXEL_SUBSAMPLE_2424_SGIX GL_PIXEL_SUBSAMPLE_4242_SGIX GL_YCRCB_SGIX GL_YCRCBA_SGIX GL_DEPTH_PASS_INSTRUMENT_SGIX GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX GL_COMPRESSED_RGB_FXT1_3DFX GL_COMPRESSED_RGBA_FXT1_3DFX GL_MULTISAMPLE_3DFX GL_SAMPLE_BUFFERS_3DFX GL_SAMPLES_3DFX GL_MULTISAMPLE_BIT_3DFX GL_MULTISAMPLE_EXT GL_SAMPLE_ALPHA_TO_MASK_EXT GL_SAMPLE_ALPHA_TO_ONE_EXT GL_SAMPLE_MASK_EXT GL_1PASS_EXT GL_2PASS_0_EXT GL_2PASS_1_EXT GL_4PASS_0_EXT GL_4PASS_1_EXT GL_4PASS_2_EXT GL_4PASS_3_EXT GL_SAMPLE_BUFFERS_EXT GL_SAMPLES_EXT GL_SAMPLE_MASK_VALUE_EXT GL_SAMPLE_MASK_INVERT_EXT GL_SAMPLE_PATTERN_EXT GL_MULTISAMPLE_BIT_EXT GL_VERTEX_PRECLIP_SGIX GL_VERTEX_PRECLIP_HINT_SGIX GL_CONVOLUTION_HINT_SGIX GL_PACK_RESAMPLE_SGIX GL_UNPACK_RESAMPLE_SGIX GL_RESAMPLE_REPLICATE_SGIX GL_RESAMPLE_ZERO_FILL_SGIX GL_RESAMPLE_DECIMATE_SGIX GL_EYE_DISTANCE_TO_POINT_SGIS GL_OBJECT_DISTANCE_TO_POINT_SGIS GL_EYE_DISTANCE_TO_LINE_SGIS GL_OBJECT_DISTANCE_TO_LINE_SGIS GL_EYE_POINT_SGIS GL_OBJECT_POINT_SGIS GL_EYE_LINE_SGIS GL_OBJECT_LINE_SGIS GL_TEXTURE_COLOR_WRITEMASK_SGIS GL_DOT3_RGB_EXT GL_DOT3_RGBA_EXT GL_MIRROR_CLAMP_ATI GL_MIRROR_CLAMP_TO_EDGE_ATI GL_ALL_COMPLETED_NV GL_FENCE_STATUS_NV GL_FENCE_CONDITION_NV GL_MIRRORED_REPEAT_IBM GL_EVAL_2D_NV GL_EVAL_TRIANGULAR_2D_NV GL_MAP_TESSELLATION_NV GL_MAP_ATTRIB_U_ORDER_NV GL_MAP_ATTRIB_V_ORDER_NV GL_EVAL_FRACTIONAL_TESSELLATION_NV GL_EVAL_VERTEX_ATTRIB0_NV GL_EVAL_VERTEX_ATTRIB1_NV GL_EVAL_VERTEX_ATTRIB2_NV GL_EVAL_VERTEX_ATTRIB3_NV GL_EVAL_VERTEX_ATTRIB4_NV GL_EVAL_VERTEX_ATTRIB5_NV GL_EVAL_VERTEX_ATTRIB6_NV GL_EVAL_VERTEX_ATTRIB7_NV GL_EVAL_VERTEX_ATTRIB8_NV GL_EVAL_VERTEX_ATTRIB9_NV GL_EVAL_VERTEX_ATTRIB10_NV GL_EVAL_VERTEX_ATTRIB11_NV GL_EVAL_VERTEX_ATTRIB12_NV GL_EVAL_VERTEX_ATTRIB13_NV GL_EVAL_VERTEX_ATTRIB14_NV GL_EVAL_VERTEX_ATTRIB15_NV GL_MAX_MAP_TESSELLATION_NV GL_MAX_RATIONAL_EVAL_ORDER_NV GL_DEPTH_STENCIL_NV GL_UNSIGNED_INT_24_8_NV GL_PER_STAGE_CONSTANTS_NV GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_PROXY_TEXTURE_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_OFFSET_TEXTURE_RECTANGLE_NV GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV GL_UNSIGNED_INT_S8_S8_8_8_NV GL_UNSIGNED_INT_8_8_S8_S8_REV_NV GL_DSDT_MAG_INTENSITY_NV GL_SHADER_CONSISTENT_NV GL_TEXTURE_SHADER_NV GL_SHADER_OPERATION_NV GL_CULL_MODES_NV GL_OFFSET_TEXTURE_MATRIX_NV GL_OFFSET_TEXTURE_SCALE_NV GL_OFFSET_TEXTURE_BIAS_NV GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_2D_BIAS_NV GL_PREVIOUS_TEXTURE_INPUT_NV GL_CONST_EYE_NV GL_PASS_THROUGH_NV GL_CULL_FRAGMENT_NV GL_OFFSET_TEXTURE_2D_NV GL_DEPENDENT_AR_TEXTURE_2D_NV GL_DEPENDENT_GB_TEXTURE_2D_NV GL_DOT_PRODUCT_NV GL_DOT_PRODUCT_DEPTH_REPLACE_NV GL_DOT_PRODUCT_TEXTURE_2D_NV GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV GL_HILO_NV GL_DSDT_NV GL_DSDT_MAG_NV GL_DSDT_MAG_VIB_NV GL_HILO16_NV GL_SIGNED_HILO_NV GL_SIGNED_HILO16_NV GL_SIGNED_RGBA_NV GL_SIGNED_RGBA8_NV GL_SIGNED_RGB_NV GL_SIGNED_RGB8_NV GL_SIGNED_LUMINANCE_NV GL_SIGNED_LUMINANCE8_NV GL_SIGNED_LUMINANCE_ALPHA_NV GL_SIGNED_LUMINANCE8_ALPHA8_NV GL_SIGNED_ALPHA_NV GL_SIGNED_ALPHA8_NV GL_SIGNED_INTENSITY_NV GL_SIGNED_INTENSITY8_NV GL_DSDT8_NV GL_DSDT8_MAG8_NV GL_DSDT8_MAG8_INTENSITY8_NV GL_SIGNED_RGB_UNSIGNED_ALPHA_NV GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV GL_HI_SCALE_NV GL_LO_SCALE_NV GL_DS_SCALE_NV GL_DT_SCALE_NV GL_MAGNITUDE_SCALE_NV GL_VIBRANCE_SCALE_NV GL_HI_BIAS_NV GL_LO_BIAS_NV GL_DS_BIAS_NV GL_DT_BIAS_NV GL_MAGNITUDE_BIAS_NV GL_VIBRANCE_BIAS_NV GL_TEXTURE_BORDER_VALUES_NV GL_TEXTURE_HI_SIZE_NV GL_TEXTURE_LO_SIZE_NV GL_TEXTURE_DS_SIZE_NV GL_TEXTURE_DT_SIZE_NV GL_TEXTURE_MAG_SIZE_NV GL_DOT_PRODUCT_TEXTURE_3D_NV GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV GL_VERTEX_PROGRAM_NV GL_VERTEX_STATE_PROGRAM_NV GL_ATTRIB_ARRAY_SIZE_NV GL_ATTRIB_ARRAY_STRIDE_NV GL_ATTRIB_ARRAY_TYPE_NV GL_CURRENT_ATTRIB_NV GL_PROGRAM_LENGTH_NV GL_PROGRAM_STRING_NV GL_MODELVIEW_PROJECTION_NV GL_IDENTITY_NV GL_INVERSE_NV GL_TRANSPOSE_NV GL_INVERSE_TRANSPOSE_NV GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV GL_MAX_TRACK_MATRICES_NV GL_MATRIX0_NV GL_MATRIX1_NV GL_MATRIX2_NV GL_MATRIX3_NV GL_MATRIX4_NV GL_MATRIX5_NV GL_MATRIX6_NV GL_MATRIX7_NV GL_CURRENT_MATRIX_STACK_DEPTH_NV GL_CURRENT_MATRIX_NV GL_VERTEX_PROGRAM_POINT_SIZE_NV GL_VERTEX_PROGRAM_TWO_SIDE_NV GL_PROGRAM_PARAMETER_NV GL_ATTRIB_ARRAY_POINTER_NV GL_PROGRAM_TARGET_NV GL_PROGRAM_RESIDENT_NV GL_TRACK_MATRIX_NV GL_TRACK_MATRIX_TRANSFORM_NV GL_VERTEX_PROGRAM_BINDING_NV GL_PROGRAM_ERROR_POSITION_NV GL_VERTEX_ATTRIB_ARRAY0_NV GL_VERTEX_ATTRIB_ARRAY1_NV GL_VERTEX_ATTRIB_ARRAY2_NV GL_VERTEX_ATTRIB_ARRAY3_NV GL_VERTEX_ATTRIB_ARRAY4_NV GL_VERTEX_ATTRIB_ARRAY5_NV GL_VERTEX_ATTRIB_ARRAY6_NV GL_VERTEX_ATTRIB_ARRAY7_NV GL_VERTEX_ATTRIB_ARRAY8_NV GL_VERTEX_ATTRIB_ARRAY9_NV GL_VERTEX_ATTRIB_ARRAY10_NV GL_VERTEX_ATTRIB_ARRAY11_NV GL_VERTEX_ATTRIB_ARRAY12_NV GL_VERTEX_ATTRIB_ARRAY13_NV GL_VERTEX_ATTRIB_ARRAY14_NV GL_VERTEX_ATTRIB_ARRAY15_NV GL_MAP1_VERTEX_ATTRIB0_4_NV GL_MAP1_VERTEX_ATTRIB1_4_NV GL_MAP1_VERTEX_ATTRIB2_4_NV GL_MAP1_VERTEX_ATTRIB3_4_NV GL_MAP1_VERTEX_ATTRIB4_4_NV GL_MAP1_VERTEX_ATTRIB5_4_NV GL_MAP1_VERTEX_ATTRIB6_4_NV GL_MAP1_VERTEX_ATTRIB7_4_NV GL_MAP1_VERTEX_ATTRIB8_4_NV GL_MAP1_VERTEX_ATTRIB9_4_NV GL_MAP1_VERTEX_ATTRIB10_4_NV GL_MAP1_VERTEX_ATTRIB11_4_NV GL_MAP1_VERTEX_ATTRIB12_4_NV GL_MAP1_VERTEX_ATTRIB13_4_NV GL_MAP1_VERTEX_ATTRIB14_4_NV GL_MAP1_VERTEX_ATTRIB15_4_NV GL_MAP2_VERTEX_ATTRIB0_4_NV GL_MAP2_VERTEX_ATTRIB1_4_NV GL_MAP2_VERTEX_ATTRIB2_4_NV GL_MAP2_VERTEX_ATTRIB3_4_NV GL_MAP2_VERTEX_ATTRIB4_4_NV GL_MAP2_VERTEX_ATTRIB5_4_NV GL_MAP2_VERTEX_ATTRIB6_4_NV GL_MAP2_VERTEX_ATTRIB7_4_NV GL_MAP2_VERTEX_ATTRIB8_4_NV GL_MAP2_VERTEX_ATTRIB9_4_NV GL_MAP2_VERTEX_ATTRIB10_4_NV GL_MAP2_VERTEX_ATTRIB11_4_NV GL_MAP2_VERTEX_ATTRIB12_4_NV GL_MAP2_VERTEX_ATTRIB13_4_NV GL_MAP2_VERTEX_ATTRIB14_4_NV GL_MAP2_VERTEX_ATTRIB15_4_NV GL_TEXTURE_MAX_CLAMP_S_SGIX GL_TEXTURE_MAX_CLAMP_T_SGIX GL_TEXTURE_MAX_CLAMP_R_SGIX GL_SCALEBIAS_HINT_SGIX GL_INTERLACE_OML GL_INTERLACE_READ_OML GL_FORMAT_SUBSAMPLE_24_24_OML GL_FORMAT_SUBSAMPLE_244_244_OML GL_PACK_RESAMPLE_OML GL_UNPACK_RESAMPLE_OML GL_RESAMPLE_REPLICATE_OML GL_RESAMPLE_ZERO_FILL_OML GL_RESAMPLE_AVERAGE_OML GL_RESAMPLE_DECIMATE_OML GL_DEPTH_STENCIL_TO_RGBA_NV GL_DEPTH_STENCIL_TO_BGRA_NV GL_BUMP_ROT_MATRIX_ATI GL_BUMP_ROT_MATRIX_SIZE_ATI GL_BUMP_NUM_TEX_UNITS_ATI GL_BUMP_TEX_UNITS_ATI GL_DUDV_ATI GL_DU8DV8_ATI GL_BUMP_ENVMAP_ATI GL_BUMP_TARGET_ATI GL_FRAGMENT_SHADER_ATI GL_REG_0_ATI GL_REG_1_ATI GL_REG_2_ATI GL_REG_3_ATI GL_REG_4_ATI GL_REG_5_ATI GL_REG_6_ATI GL_REG_7_ATI GL_REG_8_ATI GL_REG_9_ATI GL_REG_10_ATI GL_REG_11_ATI GL_REG_12_ATI GL_REG_13_ATI GL_REG_14_ATI GL_REG_15_ATI GL_REG_16_ATI GL_REG_17_ATI GL_REG_18_ATI GL_REG_19_ATI GL_REG_20_ATI GL_REG_21_ATI GL_REG_22_ATI GL_REG_23_ATI GL_REG_24_ATI GL_REG_25_ATI GL_REG_26_ATI GL_REG_27_ATI GL_REG_28_ATI GL_REG_29_ATI GL_REG_30_ATI GL_REG_31_ATI GL_CON_0_ATI GL_CON_1_ATI GL_CON_2_ATI GL_CON_3_ATI GL_CON_4_ATI GL_CON_5_ATI GL_CON_6_ATI GL_CON_7_ATI GL_CON_8_ATI GL_CON_9_ATI GL_CON_10_ATI GL_CON_11_ATI GL_CON_12_ATI GL_CON_13_ATI GL_CON_14_ATI GL_CON_15_ATI GL_CON_16_ATI GL_CON_17_ATI GL_CON_18_ATI GL_CON_19_ATI GL_CON_20_ATI GL_CON_21_ATI GL_CON_22_ATI GL_CON_23_ATI GL_CON_24_ATI GL_CON_25_ATI GL_CON_26_ATI GL_CON_27_ATI GL_CON_28_ATI GL_CON_29_ATI GL_CON_30_ATI GL_CON_31_ATI GL_MOV_ATI GL_ADD_ATI GL_MUL_ATI GL_SUB_ATI GL_DOT3_ATI GL_DOT4_ATI GL_MAD_ATI GL_LERP_ATI GL_CND_ATI GL_CND0_ATI GL_DOT2_ADD_ATI GL_SECONDARY_INTERPOLATOR_ATI GL_NUM_FRAGMENT_REGISTERS_ATI GL_NUM_FRAGMENT_CONSTANTS_ATI GL_NUM_PASSES_ATI GL_NUM_INSTRUCTIONS_PER_PASS_ATI GL_NUM_INSTRUCTIONS_TOTAL_ATI GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI GL_NUM_LOOPBACK_COMPONENTS_ATI GL_COLOR_ALPHA_PAIRING_ATI GL_SWIZZLE_STR_ATI GL_SWIZZLE_STQ_ATI GL_SWIZZLE_STR_DR_ATI GL_SWIZZLE_STQ_DQ_ATI GL_SWIZZLE_STRQ_ATI GL_SWIZZLE_STRQ_DQ_ATI GL_RED_BIT_ATI GL_GREEN_BIT_ATI GL_BLUE_BIT_ATI GL_2X_BIT_ATI GL_4X_BIT_ATI GL_8X_BIT_ATI GL_HALF_BIT_ATI GL_QUARTER_BIT_ATI GL_EIGHTH_BIT_ATI GL_SATURATE_BIT_ATI GL_COMP_BIT_ATI GL_NEGATE_BIT_ATI GL_BIAS_BIT_ATI GL_PN_TRIANGLES_ATI GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI GL_PN_TRIANGLES_POINT_MODE_ATI GL_PN_TRIANGLES_NORMAL_MODE_ATI GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI GL_STATIC_ATI GL_DYNAMIC_ATI GL_PRESERVE_ATI GL_DISCARD_ATI GL_OBJECT_BUFFER_SIZE_ATI GL_OBJECT_BUFFER_USAGE_ATI GL_ARRAY_OBJECT_BUFFER_ATI GL_ARRAY_OBJECT_OFFSET_ATI GL_VERTEX_SHADER_EXT GL_VERTEX_SHADER_BINDING_EXT GL_OP_INDEX_EXT GL_OP_NEGATE_EXT GL_OP_DOT3_EXT GL_OP_DOT4_EXT GL_OP_MUL_EXT GL_OP_ADD_EXT GL_OP_MADD_EXT GL_OP_FRAC_EXT GL_OP_MAX_EXT GL_OP_MIN_EXT GL_OP_SET_GE_EXT GL_OP_SET_LT_EXT GL_OP_CLAMP_EXT GL_OP_FLOOR_EXT GL_OP_ROUND_EXT GL_OP_EXP_BASE_2_EXT GL_OP_LOG_BASE_2_EXT GL_OP_POWER_EXT GL_OP_RECIP_EXT GL_OP_RECIP_SQRT_EXT GL_OP_SUB_EXT GL_OP_CROSS_PRODUCT_EXT GL_OP_MULTIPLY_MATRIX_EXT GL_OP_MOV_EXT GL_OUTPUT_VERTEX_EXT GL_OUTPUT_COLOR0_EXT GL_OUTPUT_COLOR1_EXT GL_OUTPUT_TEXTURE_COORD0_EXT GL_OUTPUT_TEXTURE_COORD1_EXT GL_OUTPUT_TEXTURE_COORD2_EXT GL_OUTPUT_TEXTURE_COORD3_EXT GL_OUTPUT_TEXTURE_COORD4_EXT GL_OUTPUT_TEXTURE_COORD5_EXT GL_OUTPUT_TEXTURE_COORD6_EXT GL_OUTPUT_TEXTURE_COORD7_EXT GL_OUTPUT_TEXTURE_COORD8_EXT GL_OUTPUT_TEXTURE_COORD9_EXT GL_OUTPUT_TEXTURE_COORD10_EXT GL_OUTPUT_TEXTURE_COORD11_EXT GL_OUTPUT_TEXTURE_COORD12_EXT GL_OUTPUT_TEXTURE_COORD13_EXT GL_OUTPUT_TEXTURE_COORD14_EXT GL_OUTPUT_TEXTURE_COORD15_EXT GL_OUTPUT_TEXTURE_COORD16_EXT GL_OUTPUT_TEXTURE_COORD17_EXT GL_OUTPUT_TEXTURE_COORD18_EXT GL_OUTPUT_TEXTURE_COORD19_EXT GL_OUTPUT_TEXTURE_COORD20_EXT GL_OUTPUT_TEXTURE_COORD21_EXT GL_OUTPUT_TEXTURE_COORD22_EXT GL_OUTPUT_TEXTURE_COORD23_EXT GL_OUTPUT_TEXTURE_COORD24_EXT GL_OUTPUT_TEXTURE_COORD25_EXT GL_OUTPUT_TEXTURE_COORD26_EXT GL_OUTPUT_TEXTURE_COORD27_EXT GL_OUTPUT_TEXTURE_COORD28_EXT GL_OUTPUT_TEXTURE_COORD29_EXT GL_OUTPUT_TEXTURE_COORD30_EXT GL_OUTPUT_TEXTURE_COORD31_EXT GL_OUTPUT_FOG_EXT GL_SCALAR_EXT GL_VECTOR_EXT GL_MATRIX_EXT GL_VARIANT_EXT GL_INVARIANT_EXT GL_LOCAL_CONSTANT_EXT GL_LOCAL_EXT GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT GL_MAX_VERTEX_SHADER_VARIANTS_EXT GL_MAX_VERTEX_SHADER_INVARIANTS_EXT GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT GL_MAX_VERTEX_SHADER_LOCALS_EXT GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT GL_VERTEX_SHADER_INSTRUCTIONS_EXT GL_VERTEX_SHADER_VARIANTS_EXT GL_VERTEX_SHADER_INVARIANTS_EXT GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT GL_VERTEX_SHADER_LOCALS_EXT GL_VERTEX_SHADER_OPTIMIZED_EXT GL_X_EXT GL_Y_EXT GL_Z_EXT GL_W_EXT GL_NEGATIVE_X_EXT GL_NEGATIVE_Y_EXT GL_NEGATIVE_Z_EXT GL_NEGATIVE_W_EXT GL_ZERO_EXT GL_ONE_EXT GL_NEGATIVE_ONE_EXT GL_NORMALIZED_RANGE_EXT GL_FULL_RANGE_EXT GL_CURRENT_VERTEX_EXT GL_MVP_MATRIX_EXT GL_VARIANT_VALUE_EXT GL_VARIANT_DATATYPE_EXT GL_VARIANT_ARRAY_STRIDE_EXT GL_VARIANT_ARRAY_TYPE_EXT GL_VARIANT_ARRAY_EXT GL_VARIANT_ARRAY_POINTER_EXT GL_INVARIANT_VALUE_EXT GL_INVARIANT_DATATYPE_EXT GL_LOCAL_CONSTANT_VALUE_EXT GL_LOCAL_CONSTANT_DATATYPE_EXT GL_MAX_VERTEX_STREAMS_ATI GL_VERTEX_STREAM0_ATI GL_VERTEX_STREAM1_ATI GL_VERTEX_STREAM2_ATI GL_VERTEX_STREAM3_ATI GL_VERTEX_STREAM4_ATI GL_VERTEX_STREAM5_ATI GL_VERTEX_STREAM6_ATI GL_VERTEX_STREAM7_ATI GL_VERTEX_SOURCE_ATI GL_ELEMENT_ARRAY_ATI GL_ELEMENT_ARRAY_TYPE_ATI GL_ELEMENT_ARRAY_POINTER_ATI GL_QUAD_MESH_SUN GL_TRIANGLE_MESH_SUN GL_SLICE_ACCUM_SUN GL_MULTISAMPLE_FILTER_HINT_NV GL_DEPTH_CLAMP_NV GL_PIXEL_COUNTER_BITS_NV GL_CURRENT_OCCLUSION_QUERY_ID_NV GL_PIXEL_COUNT_NV GL_PIXEL_COUNT_AVAILABLE_NV GL_POINT_SPRITE_NV GL_COORD_REPLACE_NV GL_POINT_SPRITE_R_MODE_NV GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV GL_OFFSET_HILO_TEXTURE_2D_NV GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV GL_DEPENDENT_HILO_TEXTURE_2D_NV GL_DEPENDENT_RGB_TEXTURE_3D_NV GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV GL_DOT_PRODUCT_PASS_THROUGH_NV GL_DOT_PRODUCT_TEXTURE_1D_NV GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV GL_HILO8_NV GL_SIGNED_HILO8_NV GL_FORCE_BLUE_TO_ONE_NV GL_STENCIL_TEST_TWO_SIDE_EXT GL_ACTIVE_STENCIL_FACE_EXT GL_TEXT_FRAGMENT_SHADER_ATI GL_UNPACK_CLIENT_STORAGE_APPLE GL_ELEMENT_ARRAY_APPLE GL_ELEMENT_ARRAY_TYPE_APPLE GL_ELEMENT_ARRAY_POINTER_APPLE GL_DRAW_PIXELS_APPLE GL_FENCE_APPLE GL_VERTEX_ARRAY_BINDING_APPLE GL_VERTEX_ARRAY_RANGE_APPLE GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE GL_VERTEX_ARRAY_STORAGE_HINT_APPLE GL_VERTEX_ARRAY_RANGE_POINTER_APPLE GL_STORAGE_CACHED_APPLE GL_STORAGE_SHARED_APPLE GL_YCBCR_422_APPLE GL_UNSIGNED_SHORT_8_8_APPLE GL_UNSIGNED_SHORT_8_8_REV_APPLE GL_RGB_S3TC GL_RGB4_S3TC GL_RGBA_S3TC GL_RGBA4_S3TC GL_MAX_DRAW_BUFFERS_ATI GL_DRAW_BUFFER0_ATI GL_DRAW_BUFFER1_ATI GL_DRAW_BUFFER2_ATI GL_DRAW_BUFFER3_ATI GL_DRAW_BUFFER4_ATI GL_DRAW_BUFFER5_ATI GL_DRAW_BUFFER6_ATI GL_DRAW_BUFFER7_ATI GL_DRAW_BUFFER8_ATI GL_DRAW_BUFFER9_ATI GL_DRAW_BUFFER10_ATI GL_DRAW_BUFFER11_ATI GL_DRAW_BUFFER12_ATI GL_DRAW_BUFFER13_ATI GL_DRAW_BUFFER14_ATI GL_DRAW_BUFFER15_ATI GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI GL_MODULATE_ADD_ATI GL_MODULATE_SIGNED_ADD_ATI GL_MODULATE_SUBTRACT_ATI GL_RGBA_FLOAT32_ATI GL_RGB_FLOAT32_ATI GL_ALPHA_FLOAT32_ATI GL_INTENSITY_FLOAT32_ATI GL_LUMINANCE_FLOAT32_ATI GL_LUMINANCE_ALPHA_FLOAT32_ATI GL_RGBA_FLOAT16_ATI GL_RGB_FLOAT16_ATI GL_ALPHA_FLOAT16_ATI GL_INTENSITY_FLOAT16_ATI GL_LUMINANCE_FLOAT16_ATI GL_LUMINANCE_ALPHA_FLOAT16_ATI GL_FLOAT_R_NV GL_FLOAT_RG_NV GL_FLOAT_RGB_NV GL_FLOAT_RGBA_NV GL_FLOAT_R16_NV GL_FLOAT_R32_NV GL_FLOAT_RG16_NV GL_FLOAT_RG32_NV GL_FLOAT_RGB16_NV GL_FLOAT_RGB32_NV GL_FLOAT_RGBA16_NV GL_FLOAT_RGBA32_NV GL_TEXTURE_FLOAT_COMPONENTS_NV GL_FLOAT_CLEAR_COLOR_VALUE_NV GL_FLOAT_RGBA_MODE_NV GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV GL_FRAGMENT_PROGRAM_NV GL_MAX_TEXTURE_COORDS_NV GL_MAX_TEXTURE_IMAGE_UNITS_NV GL_FRAGMENT_PROGRAM_BINDING_NV GL_PROGRAM_ERROR_STRING_NV GL_HALF_FLOAT_NV GL_WRITE_PIXEL_DATA_RANGE_NV GL_READ_PIXEL_DATA_RANGE_NV GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV GL_READ_PIXEL_DATA_RANGE_LENGTH_NV GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV GL_READ_PIXEL_DATA_RANGE_POINTER_NV GL_PRIMITIVE_RESTART_NV GL_PRIMITIVE_RESTART_INDEX_NV GL_TEXTURE_UNSIGNED_REMAP_MODE_NV GL_STENCIL_BACK_FUNC_ATI GL_STENCIL_BACK_FAIL_ATI GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI GL_IMPLEMENTATION_COLOR_READ_TYPE_OES GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES GL_DEPTH_BOUNDS_TEST_EXT GL_DEPTH_BOUNDS_EXT GL_MIRROR_CLAMP_EXT GL_MIRROR_CLAMP_TO_EDGE_EXT GL_MIRROR_CLAMP_TO_BORDER_EXT GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION_ALPHA_EXT GL_PACK_INVERT_MESA GL_UNSIGNED_SHORT_8_8_MESA GL_UNSIGNED_SHORT_8_8_REV_MESA GL_YCBCR_MESA GL_PIXEL_PACK_BUFFER_EXT GL_PIXEL_UNPACK_BUFFER_EXT GL_PIXEL_PACK_BUFFER_BINDING_EXT GL_PIXEL_UNPACK_BUFFER_BINDING_EXT GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV GL_MAX_PROGRAM_CALL_DEPTH_NV GL_MAX_PROGRAM_IF_DEPTH_NV GL_MAX_PROGRAM_LOOP_DEPTH_NV GL_MAX_PROGRAM_LOOP_COUNT_NV GL_INVALID_FRAMEBUFFER_OPERATION_EXT GL_MAX_RENDERBUFFER_SIZE_EXT GL_FRAMEBUFFER_BINDING_EXT GL_RENDERBUFFER_BINDING_EXT GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT GL_FRAMEBUFFER_UNSUPPORTED_EXT GL_MAX_COLOR_ATTACHMENTS_EXT GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT1_EXT GL_COLOR_ATTACHMENT2_EXT GL_COLOR_ATTACHMENT3_EXT GL_COLOR_ATTACHMENT4_EXT GL_COLOR_ATTACHMENT5_EXT GL_COLOR_ATTACHMENT6_EXT GL_COLOR_ATTACHMENT7_EXT GL_COLOR_ATTACHMENT8_EXT GL_COLOR_ATTACHMENT9_EXT GL_COLOR_ATTACHMENT10_EXT GL_COLOR_ATTACHMENT11_EXT GL_COLOR_ATTACHMENT12_EXT GL_COLOR_ATTACHMENT13_EXT GL_COLOR_ATTACHMENT14_EXT GL_COLOR_ATTACHMENT15_EXT GL_DEPTH_ATTACHMENT_EXT GL_STENCIL_ATTACHMENT_EXT GL_FRAMEBUFFER_EXT GL_RENDERBUFFER_EXT GL_RENDERBUFFER_WIDTH_EXT GL_RENDERBUFFER_HEIGHT_EXT GL_RENDERBUFFER_INTERNAL_FORMAT_EXT GL_STENCIL_INDEX1_EXT GL_STENCIL_INDEX4_EXT GL_STENCIL_INDEX8_EXT GL_STENCIL_INDEX16_EXT GL_RENDERBUFFER_RED_SIZE_EXT GL_RENDERBUFFER_GREEN_SIZE_EXT GL_RENDERBUFFER_BLUE_SIZE_EXT GL_RENDERBUFFER_ALPHA_SIZE_EXT GL_RENDERBUFFER_DEPTH_SIZE_EXT GL_RENDERBUFFER_STENCIL_SIZE_EXT GL_CURRENT_BIT GL_POINT_BIT GL_LINE_BIT GL_POLYGON_BIT GL_POLYGON_STIPPLE_BIT GL_PIXEL_MODE_BIT GL_LIGHTING_BIT GL_FOG_BIT GL_DEPTH_BUFFER_BIT GL_ACCUM_BUFFER_BIT GL_STENCIL_BUFFER_BIT GL_VIEWPORT_BIT GL_TRANSFORM_BIT GL_ENABLE_BIT GL_COLOR_BUFFER_BIT GL_HINT_BIT GL_EVAL_BIT GL_LIST_BIT GL_TEXTURE_BIT GL_SCISSOR_BIT GL_ALL_ATTRIB_BITS GL_CLIENT_PIXEL_STORE_BIT GL_CLIENT_VERTEX_ARRAY_BIT GL_ALL_CLIENT_ATTRIB_BITS GL_CLIENT_ALL_ATTRIB_BITS GL_CG_VERTEX_SHADER_EXT GL_CG_FRAGMENT_SHADER_EXT GL_BUFFER_SIZE_ARB GL_BUFFER_USAGE_ARB GL_ARRAY_BUFFER_ARB GL_ELEMENT_ARRAY_BUFFER_ARB GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB GL_READ_ONLY_ARB GL_WRITE_ONLY_ARB GL_READ_WRITE_ARB GL_BUFFER_ACCESS_ARB GL_BUFFER_MAPPED_ARB GL_BUFFER_MAP_POINTER_ARB GL_STREAM_DRAW_ARB GL_STREAM_READ_ARB GL_STREAM_COPY_ARB GL_STATIC_DRAW_ARB GL_STATIC_READ_ARB GL_STATIC_COPY_ARB GL_DYNAMIC_DRAW_ARB GL_DYNAMIC_READ_ARB GL_DYNAMIC_COPY_ARB GL_POINT_SIZE_MIN_ARB GL_POINT_SIZE_MAX_ARB GL_POINT_FADE_THRESHOLD_SIZE_ARB GL_POINT_DISTANCE_ATTENUATION_ARB GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_MULTISAMPLE_BIT_ARB GL_RGBA_FLOAT_MODE_ARB GL_CLAMP_VERTEX_COLOR_ARB GL_CLAMP_FRAGMENT_COLOR_ARB GL_CLAMP_READ_COLOR_ARB GL_FIXED_ONLY_ARB ); # gl_const @glu_const = qw( GLU_SMOOTH GLU_FLAT GLU_NONE GLU_POINT GLU_LINE GLU_FILL GLU_SILHOUETTE GLU_OUTSIDE GLU_INSIDE GLU_BEGIN GLU_VERTEX GLU_END GLU_ERROR GLU_EDGE_FLAG GLU_CW GLU_CCW GLU_INTERIOR GLU_EXTERIOR GLU_UNKNOWN GLU_TESS_ERROR GLU_TESS_BEGIN GLU_TESS_EDGE_FLAG GLU_TESS_VERTEX GLU_TESS_COMBINE GLU_TESS_END GLU_TESS_ERROR_DATA GLU_TESS_BEGIN_DATA GLU_TESS_EDGE_FLAG_DATA GLU_TESS_VERTEX_DATA GLU_TESS_COMBINE_DATA GLU_TESS_END_DATA GLU_TESS_WINDING_RULE GLU_TESS_WINDING_ODD GLU_TESS_WINDING_NONZERO GLU_TESS_WINDING_POSITIVE GLU_TESS_WINDING_NEGATIVE GLU_TESS_WINDING_ABS_GEQ_TWO GLU_TESS_ERROR1 GLU_TESS_ERROR2 GLU_TESS_ERROR3 GLU_TESS_ERROR4 GLU_TESS_ERROR5 GLU_TESS_ERROR6 GLU_TESS_ERROR7 GLU_TESS_ERROR8 GLU_AUTO_LOAD_MATRIX GLU_CULLING GLU_SAMPLING_TOLERANCE GLU_DISPLAY_MODE GLU_PATH_LENGTH GLU_PARAMETRIC_ERROR GLU_DOMAIN_DISTANCE GLU_MAP1_TRIM_2 GLU_MAP1_TRIM_3 GLU_OUTLINE_POLYGON GLU_OUTLINE_PATCH GLU_NURBS_ERROR1 GLU_NURBS_ERROR2 GLU_NURBS_ERROR3 GLU_NURBS_ERROR4 GLU_NURBS_ERROR5 GLU_NURBS_ERROR6 GLU_NURBS_ERROR7 GLU_NURBS_ERROR8 GLU_NURBS_ERROR9 GLU_NURBS_ERROR10 GLU_NURBS_ERROR11 GLU_NURBS_ERROR12 GLU_NURBS_ERROR13 GLU_NURBS_ERROR14 GLU_NURBS_ERROR15 GLU_NURBS_ERROR16 GLU_NURBS_ERROR17 GLU_NURBS_ERROR18 GLU_NURBS_ERROR19 GLU_NURBS_ERROR20 GLU_NURBS_ERROR21 GLU_NURBS_ERROR22 GLU_NURBS_ERROR23 GLU_NURBS_ERROR24 GLU_NURBS_ERROR25 GLU_NURBS_ERROR26 GLU_NURBS_ERROR27 GLU_NURBS_ERROR28 GLU_NURBS_ERROR29 GLU_NURBS_ERROR30 GLU_NURBS_ERROR31 GLU_NURBS_ERROR32 GLU_NURBS_ERROR33 GLU_NURBS_ERROR34 GLU_NURBS_ERROR35 GLU_NURBS_ERROR36 GLU_NURBS_ERROR37 GLU_INVALID_ENUM GLU_INVALID_VALUE GLU_OUT_OF_MEMORY GLU_INCOMPATIBLE_GL_VERSION GLU_VERSION GLU_EXTENSIONS GLU_SAMPLING_METHOD GLU_PARAMETRIC_TOLERANCE GLU_U_STEP GLU_V_STEP GLU_OBJECT_PARAMETRIC_ERROR_EXT GLU_OBJECT_PATH_LENGTH_EXT ); @glut_const = qw( GLUT_API_VERSION GLUT_XLIB_IMPLEMENTATION GLUT_RGB GLUT_RGBA GLUT_INDEX GLUT_INIT_STATE GLUT_SINGLE GLUT_DOUBLE GLUT_ACCUM GLUT_ALPHA GLUT_DEPTH GLUT_STENCIL GLUT_MULTISAMPLE GLUT_STEREO GLUT_LUMINANCE GLUT_LEFT_BUTTON GLUT_MIDDLE_BUTTON GLUT_RIGHT_BUTTON GLUT_DOWN GLUT_UP GLUT_KEY_F1 GLUT_KEY_F2 GLUT_KEY_F3 GLUT_KEY_F4 GLUT_KEY_F5 GLUT_KEY_F6 GLUT_KEY_F7 GLUT_KEY_F8 GLUT_KEY_F9 GLUT_KEY_F10 GLUT_KEY_F11 GLUT_KEY_F12 GLUT_KEY_LEFT GLUT_KEY_UP GLUT_KEY_RIGHT GLUT_KEY_DOWN GLUT_KEY_PAGE_UP GLUT_KEY_PAGE_DOWN GLUT_KEY_HOME GLUT_KEY_END GLUT_KEY_INSERT GLUT_LEFT GLUT_ENTERED GLUT_MENU_NOT_IN_USE GLUT_MENU_IN_USE GLUT_NOT_VISIBLE GLUT_VISIBLE GLUT_HIDDEN GLUT_FULLY_RETAINED GLUT_PARTIALLY_RETAINED GLUT_FULLY_COVERED GLUT_RED GLUT_GREEN GLUT_BLUE GLUT_NORMAL GLUT_OVERLAY GLUT_STROKE_ROMAN GLUT_STROKE_MONO_ROMAN GLUT_BITMAP_9_BY_15 GLUT_BITMAP_8_BY_13 GLUT_BITMAP_TIMES_ROMAN_10 GLUT_BITMAP_TIMES_ROMAN_24 GLUT_BITMAP_HELVETICA_10 GLUT_BITMAP_HELVETICA_12 GLUT_BITMAP_HELVETICA_18 GLUT_WINDOW_X GLUT_WINDOW_Y GLUT_WINDOW_WIDTH GLUT_WINDOW_HEIGHT GLUT_WINDOW_BUFFER_SIZE GLUT_WINDOW_STENCIL_SIZE GLUT_WINDOW_DEPTH_SIZE GLUT_WINDOW_RED_SIZE GLUT_WINDOW_GREEN_SIZE GLUT_WINDOW_BLUE_SIZE GLUT_WINDOW_ALPHA_SIZE GLUT_WINDOW_ACCUM_RED_SIZE GLUT_WINDOW_ACCUM_GREEN_SIZE GLUT_WINDOW_ACCUM_BLUE_SIZE GLUT_WINDOW_ACCUM_ALPHA_SIZE GLUT_WINDOW_DOUBLEBUFFER GLUT_WINDOW_RGBA GLUT_WINDOW_PARENT GLUT_WINDOW_NUM_CHILDREN GLUT_WINDOW_COLORMAP_SIZE GLUT_WINDOW_NUM_SAMPLES GLUT_WINDOW_STEREO GLUT_WINDOW_CURSOR GLUT_WINDOW_FORMAT_ID GLUT_SCREEN_WIDTH GLUT_SCREEN_HEIGHT GLUT_SCREEN_WIDTH_MM GLUT_SCREEN_HEIGHT_MM GLUT_MENU_NUM_ITEMS GLUT_DISPLAY_MODE_POSSIBLE GLUT_INIT_WINDOW_X GLUT_INIT_WINDOW_Y GLUT_INIT_WINDOW_WIDTH GLUT_INIT_WINDOW_HEIGHT GLUT_INIT_DISPLAY_MODE GLUT_ELAPSED_TIME GLUT_HAS_KEYBOARD GLUT_HAS_MOUSE GLUT_HAS_SPACEBALL GLUT_HAS_DIAL_AND_BUTTON_BOX GLUT_HAS_TABLET GLUT_NUM_MOUSE_BUTTONS GLUT_NUM_SPACEBALL_BUTTONS GLUT_NUM_BUTTON_BOX_BUTTONS GLUT_NUM_DIALS GLUT_NUM_TABLET_BUTTONS GLUT_OVERLAY_POSSIBLE GLUT_LAYER_IN_USE GLUT_HAS_OVERLAY GLUT_TRANSPARENT_INDEX GLUT_NORMAL_DAMAGED GLUT_OVERLAY_DAMAGED GLUT_NORMAL GLUT_OVERLAY GLUT_ACTIVE_SHIFT GLUT_ACTIVE_CTRL GLUT_ACTIVE_ALT GLUT_CURSOR_RIGHT_ARROW GLUT_CURSOR_LEFT_ARROW GLUT_CURSOR_INFO GLUT_CURSOR_DESTROY GLUT_CURSOR_HELP GLUT_CURSOR_CYCLE GLUT_CURSOR_SPRAY GLUT_CURSOR_WAIT GLUT_CURSOR_TEXT GLUT_CURSOR_CROSSHAIR GLUT_CURSOR_UP_DOWN GLUT_CURSOR_LEFT_RIGHT GLUT_CURSOR_TOP_SIDE GLUT_CURSOR_BOTTOM_SIDE GLUT_CURSOR_LEFT_SIDE GLUT_CURSOR_RIGHT_SIDE GLUT_CURSOR_TOP_LEFT_CORNER GLUT_CURSOR_TOP_RIGHT_CORNER GLUT_CURSOR_BOTTOM_RIGHT_CORNER GLUT_CURSOR_BOTTOM_LEFT_CORNER GLUT_CURSOR_INHERIT GLUT_CURSOR_NONE GLUT_CURSOR_FULL_CROSSHAIR GLUT_ACTION_EXIT GLUT_ACTION_GLUTMAINLOOP_RETURNS GLUT_ACTION_CONTINUE_EXECUTION GLUT_ACTION_ON_WINDOW_CLOSE GLUT_GAME_MODE_ACTIVE GLUT_GAME_MODE_POSSIBLE GLUT_GAME_MODE_WIDTH GLUT_GAME_MODE_HEIGHT GLUT_GAME_MODE_PIXEL_DEPTH GLUT_GAME_MODE_REFRESH_RATE GLUT_GAME_MODE_DISPLAY_CHANGED ); @glx_const = qw( GLX_USE_GL GLX_BUFFER_SIZE GLX_LEVEL GLX_RGBA GLX_DOUBLEBUFFER GLX_STEREO GLX_AUX_BUFFERS GLX_RED_SIZE GLX_GREEN_SIZE GLX_BLUE_SIZE GLX_ALPHA_SIZE GLX_DEPTH_SIZE GLX_STENCIL_SIZE GLX_ACCUM_RED_SIZE GLX_ACCUM_GREEN_SIZE GLX_ACCUM_BLUE_SIZE GLX_ACCUM_ALPHA_SIZE GLX_X_VISUAL_TYPE_EXT GLX_TRANSPARENT_TYPE_EXT GLX_TRANSPARENT_INDEX_VALUE_EXT GLX_TRANSPARENT_RED_VALUE_EXT GLX_TRANSPARENT_GREEN_VALUE_EXT GLX_TRANSPARENT_BLUE_VALUE_EXT GLX_TRANSPARENT_ALPHA_VALUE_EXT X_PROTOCOL X_PROTOCOL_REVISION NoEventMask KeyPressMask KeyReleaseMask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask ExposureMask VisibilityChangeMask StructureNotifyMask ResizeRedirectMask SubstructureNotifyMask SubstructureRedirectMask FocusChangeMask PropertyChangeMask ColormapChangeMask OwnerGrabButtonMask KeyPress KeyRelease ButtonPress ButtonRelease MotionNotify EnterNotify LeaveNotify FocusIn FocusOut KeymapNotify Expose GraphicsExpose NoExpose VisibilityNotify CreateNotify DestroyNotify UnmapNotify MapNotify MapRequest ReparentNotify ConfigureNotify ConfigureRequest GravityNotify ResizeRequest CirculateNotify CirculateRequest PropertyNotify SelectionClear SelectionRequest SelectionNotify ColormapNotify ClientMessage MappingNotify LASTEvent ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask ShiftMapIndex LockMapIndex ControlMapIndex Mod1MapIndex Mod2MapIndex Mod3MapIndex Mod4MapIndex Mod5MapIndex Button1Mask Button2Mask Button3Mask Button4Mask Button5Mask AnyModifier Button1 Button2 Button3 Button4 Button5 NotifyNormal NotifyGrab NotifyUngrab NotifyWhileGrabbed NotifyHint NotifyAncestor NotifyVirtual NotifyInferior NotifyNonlinear NotifyNonlinearVirtual NotifyPointer NotifyPointerRoot NotifyDetailNone VisibilityUnobscured VisibilityPartiallyObscured VisibilityFullyObscured PlaceOnTop PlaceOnBottom FamilyInternet FamilyDECnet FamilyChaos PropertyNewValue PropertyDelete ColormapUninstalled ColormapInstalled GrabModeSync GrabModeAsync GrabSuccess AlreadyGrabbed GrabInvalidTime GrabNotViewable GrabFrozen AsyncPointer SyncPointer ReplayPointer AsyncKeyboard SyncKeyboard ReplayKeyboard AsyncBoth SyncBoth StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor ); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @oldfunctions = qw( glpOpenWindow glpMainLoop glpMoveResizeWindow glpMoveWindow glpResizeWindow glpDisplay glXSwapBuffers XPending glpXNextEvent glpXQueryPointer glpFlush glpSolidSphere glpReadTex glpClipPlane glpGetClipPlane glpLoadMatrixf glpLoadMatrixd glpMultMatrixf glpMultMatrixd gluOrtho2D gluPerspective gluLookAt glAccum glAlphaFunc glBegin glBitmap glBlendColorEXT glBlendEquationEXT glBlendFunc glCallList glCallLists glClear glClearAccum glClearColor glClearDepth glClearIndex glClearStencil glClipPlane glColor3b glColor3bv glColor3d glColor3dv glColor3f glColor3fv glColor3i glColor3iv glColor3s glColor3sv glColor3ub glColor3ubv glColor3ui glColor3uiv glColor3us glColor3usv glColor4b glColor4bv glColor4d glColor4dv glColor4f glColor4fv glColor4i glColor4iv glColor4s glColor4sv glColor4ub glColor4ubv glColor4ui glColor4uiv glColor4us glColor4usv glColorMask glColorMaterial glConvolutionFilter1DEXT glConvolutionFilter2DEXT glConvolutionParameterfEXT glConvolutionParameterfvEXT glConvolutionParameteriEXT glConvolutionParameterivEXT glCopyConvolutionFilter1DEXT glCopyConvolutionFilter2DEXT glCopyPixels glCullFace glDeleteLists glDepthFunc glDepthMask glDepthRange glDetailTexFuncSGIS glDisable glDrawBuffer glDrawPixels glEdgeFlag glEdgeFlagv glEnable glEnd glEndList glEvalCoord1d glEvalCoord1dv glEvalCoord1f glEvalCoord1fv glEvalCoord2d glEvalCoord2dv glEvalCoord2f glEvalCoord2fv glEvalMesh1 glEvalMesh2 glEvalPoint1 glEvalPoint2 glFeedbackBuffer glFinish glFlush glFogf glFogfv glFogi glFogiv glFrontFace glFrustum glGenLists glGetBooleanv glGetClipPlane glGetConvolutionFilterEXT glGetConvolutionParameterfvEXT glGetConvolutionParameterivEXT glGetDetailTexFuncSGIS glGetDoublev glGetError glGetFloatv glGetHistogramEXT glGetHistogramParameterfvEXT glGetHistogramParameterivEXT glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetMinmaxEXT glGetMinmaxParameterfvEXT glGetMinmaxParameterivEXT glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPolygonStipple glGetSeparableFilterEXT glGetSharpenTexFuncSGIS glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glHint glHistogramEXT glIndexMask glIndexd glIndexdv glIndexf glIndexfv glIndexi glIndexiv glIndexs glIndexsv glInitNames glIsEnabled glIsList glLightModelf glLightModelfv glLightModeli glLightModeliv glLightf glLightfv glLighti glLightiv glLineStipple glLineWidth glListBase glLoadIdentity glLoadMatrixd glLoadMatrixf glLoadName glLogicOp glMap1d glMap1f glMap2d glMap2f glMapGrid1d glMapGrid1f glMapGrid2d glMapGrid2f glMaterialf glMaterialfv glMateriali glMaterialiv glMatrixMode glMinmaxEXT glMultMatrixd glMultMatrixf glNewList glNormal3b glNormal3bv glNormal3d glNormal3dv glNormal3f glNormal3fv glNormal3i glNormal3iv glNormal3s glNormal3sv glOrtho glPassThrough glPixelMapfv glPixelMapuiv glPixelMapusv glPixelStoref glPixelStorei glPixelTransferf glPixelTransferi glPixelZoom glPointSize glPolygonMode glPolygonOffsetEXT glPolygonStipple glPopAttrib glPopMatrix glPopName glPushAttrib glPushMatrix glPushName glRasterPos2d glRasterPos2dv glRasterPos2f glRasterPos2fv glRasterPos2i glRasterPos2iv glRasterPos2s glRasterPos2sv glRasterPos3d glRasterPos3dv glRasterPos3f glRasterPos3fv glRasterPos3i glRasterPos3iv glRasterPos3s glRasterPos3sv glRasterPos4d glRasterPos4dv glRasterPos4f glRasterPos4fv glRasterPos4i glRasterPos4iv glRasterPos4s glRasterPos4sv glReadBuffer glReadPixels glRectd glRectdv glRectf glRectfv glRecti glRectiv glRects glRectsv glRenderMode glResetHistogramEXT glResetMinmaxEXT glRotated glRotatef glSampleMaskSGIS glSamplePatternSGIS glScaled glScalef glScissor glSelectBuffer glSeparableFilter2DEXT glShadeModel glSharpenTexFuncSGIS glStencilFunc glStencilMask glStencilOp glTagSampleBufferSGIX glTexCoord1d glTexCoord1dv glTexCoord1f glTexCoord1fv glTexCoord1i glTexCoord1iv glTexCoord1s glTexCoord1sv glTexCoord2d glTexCoord2dv glTexCoord2f glTexCoord2fv glTexCoord2i glTexCoord2iv glTexCoord2s glTexCoord2sv glTexCoord3d glTexCoord3dv glTexCoord3f glTexCoord3fv glTexCoord3i glTexCoord3iv glTexCoord3s glTexCoord3sv glTexCoord4d glTexCoord4dv glTexCoord4f glTexCoord4fv glTexCoord4i glTexCoord4iv glTexCoord4s glTexCoord4sv glTexEnvf glTexEnvfv glTexEnvi glTexEnviv glTexGend glTexGendv glTexGenf glTexGenfv glTexGeni glTexGeniv glTexImage1D glTexImage2D glTexImage3DEXT glTexParameterf glTexParameterfv glTexParameteri glTexParameteriv glTexSubImage1DEXT glTexSubImage2DEXT glTexSubImage3DEXT glTranslated glTranslatef glVertex2d glVertex2dv glVertex2f glVertex2fv glVertex2i glVertex2iv glVertex2s glVertex2sv glVertex3d glVertex3dv glVertex3f glVertex3fv glVertex3i glVertex3iv glVertex3s glVertex3sv glVertex4d glVertex4dv glVertex4f glVertex4fv glVertex4i glVertex4iv glVertex4s glVertex4sv glViewport X_PROTOCOL X_PROTOCOL_REVISION NoEventMask KeyPressMask KeyReleaseMask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask ExposureMask VisibilityChangeMask StructureNotifyMask ResizeRedirectMask SubstructureNotifyMask SubstructureRedirectMask FocusChangeMask PropertyChangeMask ColormapChangeMask OwnerGrabButtonMask KeyPress KeyRelease ButtonPress ButtonRelease MotionNotify EnterNotify LeaveNotify FocusIn FocusOut KeymapNotify Expose GraphicsExpose NoExpose VisibilityNotify CreateNotify DestroyNotify UnmapNotify MapNotify MapRequest ReparentNotify ConfigureNotify ConfigureRequest GravityNotify ResizeRequest CirculateNotify CirculateRequest PropertyNotify SelectionClear SelectionRequest SelectionNotify ColormapNotify ClientMessage MappingNotify LASTEvent ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask ShiftMapIndex LockMapIndex ControlMapIndex Mod1MapIndex Mod2MapIndex Mod3MapIndex Mod4MapIndex Mod5MapIndex Button1Mask Button2Mask Button3Mask Button4Mask Button5Mask AnyModifier Button1 Button2 Button3 Button4 Button5 NotifyNormal NotifyGrab NotifyUngrab NotifyWhileGrabbed NotifyHint NotifyAncestor NotifyVirtual NotifyInferior NotifyNonlinear NotifyNonlinearVirtual NotifyPointer NotifyPointerRoot NotifyDetailNone VisibilityUnobscured VisibilityPartiallyObscured VisibilityFullyObscured PlaceOnTop PlaceOnBottom FamilyInternet FamilyDECnet FamilyChaos PropertyNewValue PropertyDelete ColormapUninstalled ColormapInstalled GrabModeSync GrabModeAsync GrabSuccess AlreadyGrabbed GrabInvalidTime GrabNotViewable GrabFrozen AsyncPointer SyncPointer ReplayPointer AsyncKeyboard SyncKeyboard ReplayKeyboard AsyncBoth SyncBoth StaticGray GrayScale StaticColor PseudoColor TrueColor DirectColor ); @oldconstants = qw( GL_CURRENT_BIT GL_POINT_BIT GL_LINE_BIT GL_POLYGON_BIT GL_POLYGON_STIPPLE_BIT GL_PIXEL_MODE_BIT GL_LIGHTING_BIT GL_FOG_BIT GL_DEPTH_BUFFER_BIT GL_ACCUM_BUFFER_BIT GL_STENCIL_BUFFER_BIT GL_VIEWPORT_BIT GL_TRANSFORM_BIT GL_ENABLE_BIT GL_COLOR_BUFFER_BIT GL_HINT_BIT GL_EVAL_BIT GL_LIST_BIT GL_TEXTURE_BIT GL_SCISSOR_BIT GL_ALL_ATTRIB_BITS GL_FALSE GL_TRUE GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON GL_ACCUM GL_LOAD GL_RETURN GL_MULT GL_ADD GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA GL_ONE_MINUS_DST_ALPHA GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA_SATURATE GL_NONE GL_FRONT_LEFT GL_FRONT_RIGHT GL_BACK_LEFT GL_BACK_RIGHT GL_FRONT GL_BACK GL_LEFT GL_RIGHT GL_FRONT_AND_BACK GL_AUX0 GL_AUX1 GL_AUX2 GL_AUX3 GL_NO_ERROR GL_INVALID_ENUM GL_INVALID_VALUE GL_INVALID_OPERATION GL_STACK_OVERFLOW GL_STACK_UNDERFLOW GL_OUT_OF_MEMORY GL_2D GL_3D GL_3D_COLOR GL_3D_COLOR_TEXTURE GL_4D_COLOR_TEXTURE GL_PASS_THROUGH_TOKEN GL_POINT_TOKEN GL_LINE_TOKEN GL_POLYGON_TOKEN GL_BITMAP_TOKEN GL_DRAW_PIXEL_TOKEN GL_COPY_PIXEL_TOKEN GL_LINE_RESET_TOKEN GL_EXP GL_EXP2 GL_CW GL_CCW GL_COEFF GL_ORDER GL_DOMAIN 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 GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_TEXTURE_COORDS GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_DISTANCE GL_POINT_SMOOTH GL_POINT_SIZE GL_POINT_SIZE_RANGE GL_POINT_SIZE_GRANULARITY GL_LINE_SMOOTH GL_LINE_WIDTH GL_LINE_WIDTH_RANGE GL_LINE_WIDTH_GRANULARITY GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LIST_MODE GL_MAX_LIST_NESTING GL_LIST_BASE GL_LIST_INDEX GL_POLYGON_MODE GL_POLYGON_SMOOTH GL_POLYGON_STIPPLE GL_EDGE_FLAG GL_CULL_FACE GL_CULL_FACE_MODE GL_FRONT_FACE GL_LIGHTING GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LIGHT_MODEL_AMBIENT GL_SHADE_MODEL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATERIAL GL_FOG GL_FOG_INDEX GL_FOG_DENSITY GL_FOG_START GL_FOG_END GL_FOG_MODE GL_FOG_COLOR GL_DEPTH_RANGE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_ACCUM_CLEAR_VALUE GL_STENCIL_TEST GL_STENCIL_CLEAR_VALUE GL_STENCIL_FUNC GL_STENCIL_VALUE_MASK GL_STENCIL_FAIL GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_WRITEMASK GL_MATRIX_MODE GL_NORMALIZE GL_VIEWPORT GL_MODELVIEW_STACK_DEPTH GL_PROJECTION_STACK_DEPTH GL_TEXTURE_STACK_DEPTH GL_MODELVIEW_MATRIX GL_PROJECTION_MATRIX GL_TEXTURE_MATRIX GL_ATTRIB_STACK_DEPTH GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_DITHER GL_BLEND_DST GL_BLEND_SRC GL_BLEND GL_LOGIC_OP_MODE GL_LOGIC_OP GL_AUX_BUFFERS GL_DRAW_BUFFER GL_READ_BUFFER GL_SCISSOR_BOX GL_SCISSOR_TEST GL_INDEX_CLEAR_VALUE GL_INDEX_WRITEMASK GL_COLOR_CLEAR_VALUE GL_COLOR_WRITEMASK GL_INDEX_MODE GL_RGBA_MODE GL_DOUBLEBUFFER GL_STEREO GL_RENDER_MODE GL_PERSPECTIVE_CORRECTION_HINT GL_POINT_SMOOTH_HINT GL_LINE_SMOOTH_HINT GL_POLYGON_SMOOTH_HINT GL_FOG_HINT GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_GEN_R GL_TEXTURE_GEN_Q GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_A_TO_A_SIZE 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 GL_MAP_COLOR GL_MAP_STENCIL GL_INDEX_SHIFT GL_INDEX_OFFSET GL_RED_SCALE GL_RED_BIAS GL_ZOOM_X GL_ZOOM_Y GL_GREEN_SCALE GL_GREEN_BIAS GL_BLUE_SCALE GL_BLUE_BIAS GL_ALPHA_SCALE GL_ALPHA_BIAS GL_DEPTH_SCALE GL_DEPTH_BIAS GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_CLIP_PLANES GL_MAX_TEXTURE_SIZE GL_MAX_PIXEL_MAP_TABLE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_VIEWPORT_DIMS GL_SUBPIXEL_BITS GL_INDEX_BITS GL_RED_BITS GL_GREEN_BITS GL_BLUE_BITS GL_ALPHA_BITS GL_DEPTH_BITS GL_STENCIL_BITS GL_ACCUM_RED_BITS GL_ACCUM_GREEN_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_ALPHA_BITS GL_NAME_STACK_DEPTH GL_AUTO_NORMAL 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 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_WIDTH GL_TEXTURE_HEIGHT GL_TEXTURE_COMPONENTS GL_TEXTURE_BORDER_COLOR GL_TEXTURE_BORDER GL_DONT_CARE GL_FASTEST GL_NICEST GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION GL_SPOT_DIRECTION GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATION GL_LINEAR_ATTENUATION GL_QUADRATIC_ATTENUATION GL_COMPILE GL_COMPILE_AND_EXECUTE 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 GL_CLEAR GL_AND GL_AND_REVERSE GL_COPY GL_AND_INVERTED GL_NOOP GL_XOR GL_OR GL_NOR GL_EQUIV GL_INVERT GL_OR_REVERSE GL_COPY_INVERTED GL_OR_INVERTED GL_NAND GL_SET GL_EMISSION GL_SHININESS GL_AMBIENT_AND_DIFFUSE GL_COLOR_INDEXES GL_MODELVIEW GL_PROJECTION GL_TEXTURE GL_COLOR GL_DEPTH GL_STENCIL GL_COLOR_INDEX GL_STENCIL_INDEX GL_DEPTH_COMPONENT GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_RGBA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_BITMAP GL_POINT GL_LINE GL_FILL GL_RENDER GL_FEEDBACK GL_SELECT GL_FLAT GL_SMOOTH GL_KEEP GL_REPLACE GL_INCR GL_DECR GL_VENDOR GL_RENDERER GL_VERSION GL_EXTENSIONS GL_S GL_T GL_R GL_Q GL_MODULATE GL_DECAL GL_TEXTURE_ENV_MODE GL_TEXTURE_ENV_COLOR GL_TEXTURE_ENV GL_EYE_LINEAR GL_OBJECT_LINEAR GL_SPHERE_MAP GL_TEXTURE_GEN_MODE GL_OBJECT_PLANE GL_EYE_PLANE GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR GL_TEXTURE_MAG_FILTER GL_TEXTURE_MIN_FILTER GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_CLAMP GL_REPEAT 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_EXT_abgr GL_EXT_blend_color GL_EXT_blend_logic_op GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_convolution GL_EXT_histogram GL_EXT_polygon_offset GL_EXT_subtexture GL_EXT_texture GL_EXT_texture3D GL_SGIS_detail_texture GL_SGIS_multisample GL_SGIS_sharpen_texture GL_ABGR_EXT GL_CONSTANT_COLOR_EXT GL_ONE_MINUS_CONSTANT_COLOR_EXT GL_CONSTANT_ALPHA_EXT GL_ONE_MINUS_CONSTANT_ALPHA_EXT GL_BLEND_COLOR_EXT GL_FUNC_ADD_EXT GL_MIN_EXT GL_MAX_EXT GL_BLEND_EQUATION_EXT GL_FUNC_SUBTRACT_EXT GL_FUNC_REVERSE_SUBTRACT_EXT GL_CONVOLUTION_1D_EXT GL_CONVOLUTION_2D_EXT GL_SEPARABLE_2D_EXT GL_CONVOLUTION_BORDER_MODE_EXT GL_CONVOLUTION_FILTER_SCALE_EXT GL_CONVOLUTION_FILTER_BIAS_EXT GL_REDUCE_EXT GL_CONVOLUTION_FORMAT_EXT GL_CONVOLUTION_WIDTH_EXT GL_CONVOLUTION_HEIGHT_EXT GL_MAX_CONVOLUTION_WIDTH_EXT GL_MAX_CONVOLUTION_HEIGHT_EXT GL_POST_CONVOLUTION_RED_SCALE_EXT GL_POST_CONVOLUTION_GREEN_SCALE_EXT GL_POST_CONVOLUTION_BLUE_SCALE_EXT GL_POST_CONVOLUTION_ALPHA_SCALE_EXT GL_POST_CONVOLUTION_RED_BIAS_EXT GL_POST_CONVOLUTION_GREEN_BIAS_EXT GL_POST_CONVOLUTION_BLUE_BIAS_EXT GL_POST_CONVOLUTION_ALPHA_BIAS_EXT GL_HISTOGRAM_EXT GL_PROXY_HISTOGRAM_EXT GL_HISTOGRAM_WIDTH_EXT GL_HISTOGRAM_FORMAT_EXT GL_HISTOGRAM_RED_SIZE_EXT GL_HISTOGRAM_GREEN_SIZE_EXT GL_HISTOGRAM_BLUE_SIZE_EXT GL_HISTOGRAM_ALPHA_SIZE_EXT GL_HISTOGRAM_LUMINANCE_SIZE_EXT GL_HISTOGRAM_SINK_EXT GL_MINMAX_EXT GL_MINMAX_FORMAT_EXT GL_MINMAX_SINK_EXT GL_TABLE_TOO_LARGE_EXT GL_POLYGON_OFFSET_EXT GL_POLYGON_OFFSET_FACTOR_EXT GL_POLYGON_OFFSET_BIAS_EXT GL_ALPHA4_EXT GL_ALPHA8_EXT GL_ALPHA12_EXT GL_ALPHA16_EXT GL_LUMINANCE4_EXT GL_LUMINANCE8_EXT GL_LUMINANCE12_EXT GL_LUMINANCE16_EXT GL_LUMINANCE4_ALPHA4_EXT GL_LUMINANCE6_ALPHA2_EXT GL_LUMINANCE8_ALPHA8_EXT GL_LUMINANCE12_ALPHA4_EXT GL_LUMINANCE12_ALPHA12_EXT GL_LUMINANCE16_ALPHA16_EXT GL_INTENSITY_EXT GL_INTENSITY4_EXT GL_INTENSITY8_EXT GL_INTENSITY12_EXT GL_INTENSITY16_EXT GL_RGB2_EXT GL_RGB4_EXT GL_RGB5_EXT GL_RGB8_EXT GL_RGB10_EXT GL_RGB12_EXT GL_RGB16_EXT GL_RGBA2_EXT GL_RGBA4_EXT GL_RGB5_A1_EXT GL_RGBA8_EXT GL_RGB10_A2_EXT GL_RGBA12_EXT GL_RGBA16_EXT GL_TEXTURE_RED_SIZE_EXT GL_TEXTURE_GREEN_SIZE_EXT GL_TEXTURE_BLUE_SIZE_EXT GL_TEXTURE_ALPHA_SIZE_EXT GL_TEXTURE_LUMINANCE_SIZE_EXT GL_TEXTURE_INTENSITY_SIZE_EXT GL_REPLACE_EXT GL_PROXY_TEXTURE_1D_EXT GL_PROXY_TEXTURE_2D_EXT GL_TEXTURE_TOO_LARGE_EXT GL_PACK_SKIP_IMAGES_EXT GL_PACK_IMAGE_HEIGHT_EXT GL_UNPACK_SKIP_IMAGES_EXT GL_UNPACK_IMAGE_HEIGHT_EXT GL_TEXTURE_3D_EXT GL_PROXY_TEXTURE_3D_EXT GL_TEXTURE_DEPTH_EXT GL_TEXTURE_WRAP_R_EXT GL_MAX_3D_TEXTURE_SIZE_EXT GL_DETAIL_TEXTURE_2D_SGIS GL_DETAIL_TEXTURE_2D_BINDING_SGIS GL_LINEAR_DETAIL_SGIS GL_LINEAR_DETAIL_ALPHA_SGIS GL_LINEAR_DETAIL_COLOR_SGIS GL_DETAIL_TEXTURE_LEVEL_SGIS GL_DETAIL_TEXTURE_MODE_SGIS GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS GL_MULTISAMPLE_BIT_EXT GL_MULTISAMPLE_SGIS GL_SAMPLE_ALPHA_TO_MASK_SGIS GL_SAMPLE_ALPHA_TO_ONE_SGIS GL_SAMPLE_MASK_SGIS GL_1PASS_SGIS GL_2PASS_0_SGIS GL_2PASS_1_SGIS GL_4PASS_0_SGIS GL_4PASS_1_SGIS GL_4PASS_2_SGIS GL_4PASS_3_SGIS GL_SAMPLE_BUFFERS_SGIS GL_SAMPLES_SGIS GL_SAMPLE_MASK_VALUE_SGIS GL_SAMPLE_MASK_INVERT_SGIS GL_SAMPLE_PATTERN_SGIS GL_LINEAR_SHARPEN_SGIS GL_LINEAR_SHARPEN_ALPHA_SGIS GL_LINEAR_SHARPEN_COLOR_SGIS GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS GLX_USE_GL GLX_BUFFER_SIZE GLX_LEVEL GLX_RGBA GLX_DOUBLEBUFFER GLX_STEREO GLX_AUX_BUFFERS GLX_RED_SIZE GLX_GREEN_SIZE GLX_BLUE_SIZE GLX_ALPHA_SIZE GLX_DEPTH_SIZE GLX_STENCIL_SIZE GLX_ACCUM_RED_SIZE GLX_ACCUM_GREEN_SIZE GLX_ACCUM_BLUE_SIZE GLX_ACCUM_ALPHA_SIZE GLX_SAMPLES_SGIS GLX_SAMPLE_BUFFER_SGIS GLX_BAD_SCREEN GLX_BAD_ATTRIBUTE GLX_NO_EXTENSION GLX_BAD_VISUAL GLX_BAD_CONTEXT GLX_BAD_VALUE GLX_BAD_ENUM GLXBadContext GLXBadContextState GLXBadDrawable GLXBadPixmap GLXBadContextTag GLXBadCurrentWindow GLXBadRenderRequest GLXBadLargeRequest GLXUnsupportedPrivateRequest __GLX_NUMBER_ERRORS __GLX_NUMBER_EVENTS GLX_EXTENSION_NAME GLX_EXTENSION_ALIAS GLX_VENDOR GLX_VERSION GLX_EXTENSIONS GLX_SGI_swap_control GLX_SGI_video_sync GLX_SGIS_multisample GLX_SWAP_DEFAULT_SGI GLX_SWAP_MUXPIPE_SGI GLX_SWAP_GANG_SGI GLX_MUXPIPE0_SGI GLX_MUXPIPE1_SGI GLX_MUXPIPE2_SGI GLU_VERSION_1_1 GLU_INVALID_ENUM GLU_INVALID_VALUE GLU_OUT_OF_MEMORY GLU_INCOMPATIBLE_GL_VERSION GLU_VERSION GLU_EXTENSIONS GLU_TRUE GLU_FALSE GLU_SMOOTH GLU_FLAT GLU_NONE GLU_POINT GLU_LINE GLU_FILL GLU_SILHOUETTE GLU_OUTSIDE GLU_INSIDE GLU_BEGIN GLU_VERTEX GLU_END GLU_ERROR GLU_EDGE_FLAG GLU_CW GLU_CCW GLU_INTERIOR GLU_EXTERIOR GLU_UNKNOWN GLU_TESS_ERROR1 GLU_TESS_ERROR2 GLU_TESS_ERROR3 GLU_TESS_ERROR4 GLU_TESS_ERROR5 GLU_TESS_ERROR6 GLU_TESS_ERROR7 GLU_TESS_ERROR8 GLU_AUTO_LOAD_MATRIX GLU_CULLING GLU_SAMPLING_TOLERANCE GLU_DISPLAY_MODE GLU_PARAMETRIC_TOLERANCE GLU_SAMPLING_METHOD GLU_U_STEP GLU_V_STEP GLU_PATH_LENGTH GLU_PARAMETRIC_ERROR GLU_DOMAIN_DISTANCE GLU_MAP1_TRIM_2 GLU_MAP1_TRIM_3 GLU_OUTLINE_POLYGON GLU_OUTLINE_PATCH GLU_NURBS_ERROR1 GLU_NURBS_ERROR2 GLU_NURBS_ERROR3 GLU_NURBS_ERROR4 GLU_NURBS_ERROR5 GLU_NURBS_ERROR6 GLU_NURBS_ERROR7 GLU_NURBS_ERROR8 GLU_NURBS_ERROR9 GLU_NURBS_ERROR10 GLU_NURBS_ERROR11 GLU_NURBS_ERROR12 GLU_NURBS_ERROR13 GLU_NURBS_ERROR14 GLU_NURBS_ERROR15 GLU_NURBS_ERROR16 GLU_NURBS_ERROR17 GLU_NURBS_ERROR18 GLU_NURBS_ERROR19 GLU_NURBS_ERROR20 GLU_NURBS_ERROR21 GLU_NURBS_ERROR22 GLU_NURBS_ERROR23 GLU_NURBS_ERROR24 GLU_NURBS_ERROR25 GLU_NURBS_ERROR26 GLU_NURBS_ERROR27 GLU_NURBS_ERROR28 GLU_NURBS_ERROR29 GLU_NURBS_ERROR30 GLU_NURBS_ERROR31 GLU_NURBS_ERROR32 GLU_NURBS_ERROR33 GLU_NURBS_ERROR34 GLU_NURBS_ERROR35 GLU_NURBS_ERROR36 GLU_NURBS_ERROR37 ); @EXPORT = (@oldfunctions, @oldconstants); # Other items we are prepared to export if requested @EXPORT_OK = (@gl_extensions, @gl_func, @glu_func, @glut_func, @glx_func, @gl_const, @glu_const, @glut_const, @glx_const); @constants = (@gl_const, @glu_const, @glut_const, @glx_const); @functions = (@gl_func, @glu_func, @glut_func, @glx_func); %EXPORT_TAGS = ('constants' => \@constants, 'functions' => \@functions, 'all' => \@EXPORT_OK, 'old' => \@EXPORT, 'glconstants' => \@gl_const, 'gluconstants' => \@glu_const, 'glutconstants' => \@glut_const, 'glxconstants' => \@glx_const, 'glfunctions' => \@gl_func, 'glufunctions' => \@glu_func, 'glutfunctions' => \@glut_func, 'glxfunctions' => \@glx_func, 'oldfunctions' => \@oldfunctions, 'oldconstants' => \@oldconstants, ); @rename_old = qw( glBitmap glCallLists glClipPlane glColor3bv glColor3dv glColor3fv glColor3iv glColor3sv glColor3ubv glColor3uiv glColor3usv glColor4bv glColor4dv glColor4fv glColor4iv glColor4sv glColor4ubv glColor4uiv glColor4usv glConvolutionFilter1DEXT glConvolutionFilter2DEXT glConvolutionParameterfvEXT glConvolutionParameterivEXT glDetailTexFuncSGIS glDrawPixels glEvalCoord1dv glEvalCoord1fv glEvalCoord2dv glEvalCoord2fv glFeedbackBuffer glFogfv glFogiv glGetBooleanv glGetClipPlane glGetConvolutionFilterEXT glGetConvolutionParameterfvEXT glGetConvolutionParameterivEXT glGetDetailTexFuncSGIS glGetDoublev glGetFloatv glGetHistogramEXT glGetHistogramParameterfvEXT glGetHistogramParameterivEXT glGetIntegerv glGetLightfv glGetLightiv glGetMapdv glGetMapfv glGetMapiv glGetMaterialfv glGetMaterialiv glGetMinmaxEXT glGetMinmaxParameterfvEXT glGetMinmaxParameterivEXT glGetPixelMapfv glGetPixelMapuiv glGetPixelMapusv glGetPolygonStipple glGetSeparableFilterEXT glGetSharpenTexFuncSGIS glGetTexEnvfv glGetTexEnviv glGetTexGendv glGetTexGenfv glGetTexGeniv glGetTexImage glGetTexLevelParameterfv glGetTexLevelParameteriv glGetTexParameterfv glGetTexParameteriv glIndexdv glIndexfv glIndexiv glIndexsv glLightModelfv glLightModeliv glLightfv glLightiv glLoadMatrixd glLoadMatrixf glMap1d glMap1f glMap2d glMap2f glMaterialfv glMaterialiv glMultMatrixd glMultMatrixf glNormal3bv glNormal3dv glNormal3fv glNormal3iv glNormal3sv glPixelMapfv glPixelMapuiv glPixelMapusv glPolygonStipple glRasterPos2dv glRasterPos2fv glRasterPos2iv glRasterPos2sv glRasterPos3dv glRasterPos3fv glRasterPos3iv glRasterPos3sv glRasterPos4dv glRasterPos4fv glRasterPos4iv glRasterPos4sv glReadPixels glRectdv glRectfv glRectiv glRectsv glSeparableFilter2DEXT glSharpenTexFuncSGIS glTexCoord1dv glTexCoord1fv glTexCoord1iv glTexCoord1sv glTexCoord2dv glTexCoord2fv glTexCoord2iv glTexCoord2sv glTexCoord3dv glTexCoord3fv glTexCoord3iv glTexCoord3sv glTexCoord4dv glTexCoord4fv glTexCoord4iv glTexCoord4sv glTexEnvfv glTexEnviv glTexGendv glTexGenfv glTexGeniv glTexImage1D glTexImage2D glTexImage3DEXT glTexParameterfv glTexParameteriv glTexSubImage1DEXT glTexSubImage2DEXT glTexSubImage3DEXT glTranslated glTranslatef glVertex2dv glVertex2fv glVertex2iv glVertex2sv glVertex3dv glVertex3fv glVertex3iv glVertex3sv glVertex4dv glVertex4fv glVertex4iv glVertex4sv glViewport ); sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. # NOTE: THIS AUTOLOAD FUNCTION IS FLAWED (but is the best we can do for now). # Avoid old-style ``&CONST'' usage. Either remove the ``&'' or add ``()''. if (@_ > 0) { # Is it an old OpenGL-0.4 function? If so, remap it to newer variant local($constname); ($constname = $AUTOLOAD) =~ s/.*:://; if (grep ($_ eq $constname, @rename_old)) { eval "sub $AUTOLOAD { $AUTOLOAD" . "_s(\@_) }"; goto &$AUTOLOAD; } $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } local($constname); ($constname = $AUTOLOAD) =~ s/.*:://; $val = constant($constname, @_ ? $_[0] : 0); if (not defined $val) { if ($! =~ /Invalid/) { $AutoLoader::AUTOLOAD = $AUTOLOAD; goto &AutoLoader::AUTOLOAD; } else { ($pack,$file,$line) = caller; die "Your vendor has not defined OpenGL macro $constname, used at $file line $line. "; } } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } bootstrap OpenGL; *OpenGL::Array::CLONE_SKIP = sub { 1 }; # OpenGL::Array is not thread safe # The following material is directly copied from Stan Melax's original OpenGL-0.4 # (with modifications for OS/2). %window_defaults=( 'x' => 0, 'y' => 0, 'width' => 500, 'height' => 500, 'parent' => 0, 'steal' => 0, 'mask' => (_have_glx() ? StructureNotifyMask() : 0), 'attributes'=> [], ); sub glpOpenWindow { # default values my(%a) = @_; my(%p) = %window_defaults; foreach $k (keys(%a)){ exists($p{$k}) || warn "Not a valid parameter to glpOpenWindow: `$k'\n"; #print "parameter $k now ",$a{$k}," was ",$p{$k},"\n"; $p{$k} = $a{$k}; } # # glpcOpenWindow() no longer exported. Use fully qualified # package name or (better!) glpOpenWindow() # glpcOpenWindow($p{'x'},$p{'y'},$p{'width'},$p{'height'}, $p{'parent'},$p{'mask'},$p{'steal'}, @{$p{'attributes'}}); } # The following material is original to OpenGL-0.5, and provides compatibility # with some of Stan's functions. sub glpClipPlane { glClipPlane_p(@_) } sub glpGetClipPlane { glGetClipPlane_p(@_) } sub glpLoadMatrixd { glLoadMatrixd_p(@_) } sub glpMultMatrixd { glMultMatrixd_p(@_) } sub glpLoadMatrixf { glLoadMatrixf_p(@_) } sub glpMultMatrixf { glMultMatrixf_p(@_) } sub glpMainLoop { if (_have_glx()) { ## print "Control-D to quit...\n"; ## while(<>){;} # control-D to quit print "Type to quit...\n"; until(<>){;} # control-D to quit } else { # OS/2 PM OS2::Process_Messages(0) while 1; } } if (_have_glp() && !_have_glx()) { eval <{original_x} = glutGet(0x0064); # GLUT_WINDOW_X $params->{original_y} = glutGet(0x0065); # GLUT_WINDOW_Y $params->{original_w} = glutGet(0x0066); # GLUT_WINDOW_WIDTH $params->{original_h} = glutGet(0x0067); # GLUT_WINDOW_HEIGHT glutFullScreen(); $params->{w} = glutGet(0x0066); # GLUT_WINDOW_WIDTH $params->{h} = glutGet(0x0067); # GLUT_WINDOW_HEIGHT return $params; } sub glpRestoreScreen { my($params) = @_; glutPositionWindow($params->{original_x},$params->{original_y}); glutReshapeWindow($params->{original_w},$params->{original_h}); glutPostRedisplay(); } sub glpCheckExtension { my(@extensions) = @_; # Get/cache OpenGL Version if (!$gl_version) { $gl_version = glGetString(0x1F02); #GL_VERSION return 'Unable to retrieve OpenGL version; need context?' if (!$gl_version); } return "Not a numeric version: '$version'" if ($gl_version !~ m|^(\d+\.\d+)|); $gl_version = $1; # Get/cache OpenGL Extension Installations if (!scalar(%$glext_installed)) { my $inst = glGetString(0x1F03); #GL_EXTENSIONS foreach my $ext (split(' ',$inst)) { $glext_installed->{$ext} = $glext_dependencies->{$ext} || 0; } } if (!scalar(%$glext_installed)) { return 'Unable to retrieve extensions; need context?' } foreach my $ext (@extensions) { return "$ext not installed" if (!defined($glext_installed->{$ext})); # Check implementation my($ver,$deps) = split(';',$glext_installed->{$ext}); return "$ext not implemented" if (!$ver); return "Needs at least OpenGL $ver" if ($gl_version < $ver); next if (!$deps); # Check dependencies foreach my $dep (split(',',$deps)) { my $stat = glpCheckExtension("GL_$dep"); return "Depends on $deps" if ($stat); } } return 0; } 1; __END__ libopengl-perl-0.6704+dfsg.orig/isosurf.bin0000644000175000017500000025020412334200655020064 0ustar gregoagregoaUð~ö†ô‡ð°œUðf†‡†°”ÀšVõ~ö†‡‰0Ž€€Uð€ì…~”À› Wä~ö†‰0ÐWä€ì„ýƒà°ÐYØ~ö„å‹`‡Ÿ°YØ€ì„1ˆŒðžp[0~ö„%À‡€Yñ€ì„%ŒPŒðœà[Ì~öƒ¨ˆœà[Ì€ì‚à‘˜0]À~ö‚v°ŒPš°\ñ€ìÃ`˜€]À€Ñ@š]À€ìÀŽÐ™À^{~öÃ‘ðŒ ™À_´€ì‹Ž€™À_´~ö€Ð Œð›P_è€ìa`ŽÐ™pa¨~ök‘ð‹`š`a¨a‘ @™pa²~öa”À‹˜0a¨€ì}¿°°—àcœ~ö}R“0Œ™ bn€ì}”pŽ0– cœw}” ŒP˜0cœ€ì{P”p”À`cî~ö}•Œ –ðd€ìzŸ—@•°‹`e~özã–Ž€•e@zŸ™p‘ðŒðeÅ~özŸš°@e~öy¾œ@‘ sPfœ}zŸ ðˆsPe}xgž „ÐiðgX{ zŸ¡à‡ð‚e|®x=ž … jf{ x=Ÿ…Àlpe{ v¥ P†ofiyx=ž ‰0lpeyõuÛžp… jàeËyuÛœàˆj@eyun›PˆgÀgwuÛ’@› rewt @šig„víuÛˆ ðsðev¼syà—àf€g„vAsy}Pžpieu(qM}Ÿj@g„u(q${pŸ`jàeuq}P›dPg„u#q{ÀžÀiðes2nêxP•`_Pg„shn¶xð—`àfxs2n¶w°•`_Pg„s2n~xP•_erýn¶x ”À^°g„q_ dP‚X)wx=bÀ`à°YØu{zŸ[ið‚ X”wzŸb aЃàYØv`}]Àgp…ÀY;w}aÐbÀ†YØwA_ðdð†Wäx+}ið\0…pYØw'aaÐc†Wäx®al [†°YØxÃe@a€ŠpWäy€ùm`Zð‡PXNyÃk0] Š WäyGÃm`[@‡ðYØyƒÕm`d – Wäz„%o^°‘PYØyP„%pÐe@™ Wä{ …Jƒ@n PYØ{ …&„Ðvp¢€Wä}…ÅŠpw` ðYØ}„øˆ€p¡àYØ{ …&„Ðvp¢€[Ì}„F‡‚ ¢0[Ì{ „Ž„ÐТÐYØ{ …&„Ðvp¢€[Ìy„†w°pСYØyP„%pÐe@™ Z\y„%qÀf€š`YØyƒÕm`d – [Ìw¢„%q pРYØxÃe@a€Šp[ÌwƒÜdPm°–ðZ°wÃ`@g ‹`[Ìu(é^°nð°[½u(Ã\€nðŒð[Ìu Ã^h`ˆ@[ u(a\Ði †°[Ìsäa] i†°Z…u(}\0i „€[Ìs2}’]Àg ƒà[²s2}]ÀfЃ[Ìs }]ÀfЃ[gs2zŸ]pfÐ`[Ìr zŸ]pfÐ[&s2x=]pf€Ð[ÌrHx=] fÐ}P[>s2uÛ]Àeà}[ÌrguÛ] fÐ~@[ s2sy_e„Ð[Ìr0sy^gp†°Z+s2q]pir°[Ìq~öuÛa€piqHuÛc fÐoæ~öx=_ pk0qH€ìwyg ‘dp›€ìx=a0‡PdqH‚ x=``k0oT€ìz`@‡dðqH‚âxÝ_‘ðp€oT‚ÈzŸiP’– o|‚âzŸ_w`•oT€ì|P_ðŠÀ’qH‚â{˜nð€ ðpv€ì}r°@žÀqHe}z€pŸqH€ì}@u0ŒðŸ`s<}‚ Àžps<€ì}‚ `ž s¯€ì}‚ð`ž s<~ö~ã}’€u0€‚}…p’@œ@u0~ö~z‘Ž€™ vš~ö}˜€…p–ðu0}Ía–ðŽ0”pw}}šЖ u‘}aœà„Бðw{ }ž ~@‘Put{ aœ}P“Ðwy}œ@~” u’yaš`sP”pw$xí}`°ž u0x>a™pp0” w$w}f‹°…  u0w~ª–y@š`w$u(}ˆ„ТÐu0u(~Ç“0wœw$s2}zÐv £ u0s2}¶Œðm°œàw$q<}fq r Pu0r}|`i žÀveq<}nPm°€u0q<|Qz€l  w$oz}m°vÀ Pu0oE{Åp€x¡w$oE|õu€o@  u0mO|zÐ|°£Àw$mO|BŒðsðŸ`u0kY|L‹°x   w$kY{]’àkИ0u0ic{z‘e@” w$j¤zŸ“0gp”puåiczŸ°bp‘Pw$icx¤” _ ‡ðu0izŸ@]Àw$iEx=“Ð_†`u0h!x=ŽÐ\€ˆw$iuÛ•_Pƒu0g‹uÛ°^`Špw$hEsy•°cŒPu0gmu‹‘P_‹v@gmsy” fÐ’àu0f\sy“0c°`w$gmrs’@iP– u0ewr‚l š`w$ewq.ŒPs Ÿ`u0cqÎr`0w$e2qÐi‚ðvMcq“€q š`w$ewpüŽÐr\0u0cp?r`\Ðu0ewor`\Ðs@} Pm`s2„ð}ð… £ nq<„%’p0š`oTs2…“Ðr`š°oTr0„%”pl –ðoìs2„%—@j@’oTq<ƒ‹” n ˜ÐqHs2‚•°dð p8q<Ûðn pqHrüÕ`d ŽÐqHq<Œ°fЖq~s2Õeqzq<apf0–Ps@} Pm`oE„¯’àf€“Ðnq<„%’p0š`mÎoE„%’@dP‘ðoTq<ƒ‹” n ˜ÐoToE‚j—kГ0p8q<Ûðn po¨oEÜo@ŽÐoToE‚j—kГ0oTn–ÙÀjàÀmÎoE„%’@dP‘ðm`mzÕ°bÀ‹`m`nô„%‘Pbp`m4mOÖPc`‹`k–mO„%–Pið“0k‚kY×@c°Špklm„%–ðið’klkYðš`jŽ€ixk§„%ƒj@ž ixkYƒîƒ@c°™Àh‘kY„%‚Pc°šixk§„%ƒj@ž g„kY„a|d ›PixmO…9… qp¡@g„mO…‰}r`¢€ixoE…,Уpg„oE…C}‚£pg„mO…‰}r`¢€eoE„át} ¢ÐemO… p€w`¡@emO… p€w`¡@is2„%x •°š°is2„%x •°š°ixsF„%x – šixs2„;x •°š°klsß„%tpž kls2„¢wŒP Pm`tì„%vpŸ`m`s2„ð}ð… £ nu(„%wŽ€ŸoTs2…“Ðr`š°oTu(„ox Œ  oìs2„%—@j@’qHu(„išl `qHtö„%›j@qgu(„%›ðkÐŒðqHs2‚•°dð r#u(Üàl ‹`q~s2Õesa™pp0” s}zŸ[@sPm`{ |àa0—@ƒm`{†zŸ`–ð‚ðm{ zŸ[à‘P}m`{ x]\€‘ vÀklyzŸ_P•ƒ@m`{x=`@‘ðmklyzui0u0lyx=e@šsklx¥x=nP t@moàgpš`œ@~b„%l ]pŒž4~ö…suÐr`¡ž}„%`@dð‡Pž4}„—a€dˆž4|Ö„%`àdðˆ@ (}†Cv dðš°Ÿe{ „%_ðh`Œ ({ †k€fЗ (z„%iPd ” ¢{ „»Š u€ ð¡y„%m°_ ‘P¢y„­… a€—@¢xÀ„%†_“Сy„%m°_ ‘P¢woÃe@bÀŒP (y‚³e@`ˆà (xÑÃf0_†`ŸÝyÃb bp†` (xmac``@‚PŸsya_ dP‚ð (x}c`‚PŸy}_ dP° (wµzŸbÀa0ƒžÐyzŸ^°dð° (w6x=c`€pž‡yx=^e0 (wwRaÐa€ž…yuÛ\Ðgp}Ÿ÷wuÛ_ðc°ž¡ysy[i z0ŸÌwsy[ài€žùyqZ sPm`Ÿ€wq[@n p€ŸÌwsy[ài€ (uíq_kÐk€ (v¢sy] gp‚ Ÿu(q[@j@x¡Hu(sy`@dð†`¡Ís2q_ gpŠp¢toàgpš`ž4€ì…±Ž0“З@œ@€ì„Ê{À}ð£Àœ@€ì„Ê{À}ð£À (}†Cv dðš° (}†Cv dðš°ž4}„—a€dˆ (~ö…Ü`˜Ðž4~ö…suÐr`¡ž4~ö…suÐr`¡¢{ „»Š u€ ð¢{ „»Š u€ ð ({ †k€fЗ¢}…Œ }P   (}†Cv dðš° (}†Cv dðš°Wä‚⃅ –™ÀWä‚⃅ –™ÀYØ‚âðŠp•°—àWäƒùÇ –P˜€Y؃ ÊÀ•`—àW䄨€Á… —@˜€YØ„Ø수Е`Wä…×a‡Pš°“ÐYØ…7a‰0š“€Wä†Î}¨ˆ@œ°Y؆e}‹`Ћ°X¹†Î}‰0ž ŒðY؆Î{¢ŒžÀ‰0Wä‡}ˆž àY؇zŸŒ  ‚ Wä‡ÖzŸŠ ¡@€ Y؆Îy‹° tWä‡px=ŠpžÀoàYo†Îx=ŠpŸ`q Wä†Îv܉€œj@Y؆¥x=‹Ÿq Wä†JuÛˆš°fÐYØ…^uÛ‹™ f€W䄨sñ‡ –a€YØ„Øu"ŠÀ—dWä„fsy‡P•`Y؃XsyŠ •a€Wä‚âr†`”p_ YØ‚ârý‰Ð•a€Wäìqƒ‘ \ÐYØqˆà“0_PWä€ìpE„€ŒZYØ€ìpò‰0‘ð^°Wä~öo¶„0ÐVàYØ~öp‰€†Y`Wä}oÕ„0yVàYØ}p,…p}W0Wä{ oÒ€p}PV@YØ{ pƒ@‚VàYØ}p,…p}W0[Ì{ p^†°ƒàX [Ì}p¾‡P€W€]n{ q‡ð‚PX \Ô}qˆ€ X ]À{ q2‡P°WÐ]À}qW†°€ W€_´{ qɈ@~WÐ_´}q܉Ѓ@Ya¨{ r`‹Ya¨}r»ŒPˆ@[@cœ{ sC`… \0b×}syÀ‰0]pcœ{ sy’@‡P^cœ}t:•°‹`bÀcã{ sy’à… ^dº}uÛž ‡ðkÐeS{ uÛžÀ†°lpeS{ uÛžÀ†°lpWä÷„%†°‘ðœ@Wä÷„%†°‘ðœ@Wä‚⃅ –™ÀYØ€û„%ˆà’›YØ‚âðŠp•°—àYØ‚âðŠp•°—àXNyÃk0] Š XNyÃk0] Š YØyƒÕm`d – YØxÃe@a€ŠpYØxÃe@a€ŠpYØ‚âðŠp•°—àYØ‚âðŠp•°—àY؃ ÊÀ•`—àZ‚âË•`—YØ„Ø수Е`[Ì‚â€Ú‹”p˜€Z¤„ØaŠÀ˜Ð”p[Ì„1a‹°•°–ð[Ì„Ø~dŒš‘ð]Àƒaà•°•°]R„Ø}ŒðœàŒP]À„Ÿ}ŽÐ›à]À„Ø|X@Њ _´ƒV} —@’à^÷„ØzŸŸ°ƒ@_´„yzŸ`žpÐ]À„ØxŒPŸ`s_´ƒÐx=Ž€0oà]À„Åx=ŒŸqÀ_´‚âvÈà–ðe]Àƒ^uÛŒP—àe^‘‚âuÛŒ –ðdð]À‚âu8Œ–Pc°_´‚.uÛŒð– d ]À@syŠÀ”Àa€_´€ìtTà“€bp^N€ìsy‹“Ð`à_´€sy‹`’_ð]À€ìs ‹“Ð`à_´~ör‘‹`à] ]À~öq·ŠÀ‹[_´}q܉Ѓ@Y]À}qW†°€ W€]À~öq·ŠÀ‹[\Ô}qˆ€ X \S~öqŠ ŠpZð[Ì}p¾‡P€W€[Ì~öpÙŠ ‰ÐZðYØ}p,…p}W0YØ~öp‰€†Y`[Ì~öpÙŠ ‰ÐZðYØ€ìpò‰0‘ð^°[ÌfqŠ ŒP[àZ%€ìq‰€‘ð^°[Ì€ìrŠp^YØqˆà“0_P[Ì‚Ksy‰€”Àa0YØ‚ârý‰Ð•a€Z­‚âsy‰Ð•a€Y؃XsyŠ •a€[Ì‚ât‰€”À`àYØ„Øu"ŠÀ—d[Ì„^uÛ‹˜ÐeàZÚ„ØuÛ‹˜Ðf0[Ì„Øvœ‹›iYØ…^uÛ‹™ f€[Ì…¯x=ŒðžpqpY؆¥x=‹Ÿq [̆1zŸŒð P}PY؆Îy‹° tZu†ÎzŸàŸ`‚ Y؇zŸŒ  ‚ Y؆Î{¢ŒžÀ‰0Zu†ÎzŸàŸ`‚ Y؆e}‹`Ћ°[̆1zŸŒð P}P[Ì…}‹`0]À…`zŸŒ  ƒà]R„Ø}ŒðœàŒP]À„Ø|X@Њ ]À…`zŸŒ  ƒà^÷„ØzŸŸ°ƒ@]À„ØxŒPŸ`s]À…`zŸŒ  ƒà]•„Øx=ŒŸqÀ[̆1zŸŒð P}P[Ì…¯x=Œðžpqp]•„Øx=ŒŸqÀ[Ì„Øvœ‹›i]À„Åx=ŒŸqÀ[Ì„^uÛ‹˜Ðeà]Àƒ^uÛŒP—àe[Ì‚ât‰€”À`à]À‚âu8Œ–Pc°[Ì‚Ksy‰€”Àa0]À@syŠÀ”Àa€[Ì€ìrŠp^]À€ìs ‹“Ð`à[ÌfqŠ ŒP[à]À~öq·ŠÀ‹[\S~öqŠ ŠpZð[ÌfqŠ ŒP[à[Ì~öpÙŠ ‰ÐZð[Ì~öpÙŠ ‰ÐZð[Ì÷Ã’à˜€[Ì÷Ã’à˜€\ñ€ìÃ`˜€[Ì€ì‚à‘˜0[Ì€ì‚à‘˜0\4}„%‡P‚ð¡à\4}„%‡P‚ð¡à]c{ „%†ƒ@¢0]À}ƒ`Œ ˆ@žÀ]À{ „‡Pƒà¡à_´}‚`‹›P_´{ ƒ ˆ@€`}ðŠÀ› aR{ Ã`Šp› a¨}€“Њ ™Àa¨{ `Šp›ðbû}a’à‹°™pcœ{ ü“€‰€šcœ|a“€‹™ d+{ a–ˆà˜0cœ}~Ä“€Œ ˜€e{ }¸–P‰€—àe.}}˜0Œ” e|I}˜Ð‹`“Ðe}|N™ÀŒ’@f({ }šŠ “0fœ}zŸ ðˆsPgX{ zŸ¡à‡ð‚gX{ zŸ¡à‡ð‚]Àz†„%†`ƒ@¢0]Àz†„%†`ƒ@¢0]c{ „%†ƒ@¢0]À{ „‡Pƒà¡à]À{ „‡Pƒà¡à[Ìw¢„%q pР[Ìw¢„%q pР\Pw„%q q  [ÌwƒÜdPm°–ð]¡u(„%k0vpžÀ[Ìu(é^°nð°[Ìu(é^°nð°]Às2ƒ+f€m`˜0]Às2ƒ+f€m`˜0]Àr Ã`@h`Œð]s2Ã_Pi Œ ]Àq<€[_gÀˆà\@s2a]ph`†°]…q<a]Àh†]Àq<€[_gÀˆà]Àpãa]ÀgÀ…À]…q<a]Àh†]Àp1}]Àg ƒà]q<}]pg ƒ]q<}]pg ƒ]À€Ñ@š]À€Ñ@š^{~öÃ‘ðŒ ™À]À~ö‚v°ŒPš°]À~ö‚v°ŒPš°^§y„%„0°¢Ð^§y„%„0°¢Ð_´yƒÓ‰€„€ ð_´w«„%…p`¢Ða¨y‚mˆ@œà_õw„%„€€À¢Ða¨wƒjŒð†°Ÿau(„%‚€£pa¨u(„‚ðУpa¨tÙ„%ƒà°¢Ðcœu(‚ÿ‹°‡ðŸcœsD„%ƒà žÀeu(‚‚ð’àœds2„%Рes2ƒò€ ‘PÐerØ„%0‰€¡àg„s2ƒÈ|`pŸg„r¬„%z0ŽÐŸ`is2„%x •°š°g„s2ƒÈ|`pŸixsF„%x – šg„uÃ~@™p—ixu(öy”p› hu(Ãxð™À–ðixuVÃx › ”pg„u(£~@› ”Àixv~aq €Ž€g„v|a‡Pœà°ixw}Âtžp g„w~(°—à‘ixw~}{pŸ`ŽÐg„x}”À•ixxUzŸvÀ£ `g„y{›ð‹° h,yzŸ˜Ð˜0|h,yzŸ˜Ð˜0|_´r‰„%sðu€¡à_´r‰„%sðu€¡à_´q<ƒ”nðl œàa¨r^„%z0x£pa¨q<ƒÚsPr ðbÊq<„%xPxð£pa¨oEƒco– coE„%q yà¡àa¨mOÝcm•cœmô„%i wž cœmOƒûgpoš`cÏmO„%h`s œcœkY‚yh`fЕ`ekŒ„%s jàž ekY„ti €f5kY„%xgÀ0ei¦Ãm°`à’àg„k+„%0`@—@g„i´Ã}ð\€‘ðei¦Ãm°`à’àg„ic\0‘PeicSr^‘ g„h8a€ ^°•`eh<ak€`@`eicSr^‘ cùicai `ŽÐei¦Ãm°`à’àcœi¡ah``ààcœjçÃiaÐ`a¨kLag `àŒPckYÃgpaÐŽ€a¨kY}bÀea¨m8Ãd h’àažkYa^j@Špa—mOÃa€m“0`omOa^`i Šp`oEÃh`f€•_´nEa_Pgp‰€_´oEMef0‘ð_oEa_PfЈ_oEa_PfЈ_´q<ƒ”nðl œà_´q<ƒ”nðl œàa¨q<ƒÚsPr ð_´oŸÃheà” a¨oEƒco– `oEÃh`f€•a¨mOÝcm•a—mOÃa€m“0a¨m8Ãd h’àa¨mOÝcm•ckYÃgpaÐŽ€cœmOƒûgpoš`cœkY‚yh`fЕ`ckYÃgpaÐŽ€cœjçÃiaÐ`cœkY‚yh`fЕ`ei¦Ãm°`à’àekY„ti €ekY„ti €a¨z’ðŠp› a¨z’ðŠp› b…yÑ ‰Ð›Pa¨y‚mˆ@œàcœwvÃà‰Ð€a¨wƒjŒð†°ŸcœwìŒðŠ Ða¨u(„‚ðУpcœu(‚ÿ‹°‡ðŸcœwìŒðŠ Ðeu(‚‚ð’àœcãwÃŒðŠÀ€euŽÃˆ`œew€'“€—àg'u(Ã@™ —@fƒwaŒ–ð•°g„u(£~@› ”Àg„v|a‡Pœà°fƒwaŒ–ð•°g„w~(°—à‘ex8a•Œ –ðg„x}”À•ey~¾—@Š – fèy}šŽ0`g„x}”À•g„y{›ð‹° g„y{›ð‹° cœwìŒðŠ ÐcœwìŒðŠ ÐcœwvÃà‰Ð€cãwÃŒðŠÀ€cœy€Á” ˆ@šew€'“€—àeya•`‹°—@ex8a•Œ –ðey~¾—@Š – ey~¾—@Š – euŽÃˆ`œeuŽÃˆ`œg'u(Ã@™ —@eu(‚‚ð’àœg„uÃ~@™p—es2ƒò€ ‘PÐg„s2ƒÈ|`pŸg„s2ƒÈ|`pŸixu(öy”p› ixu(öy”p› klu(‚Üq ”À™ ixuVÃx › ”pklv7Ãn –P– ixv~aq €Ž€klw€~kК`jŒwajà›@klw­ai™ Ž€ixw}Âtžp klx™}h°› ‰€ixw~}{pŸ`ŽÐixw~}{pŸ`ŽÐixu(öy”p› ixu(öy”p› ixsF„%x – šklu(‚Üq ”À™ klsß„%tpž m`u(„u0 žpm`tì„%vpŸ`nu(„%wŽ€Ÿm`u(„u0 žpoTu˜„%qÀp0m`w‚7m°”p—àoTw‚éf0ŠÀ™ oTu˜„%qÀp0pÙw„%lp ›pÙw„%lp ›m`u(„u0 žpm`u(„u0 žpklu(‚Üq ”À™ m`w‚7m°”p—àklv7Ãn –P– lËwÃlp•–Pklw€~kК`klw€~kК`oFyÃe@‹`˜0oFyÃe@‹`˜0oTy-Ãg ˜€oTyÓe@‰Ð˜ÐqHzdÃr“К`qHy‚Òq àÐs{ Ãu€‘€s_ dP‚[gs2zŸ]pfÐ`YØux=b a0[&s2x=]pf€ÐYØtëuÛc°_ 0[>s2uÛ]Àeà}YØt´sybÀa0ƒà[ s2sy_e„ÐYØsÃqbpk0g Z+s2q]pir°Z+s2q]pir°[Ì„1a‹°•°–ð[Ì„1a‹°•°–ð[Ì‚â€Ú‹”p˜€]Àƒaà•°•°]À‚â’à˜€]å‚âa‘“Е]Àƒaà•°•°_´‚â}‘p•`”À]À„Ÿ}ŽÐ›à_´ƒV} —@’à_´‚â}‘p•`”À`T‚â}`–“€_´ƒV} —@’àa¨‚â{L’˜Ð_´„yzŸ`žpÐa¨ƒ6zŸ”p›P„0_´ƒÐx=Ž€0oàa¨‚ây~” šra‚âx=‘šma¨‚xx=‘ð™pm_´‚âvÈà–ðea¨€ìuã‘ð” eà_´‚.uÛŒð– d aŸ€ìuÛŽ0”Àc°_´€ìtTà“€bpa¨€åuÛ°’àd_´€sy‹`’_ða¨~ösʰà_ða2~ösy@à^a¨~vsyŽ0ŒP]À_´~ör‘‹`à] a¨}r»ŒPˆ@[@_´}q܉Ѓ@Y_´}q܉Ѓ@Y_´}Ã`Œ›_´}Ã`Œ›^{~öÃ‘ðŒ ™À_´~ö€Ð Œð›P_´~ö€Ð Œð›P]Àr Ã`@h`Œð]Àr Ã`@h`Œð^gq<Ãb fÐŽ0]Àq<€[_gÀˆà]Àq<€[_gÀˆà_´oŸÃheà” _´oŸÃheà” `oEÃh`f€•_´oEMef0‘ð_´oEMef0‘ðažkYa^j@ŠpažkYa^j@Špa¨kY}bÀea¨kLag `àŒPa¨kLag `àŒPcœwvÃà‰Ð€cœwvÃà‰Ð€b…yÑ ‰Ð›Pcœy€Á” ˆ@šcœy€Á” ˆ@šex8a•Œ –ðex8a•Œ –ðfƒwaŒ–ð•°ew€'“€—àew€'“€—àg'u(Ã@™ —@g'u(Ã@™ —@g„u(£~@› ”Àg„uÃ~@™p—hu(Ãxð™À–ðhu(Ãxð™À–ðg„i´Ã}ð\€‘ðg„i´Ã}ð\€‘ðg„ic\0‘PixiûÈ]À°ixic€x•b ‹°klkHÓÐ_ðˆ@iåica˜€dð‰Ðklj‘a” _ ‡ klj‘a” _ ‡ g„ic\0‘Pg„ic\0‘Pg„h8a€ ^°•`ixic€x•b ‹°ixhÇa•°dPŽ0iåica˜€dð‰Ðiåica˜€dð‰Ðm)yaa0ŽÐ‘Pm)yaa0ŽÐ‘Pm`y{aaÐŒ “Ðm`y¸b ŽÐ’n¦{ aaÐŒð“ÐoFyÃe@‹`˜0oT{ €@lÀŠp€oTy-Ãg ˜€qH{ pБ›ðqHzdÃr“К`s{ Ãu€‘€s{ Ãu€‘€oT|íac`‡ð—àoT|íac`‡ð—àoT{ €@lÀŠp€n¦{ aaÐŒð“Ðn¦{ aaÐŒð“ÐoFyÃe@‹`˜0oFyÃe@‹`˜0m`w„Ãk€•`•°m`y¸b ŽÐ’m`y¸b ŽÐ’m`mOY–bpŠ m`mOY–bpŠ m`lza•aЋoTmOÞ•°b ŠpoTm!a” `‰€o‹mOa•°b ‰Ðo‹mOa•°b ‰Ðof}anPŽ€œ@of}anPŽ€œ@qH~avÀ’œqH}€xs àžÀs<~Oa0‘ Ðs<}€w`’œàu0}Ía–ðŽ0”pu0}€.˜0Š •`u‘}aœà„Бðu0{ Ö—à‹•`ut{ aœ}P“Ðu0y€› w°”pu’yaš`sP”pu0x>a™pp0” u0x>a™pp0” s<}€w`’œàs<}€w`’œàu0}€.˜0Š •`s<{ Ç –˜€u0{ Ö—à‹•`sY{ ј0u0y€› w°”ptyÛPv ”ptyÛPv ”p’|Š»€ dð—@ŒP’|Š»€ dð—@ŒP’Š»af0•°`’|‹aeà–ÀˆŠ»~#bp~à™p’|Œ1}m°žp‰€ˆ‹k}uМ@’ˆŠ»~#bp~à™p޿л}r‘Pœ@޿л}r‘Pœ@’|†ÃY°t@ŠÀ’|†ÃY°t@ŠÀ’|„Ø€eZ sŒP’p†ÎÃY`v ‹’ „Øa\Ðt‘P‘Ô†Îa[~@‘ˆ„Ø}Vf€v ›ð†Î}^|`”Àˆ†™}fаœˆ†Î|÷i `žp„Ø}i}ðžpŽ”†Î{tm`yà PŽ”„Ø{hr°›ðŒ †Îzµp0v  ðE„ØzŸg o@šŒ †xzŸo@u€ PŒ „Øyöel –ðŒo†ÎzŸouР ‹Q„Øx=_Pd ƒŠ¬†ÎyŒk€p€0Ь…x=iP] ‡Pˆ¸†Îx†vph0ˆ¸†Ax=q b –‡Ÿ†Îx=s _P” ˆ¸†Îvçn ]pk€ˆ¸†Ax=q b –‰“†ÎuÛs qpYЬ…x=iP] ‡PЬ†AuÛr`lp[‹Q„Øx=_Pd ƒ‹à„ØuÛkÐr°[Œ ‚ôx=b a0{ Œ ƒuÛtw`W€‹à„ØuÛkÐr°[Œ „Øušwz0VЬ†AuÛr`lp[Œ †Îu¸w~VЬ†Îu¯vpuÐW€Œ ˆÄuÎ|`|`V@ЬˆÄuÌzÐ}V@Œ Š»ug}ÐV@Ьлux}0V@Œ ‹½uÛ} ‰€X Ь‹¾uÛ}‡ðWÐŒ Œ±vP€ppZðŠ¬Œ±v.0Ž0ZPŒ èx=ƒ@ PnЬŽbx=… ¢€wŒ fzŸ€ ž ‘PЬ“zŸ°0’@Œ Œ±{¤{p“ÐœŠ¬Œ±{Ê~@žÀŒ Š»|Ew°tà¢€Š¬Š»|&~@{ £ÀЬŒ±{Ê~@žÀˆ¸Š»|¥|`w`£pˆ¸Œ±|"€ÀpžÀЬŒ±{Ê~@žÀˆ¸ÓzŸ‚œ“0Ь“zŸ°0’@ˆ¸Ž§xÓ„0žÀŽÐЬŽbx=… ¢€w‰¢Ž§x=†°¡àu0ЬŒ±v.0Ž0ZPˆ¸Ž§wá„ИÐcˆ¸Œ±v,~‹`YЬŒ±v.0Ž0ZPˆ¸‹ÒuÛ|`‡ W€Š¬‹¾uÛ}‡ðWЈ¸Š»um|°€V@Ьлux}0V@ˆ¸ˆÄuÌz€z0V@ЬˆÄuÌzÐ}V@ˆ¸ˆuÛvpuÐW€Š¬†Îu¯vpuÐW€‰“†ÎuÛs qpYЬ†AuÛr`lp[Ь†AuÛr`lp[’|†ÃY°t@ŠÀ’|†ÃY°t@ŠÀ“+„ØÃ^`o°’|„Ø€eZ sŒP’|„Ø€eZ sŒP”p€ìÎc°eàp”p€ìÎc°eàp”p€¨ad dð ”,€ìadf0`”p}ja0‘’›€ì}cf€ ”p~ö|ËkÐ_ À’|€ì|ÇbÀf€Ž€’|~ö{†p€b –¶€ìzŸa€sP– ˆ~öz¿g ‚œàˆ¢zŸeà°›ðW~özŸk0‚PŸˆ€ìzadPqp˜€Ž”~öyþnð° ðŽ”€ìyunp€žpŒ ~öx„gp‡› 6€ìx=d„€™ÀŒ Öx=dP‡™ Œ €ìw_‹°‘Œ\~öx=c°ŠÀ–ð‹ç€ìuÛZŽ0|°Šô~öuÛ`@–„0Œ €ìtâlp—àf€Šº~ösyj@›lÀŒ €Esyp0›hŒ ~öq„o@—@dŠº~ösyj@›lÀŒ ~œqo@—@c°Š¬~ísyi› p€Š¬}óqk0› mˆ¸~Asyf€—l ˆÆ}qf0– jàˆ¸}q0gÀ”ÀfЈ¸|áqnP] ˆÆ}qf0– jàˆ¸{ ph…À]pЬ}oÁr°’^`Š]{ n¶dxð_ Š¬{…n¶kÐà^°Š¬{ ndi y@[‹û{ n¶„ÐqÀXÀЬzªn¶rg _Œ { nè„0l ZðЬypl h°`Œ yo¸{pnðXÀЬxq~@e^Œ wpl lÀ^‹Üwqlpk0^°Œ viqiPjà`àŠ¬wqìz€lpZŒ u(r1Ž€j_ Š¬u(rf…p…ÀX Œ sBsyš°jlpЬtq•‘ f€Œ–s2sy  |°m°‹Ss2q˜€i Š¬tq•‘ f€Š¬s2p!‘ðpb ‰ˆu(q`‰Ð]Àˆ¸s2ojˆàŒ[@ˆ¸u(pVÀ†°\€‰ˆu(q`‰Ð]Àˆ¸wpʉ0u0Y‰>wqŒ nð\0ˆ¸ypäsPÐW€Š¬xq~@e^Ьypl h°`ˆ¸ypäsPÐW€Š¬zªn¶rg _ˆ¸{ ph…À]pŠ]{ n¶dxð_ Š¬zªn¶rg _Ь{ ndi y@[Ь{ ndi y@[–d€!Ãf€d`–d€!Ãf€d`˜ ~öÃl ^`–d~öÞf€d ‘˜X~ÍÃwY°‹°–d~¢afÐc°°˜X~ aqÀZ‰Ð–d}ƒ}k€^ŒP˜X}x}{ÀW€‡ –d}{kX ˆ˜X}zŸ€pW0„€—Ô}zŸ… W€‚ ˜X}x=…ÀW0~@˜F}x=ˆWÐ~@˜X}ZuÛŽÐ_ðj—Ù}uÛ–Pek0˜X~öt/‹`n [à–Š}sy“€x ]p–Š~ösy†~@W0–Š~ösy†~@W0šL†Ù —yàšL†Ù —yà›Ñ„ØÃ•°š„0šL…®a˜€˜0yà›.„Øa–P™Àw°šL…}—@™p€ ›„Ø}•›P0šL…ñzŸ“€˜0lÀ›Á„ØzŸ‘P0uКL„ØxìÀ—gÀœ@„—zŸ@0nðšL„Hx=°–Pg œ@ƒqx=‰0œ@iPšLƒ"uÛ‡ð™ d œ@‚âv—‡œ@h`› ‚âuÛ†°˜€c°œ@‚juÛ†˜Ðc`šL‚âu…‡– a€œ@€ìt@ZšL€ìtw„ІX œ@~ösâv @Z šL~ötDvpgp]pœ@}t„c`jàf0šL}ÇuÛv ^f€›W}uÛf€`nðšL}+x=mZ tšŽ}x=i [yàšL}zŸlÀY°|`šk}zŸjZð}šL}…}s Xp†`›)}}iP\€…ÀšL~=aw°XÀŠ œ-}aiP^‰0›)}}iP\€…Àœ@|öaf0^°…pœ@|f}g ]À„0ô{ aa€bÀ„0ˆ{ }`c`‚ œ@|f}g ]À„0,{ zŸ`@c`œ@| zŸdð^°€pœø{ x=_Pd} œ@{éx=c`@z0%{ uÛ^eàyœ@|NuÛdðbpnP¡{ sy\0lÀoàœ@}t„c`jàf0}sy_ u€dð}sy_ u€dð›Ñ„ØÃ•°š„0›Ñ„ØÃ•°š„0œ@„pÕ`š`ƒ›.„Øa–P™Àw°œ@„a’à0|›„Ø}•›P0œ@„6} Ÿ°›Á„ØzŸ‘P0uМ@„—zŸ@0nðœ@„—zŸ@0nðœ@~ÃnP]pàœ@~ÃnP]pài}Ãa€dðŠpœ@}„f€`@Špœ@}„f€`@Šp ž€ìÑ œ@‡P ž€ìÑ œ@‡P¢¹Ã‹ÐŒ¡˜€ìaŽÐŸƒ¢€‘a”p›Pƒà¢€ì}€`ž ‚P¤¬a Ÿ¢9€ì}°ž °¤î}pŸТj€ìzŸ’@0xP¤êzŸ`œàr¤êzŸ`œàr¢woÃe@bÀŒP¢woÃe@bÀŒP¢w€µc°aЇ  (xÑÃf0_†`¡Ìwaa€bÀ„Р(xmac``@‚P¡aw}d_ð‚  (x}c`‚P ÚwzŸd`@„0 (wµzŸbÀa0ƒ Bwx=c`@€À (w6x=c`€p (wwRaÐa€ Bwx=c`@€À (véuÛ_ðc°`¢u,x=`àbÀ‚P¡¯u(uÛa0bÀƒ@¢u(x(bpa0ƒ@¢t»uÛa€bpƒà¡¯u(uÛa0bÀƒ@¢t}zŸ[@sPnþ~özŸYƒp0nv}x=[àÀu0oT~öyì\€‡ joT~8x=_ð’o@oæ~öx=_ pk0oT}vNb @f0q>~öuÛa€pio²}uÛaÐÀh°oT}vNb @f0oT|ZuÛb ‹dðnv}x=[àÀu0n¹{ uÛ`Œg mf{ x=_P°m°m`y†Îx=Ð_ –P€è†·x=€\Ð’‚܆Îwý‚ Y°ŒP€è†uÛ‚Pið[‚Ü…ÁuÛ0bÀ`€è†ÎuÃ@qpXp‚܆Îu{`}ðV@€èˆÄu£`‚V‚܈uÛŠÀ‹`[‚7ˆÄuÛ‡ ‡PY‚܆Îwý‚ Y°ŒP‚܈Äv?ŽÐà_‚>†Îx=Ð_ –P‚܆åx=‚ bÀ˜Ð‚܈Äv?ŽÐà_„Ї‡x=|°Zà„ЈÄuûwo@Y†Ä‡x=u0]À’…mˆÄuÛxPvÀVà†ÄˆuÛy@sWІĈÄuÌyàzÐV@…mˆÄuÛxPvÀVà†ÄŠ»uvÀƒW0…ÝŠ»uÛt@„€WІċtuÛuЈàXÀ„Њ»v_p€ˆàZP†ÄŒ±vA|`ˆ@WЄЌ±vbzЃVà†Äާw‚‘ð\ЄЎ§w‚PŒ Z†Ä=x=†¢Ð} „Ððx=‰0Ÿ‹†ÄާyT†°› ’„ÐŽ²zŸ`™p—@„zŸ‡P—@—„ÐŽ§z«‚P•°š°†ÄàzŸ…À•`™À„ÐŒ±{®o@}¡@†ÄŒ±{ôtƒà¢0„ЊÉzŸn i ›P†ÄŠ»|6iðlÀš°„ÜŠ»zŸiðf€–P†Ä‰kzŸl bp“ЄЊ»z“pÐd˜0†ÄˆÄy¼y@_ð–P„ЈÄy$xPf0œ@†Ä‡x=u0]À’„Ї‡x=|°Zà„ЈÄy$xPf0œ@‚܆åx=‚ bÀ˜Ð‚܈ÄyM€Àm P„ЈÄy$xPf0œ@‚ÜŠ»zAzÐj@Ÿ„Њ»z“pÐd˜0‚ÜŒ±z“m°m`œà„ЊÉzŸn i ›P‚ꌱzŸj@lÀš°„ÐŒ±{®o@}¡@‚ÜzŸtàz0¢Ð„ÐŽ§z«‚P•°š°‚ÜŽ§zÅyà`žp„ÐŽ²zŸ`™p—@‚ÜŽÑzŸ~à–ð™À„Ððx=‰0Ÿ‹‚ÜxS} – š`‚þx=Ž€0oà‚ܧx=‡ ŽÐ\0‚Üx0~@Z‚ix=uТ0t‚ÜŽ§w„0‹°Y°€èPx=uТ0t€èާwCy…ÀW0~ôöx={À Pm~ôާwŒyà†W€}Jx=‚¢€sð}ާwµ}ƒ@V{ ‹x=xð lp{ ާw¡~`V@y¾x=qÀ“Ð_ yާwqx‰0Xpw$޶x=p€•`a€w$ާx0o‘^`wާx=lp‘ð`àw$Œ±w6s Œ Zðu0Œüx=m` ^°u0Œ±xm`Ž0]ÀtÝŒ±x=l à^`u0Š»wLlÀ…ÀZðs㊻x=dð„0_ u0ˆÄvûm°`Y°skˆÄx=bp°`àu0†Îvæl ƒZ s<‡zx=jà€pZðs<†Îx(nP€pYs†Îx=n€pY`s<„Øwïm°‚ðY°r¶„Øx=j@…p\0s<‚âvûjàŠp]pqw‚âx=`‘Pl s<€ìuäiPa€qH‚ x=``k0qH€ìwyg ‘ds<€ìuäiPa€qHuÛc fÐs<€äuÛið•e@s<€ìuäiPa€sE€ìuÛf€`ds<‚âvûjàŠp]pt‰‚âuÛg ‹°`s<„Øwïm°‚ðY°u0ƒ¾uÛið@_Pu0„Øv°j@Œ^°v6„ØuÛj@Šp]Àu0†Îvæl ƒZ vþ†ÎuÛpЃàXÀu0ˆÄvûm°`Y°w$‡uÛqÀƒXpw$ˆÄv_yà†°W€y‡¯uÛx … W0yˆÄvFvp@ZPz·ˆÄuÛx‰€XpyŠ»vÒ}P‡PW€{ ˆçuÛxPŠ XÀ{ Š»vê{ ‰ÐXp}‰=uÛz€ˆàX }Š»vyà‹`Y~ô‰ÊuÛ|`ŠpXp~ôŠ»v€}ŒPY`€è‰…uÛ€À‰0Xp€èŠ»vf0‡ WЂ7ˆÄuÛ‡ ‡PY‚ÜŠ»vº‚ ‚Và‚܈Äv?ŽÐà_„Њ»v_p€ˆàZP„ЈÄuûwo@Y…ÝŠ»uÛt@„€WÐ…mˆÄuÛxPvÀVà…mˆÄuÛxPvÀVà}Š»zü‡ðsP ð}Š»zü‡ðsP ð~¥Š»zŸƒ@y࣠}ŠzŸ‰0n žÀ~ôŠ»z}r°¢€}ˆÄzˆr` P~ôˆÄzƒ@sP¢0}†ÎyžŠpnðžÀ~ô†Îy…Àjàž }…Bx=`a0À~ô†x=‰0\Ð }„Øvf“€_ð‰€~ô…‘uÛ‡ðdPa0}U„ØuÛ@b f0~ô†Îu.~sðW0}„Øu¸‡ k0\0}†Îu"}ðwV{ „Øuˆàp0ZP{ †Îtøw°…pW€y„ØtY0ŒPY`y†Îu¡u€‡X w$„Øu8p0‡ Zw$†ÎuÌrƒXpv6„ØuÛj@Šp]Àvþ†ÎuÛpЃàXÀw$†ÎuÌrƒXpw$‡uÛqÀƒXpy†Îu¡u€‡X y‡¯uÛx … W0{ †Îtøw°…pW€z·ˆÄuÛx‰€Xp{ ˆÄuÍx ˆX { ˆçuÛxPŠ XÀ}ˆÄu·zІW0}‰=uÛz€ˆàX ~ôˆÄu|}ð„€Và~ô‰ÊuÛ|`ŠpXp€èˆÄu£`‚V€è‰…uÛ€À‰0Xp‚7ˆÄuÛ‡ ‡PY‚7ˆÄuÛ‡ ‡PY}q<|íŒða€“0}q<|íŒða€“0~Bq}zŸ[@sPn>}zŸ[@sPm`{†zŸ`–ð‚ðnv}x=[àÀu0m`{ x]\€‘ vÀmf{ x=_P°m°m`{x=`@‘ðmm`{x=`@‘ðmoTˆÄzzd €_oTˆÄzzd €_qHˆÄyƒo0XpoT†Îz]d ~à_qH†Îy|n €pYoT„Øzn xðYqH„ØyûiP†`\ÐoT‚üzŸe@^`} qH‚âxÝ_‘ðp€o|‚âzŸ_w`•o|‚âzŸ_w`•qHŒ±zhk€Ž0_qHŒ±zhk€Ž0_s<Œ±yjlÀŽÐ^°qHŠ»y¾l ƒàZ s<Š»xÊjàƒà[@qHˆÄyƒo0Xps<ˆÄxvbÀ°`àqH†Îy|n €pYs<‡zx=jà€pZðs†Îx=n€pY`qH†Îy|n €pYr¶„Øx=j@…p\0qH„ØyûiP†`\Ðqw‚âx=`‘Pl qH‚âxÝ_‘ðp€qH‚ x=``k0qH‚ x=``k0s<Œ±yjlÀŽÐ^°s<Œ±yjlÀŽÐ^°tÝŒ±x=l à^`s<Š»xÊjàƒà[@s㊻x=dð„0_ s<ˆÄxvbÀ°`àskˆÄx=bp°`às<‡zx=jà€pZðs<‡zx=jà€pZðxíyzŸ‘ @™pxíyzŸ‘ @™pyyzy`@š`yxázŸÀ ™À{ yz‚PÀžÀ{ xVzŸƒ‘ 0}yy­€ÀŽÐŸ`}w¨zŸ€p‘PÐ~ôyy¾}Ž0Ÿ°~ôw†zŸ‚ð°ž €èyy¶~@‹¡@€wzŸ… àŸ€èwzT„0@Ÿ°€èv\zŸ‡ˆ  €èv\zŸ‡ˆ  wÌkYzŸ“Ðc` wÌkYzŸ“Ðc` ylÁzŸ—gÀÀykYxg•`cŒPykYxg•`cŒPw$icx¤” _ ‡ðw$icx¤” _ ‡ðwKicx=•_ð†w$iEx=“Ð_†`w|icuÛ˜0b „0w$iuÛ•_Pƒxicsy–ðm•`w$hEsy•°cŒPw$hEsy•°cŒPyí„ØzŸ“0lÀ˜€yí„ØzŸ“0lÀ˜€{ †8zŸ‘ði —@{ „Øyw‘Ph°—@{ „Øyw‘Ph°—@y€ìyš°r°“Ðy€ìyš°r°“Ðy…€ìx=œàsð‘Pyx=œàv ’@yx=œàv ’@{ n‹zŸ” bÀ{ n‹zŸ” bÀy“mOzŸ”Àe°{ mrx=” a€‹`zãmOx=– b ‡ð{ mÈuÛ– `@xz•mOuÛšc°xP{ n#sy–ð`@xðz:mOsyžpi z0{ n^q“ÐbÀk€zmOq› q h`{ oEo×}ðf€]pymOp“€w^yoEoÄ}ðpÐX w$mOnÅ’€ \Ðw$oEoQ‘„€\€yoEoÄ}ðpÐX w$quÛp_ Ž€=s2uÛyZðÀŒ sBsyš°jlpŽ”s2u tW€w`Ž”sLsyt@ZPnŽñs2syr[@m`Žñs2syr[@m`Ž”ƒczŸeiP”ÀŽ”ƒczŸeiP”ÀŽý‚âzŸd i“ÐŽ”‚âzdðið”ÀŽ”‚âzdðið”À¶€ìzŸa€sP– ¶€ìzŸa€sP– ˆ¢zŸeà°›ðˆ€ìzadPqp˜€ˆ€ìzadPqp˜€’|vÅzŸ†°pÐ’|vÅzŸ†°pБ»wzŸ… °€’|wza†`ÀÐ’|wza†`ÀÐ’\oEx=g q š°’\oEx=g q š°’|px=n € ð’|oEx[n 0 ð’ÑoEx=… c°™p’|o6x={À\€‘ð’|oEx[n 0 ð’\oEx=g q š°’|o6x={À\€‘ðˆoEvàm°sPŸ`’|mÉuÛq ^`‘ ˆnouÛuÐ^°” ’|mOtsxY°ŒPˆmZsy}ðYŒ¯mOsysðXp‡ˆm^qv bÀa0¢mOqp€\0lÀˆoEo#nj^`’|mOo÷w`b a€’|oEnðxðVˆoEo#nj^`’|p¥qj—àhˆoøqm0nP’|quÛp_ Ž€Œ•s2uÛ vÀŒ Œ sBsyš°jlpŒ–s2sy  |°m°Œ–s2sy  |°m°Œ oEv‰€zУÀŒ oEv‰€zУÀЬoEvQpÐi›ðŒ qwqŒ nð\0Ьwqìz€lpZ‰ˆu(q`‰Ð]ÀЬu(rf…p…ÀX Ьtq•‘ f€Š¬tq•‘ f€ˆ¸osyqÀY†°ˆ¸osyqÀY†°ŠnmOsy`f0Špˆ¸oqr`_ eàŠqmOq^`ioàŠqmOq^`ioàŠ¬xq~@e^Ьxq~@e^Ьwqìz€lpZ‹Üwqlpk0^°‹Üwqlpk0^°`~öqt@™ÀdP`~öqt@™ÀdPŒ ~öq„o@—@dŒ ~œqo@—@c°Œ ~œqo@—@c°Œ viqiPjà`àŒ viqiPjà`àŒ u(r1Ž€j_ ”u(qgph°c°Œ sBsyš°jlpŽ”t€qo@`@g Ž”sLsyt@ZPnŽ”sLsyt@ZPn’|wqŠÀ‘ _’|wqŠÀ‘ _‘rwq‹°” a€’|vªq‹°™ f€ˆwp‰Š °^’|uln¶…À n ˆu(oònPk€]À‘îu(n¶`@… dPˆtNqp€a€d ’|tŽn¶yàf€]p‘és2qc°j@f€’|s2p 360.0) { $spin = $spin - 360.0; } display(); } glpOpenWindow(attributes=>[GLX_RGBA,GLX_DOUBLEBUFFER]); glClearColor(0,0,0,1); glColor3f (1.0, 1.0, 1.0); glShadeModel (GL_FLAT); myReshape(); $cb{&ConfigureNotify} = sub { local($e,$w,$h)=@_;glViewport(0,0,$w,$h); # print "viewport $w,$h\n"; }; $cb{&KeyPress} = sub { # print "@_[1] ",ord(@_[1])," keypress @_\n"; local($ss); &$ss(@_[1]) if ($ss=$kcb{@_[1]}); }; $kcb{'q'} = $kcb{'Q'} = $kcb{"\033"} = sub{ print "Good-Bye\n"; exit 0;}; sub setincrement{$increment = $_[0];} foreach $i (0..9){ $kcb{"$i"}=\&setincrement; } #print "cn=",&ConfigureNotify,"\n"; #print "kn=",KeyPress,"\n"; while(1) { spinDisplay(); while($p=XPending) { #print $p,"\n"; @e=&glpXNextEvent; #print("e=@e\n"); &$s(@e) if($s=$cb{$e[0]}); #print "doncb\n" if ($s); } } libopengl-perl-0.6704+dfsg.orig/examples/cube.pl0000644000175000017500000000270512334200655020772 0ustar gregoagregoa#!/usr/local/bin/perl # # cube # # Draws a 3-D cube, viewed with perspective, stretched # along the y-axis. # Adapted from "cube.c", chapter 3, listing 3-1, # page 70, OpenGL Programming Guide # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; sub wirecube{ # adapted from libaux local($s) = @_; local(@x,@y,@z,@f); local($i,$j,$k); $s = $s/2.0; @x=(-$s,-$s,-$s,-$s,$s,$s,$s,$s); @y=(-$s,-$s,$s,$s,-$s,-$s,$s,$s); @z=(-$s,$s,$s,-$s,-$s,$s,$s,-$s); @f=( 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3, ); for($i=0;$i<6;$i++){ glBegin(GL_LINE_LOOP); for($j=0;$j<4;$j++){ $k=$f[$i*4+$j]; glVertex3d($x[$k],$y[$k],$z[$k]); } glEnd(); } } sub display{ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glLoadIdentity(); # clear the matrix glTranslatef(0.0, 0.0, -5.0); # viewing transformation glScalef(1.0, 2.0, 1.0); # modeling transformation wirecube(1.0); glpFlush(); } sub myReshape { # glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity (); } glpOpenWindow; glShadeModel(GL_FLAT); myReshape(); display(); glpMainLoop; libopengl-perl-0.6704+dfsg.orig/examples/texture.pl0000644000175000017500000000722512334200655021556 0ustar gregoagregoa#!/usr/local/bin/perl # # texture # # This program demonstrates texture mapping # An image file (wolf.ppm) is read in as the texture # then packed into a C array format and given to glTexImage2D # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; $spin=0.0; sub read_ascii_ppm{ # reads in an ascii ppm format image file # returns the list (width,height,packed rgb image data) # # I'm not to familiar with the ppm file format # this subroutine may not work for all valid ppm files # local($file) = @_; local($w,$h,$image); local(@image); open(PPM,"<$file") || die "cant open $file"; (); # the first line is just a header: "P3" (); # The second line is a comment ($_=); # the 3rd line gives width and height m/(\d+)\s+(\d+)/; $w=$1 ; $h=$2 ; ($w>=64 && $h>=64 && $w<10000 && $h<10000) || die "strange sizes $w,$h"; ($_=); # 4th line is depth (should be 255) (/255/) || die " improper depth $_"; $image=""; while() { chop; $image .= $_ . " "; } @image=split(/\s+/,$image); $size=$w*$h*3; ($size == $#image +1) || die "array length $#image +1 differs from expected size $size" ; $image=pack("C$size",@image); close(PPM); if ($file =~ s/\.ppm$/.bin/ and not -r $file) { print STDERR "Writing binary image data '$file'.\n"; open BIN, "> $file" || die "cant open '$file': $!"; binmode BIN; print BIN pack 'N N a*', $w, $h, $image; close BIN or die "error closing '$file': $!"; } ($w,$h,$image); } sub read_bin_image { # reads in a binary image file # returns the list (width,height,packed rgb image data) # # I'm not to familiar with the ppm file format # this subroutine may not work for all valid ppm files # my($file) = @_; my($w,$h,$image); my(@image); open(BIN,"<$file") || die "cant open '$file': $!"; binmode BIN; my $data = do {local $/; }; close BIN or die "error closing '$file': $!"; return unpack 'N N a*', $data; } sub myReshape { # glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0 , 1.0, 30.0); glMatrixMode(GL_MODELVIEW); } sub display{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); glTranslatef(0.0, 0.0, -2.6); glPushMatrix(); glRotatef($spin,0,1,0); glRotatef($spin,0,0,1); glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); glPopMatrix(); glEnd(); glFlush(); glXSwapBuffers(); } glpOpenWindow(width=>200,height=>200,attributes=>[GLX_RGBA,GLX_DOUBLEBUFFER]); glClearColor(0,0,0,1); glColor3f (1.0, 1.0, 1.0); glShadeModel (GL_FLAT); myReshape(); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #$file = "wolf.ppm"; #-r $file or $file = "examples/$file"; #($w,$h,$image)=&read_ascii_ppm($file); $file = "wolf.bin"; -r $file or $file = "examples/$file"; ($w,$h,$image)=&read_bin_image($file); glTexImage2D(GL_TEXTURE_2D, 0, 3, $w,$h, 0, GL_RGB, GL_UNSIGNED_BYTE,$image); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glEnable(GL_TEXTURE_2D); while(1){$spin=$spin+1.0;display; } libopengl-perl-0.6704+dfsg.orig/examples/wolf.bin0000644000175000017500000014001012334200655021150 0ustar gregoagregoa€€ÿÿÌÿÌÌÕÿÌÿÌÌÕÿÌÕÌÌÿÌÌÕÿÌÕÿÌÿÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ™ÕÌÌÿÌ™ÕÌÌÕÌÌÕÌ™ÕÌ™ÿÌÌÕÌÌÕÌÌÿÿÌÕÌÿÿÌÿÕÿÌÿÌÿÕÿÌÿÌÌÕÿÌÿÌÿÕÿÌÿÌÿÕÿÌÕÿÌÿÌÿÿÌÌÿÿÿÕÌÌÕÌ™ÕÌÌÕÌÌÿÿÌÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™Õ̙ՙ™ÕÌ™ÕÌ™ª™™ÕÌ™ªÌÌÕÌ™ÕÌÌÕÌ̪™™ÕÌ™ÕÌÌ€ff€f3ª™™Õ™™ª™f€ff€™™€™f€™™ª™™€™f€ffUf3U3fª™f€ffª™™ªÌÌ€ff€™f€f™€™f€f™€™f€f™€™™€™™€ffUf™€™™Uff€™™UffUf™UffUf™UffUf™UffUf™U™fUf™Uf™U™™Uf™Uf™U™™UffU™™UffUf™UffUf™Uf™U™™ÕÌÌÕÿÿÿÌÌÕÿÌÕÿÌÿÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÿÌÌÿÿÌÕÌ™ÕÌ™ÕÌ™ÿÌ™ÕÌÌÿÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÿÌÿÌÌÕÿÌÕÌÌÿÿÌÕÿÌÿÌÿÕÿÌÿÌÌÕÌÌÿÿÿÕÌÌÿÿÌÿÿÌÕÌÿÿÿÌÕÿÌÕÌÌÿÌÌ€ff€ffªffª™™ÕÌÌÕÌÌÕÌÌÿÌÌÕÿÌÕÌÌÿÌÌÕÿÌÿÌÌÕÿÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌÌÕ™™Õ™™ÕÌ™ÿÌÌÕÌ̪™™Õ™™ÕÌ™ÕÌÌÕÌ™€ff€™fª™f€™f€ff€ffª™™€™™ª™™ª™™€ff€f3€ff€ffª™™ª™™ªÌ™ª™ÌUffª™™€™fª™™€ff€™™€™™ª™™€f™Uf™€™f€f™€™fUffUff€™™UffUffUf™UffUf™Uf™€f™UffUf™Uf™UffU™™Uf™€™™Uf™Uf™UffUff€f™Uf™€ffÕÿÌÿÌÌÕÿÌÿÌÿÿÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÿÌ™ÕÌÌÿÌ™ÕÌÌÕÿÌÕÌÌÿÿÌÕÌÿÿÌÿÕÿÌÕÌÌÿÿÿÿÿÌÕÌÌÕÿÌÕÌÿÕÿÿÿÌÌÕÿÌÿÌÿÿÿÌÕ™™€f3€f3+3U33€f3ª™™ÕÿÌÕÌÌÕÌÌÿÌÌÿÿÌÕÌÌÿÿÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ̪™™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ª™™ª™™ÕÌ™ÕÌ™€ffª™™ªff€f3ª™f€ffÕÌÌÕÌ̪™™€ffª™™€ff€™fª™™€ffª™™ª™ÌUff€™f€™™€™™ª™™€™™€™™€™™€ff€™™€™™€™™€f™U™™€™™UffUf™Uff€ffUf™UffUf™Uf™U™fUf™UffU™™Uf™Uf™U™fUf™U™fUf™Uf™Uf™U™fUf™U™™ÿÿÌÕÌÌÿÿÌÕÌÌÿÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ™ÕÌÌÕ̙ՙ™ÿÌ™ÕÌ™ÕÌ™ÕÌÌÿÌ™ÕÌ™ÕÌÌÿÌ™ÕÿÌÿÌÌÿÌÌÕÿÌÕÌÌÿÿÌÿÌÌÕÿÌÿÿÿÕÌÌÿÌÿÕÿÌÿÌÿÕÿÌÕÿÌÿÿÿÕÌÌÿÿÿÿÌ̪™fU3€f3U3U33+3Uf3ÿÌÌÕÿÌÕÌÌÿÿÌÕÌÌÿÿÌÕÌÌÕÿÌÕÌÌÿÌÌÕÿÌÿÌÌÕÌÌÕÌ™ÿÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ª™™ÕÌ™ÕÌ̪™™ª™fª™fª™fª™™ª™fª™fÕÌÌÕÌÌ€™fª™™ª™™€ffª™™€ffª™™ÕÌÌ€™f€f™€™™€™™ª™™ª™Ì€™™€f™ª™™€™™€™™€™™€™™€™™€™™ª™Ì€™™€™™€ffUf™UffUf™UffUffUf™Uf™U™™Uf™UffU™™Uf™UffUf™Uf™U™fUffUf™Uf™UffÕÿÌÿÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÿÌ™ÕÌ™ÕÌ™ÿÌ™ÕÌ™ÕÌ™ª™fÕ™™ª™fÕ™™ÿÌÌÕÌ™ÕÌ™ÕÌÌÕÌÌÕÿÿÕÌÌÿÿÿÕÌÌÿÿÿÕÌÌÿÿÌÕÌÿÿÿÌÕÌÌÕÿÌÿÿÌÕÌÌÿÿÿÕÌÌÕ™™U33U3U33€f3€3ªf3Uf3U33ªÌ™ÕÿÿÕÌÿÕÿÿÿÿÿÕÌÌÿÿÌÕÿÌÿÌÌÕÌÌÕÿÌÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌ̪™fª™™ª™™ªÌ™Õ™™ª™™€™™ÕÌÌ€™fª™™ª™™ª™™€ffª™™ª™™ªÌ™ª™™€ff€™™ª™™€f™ª™™ªÌÌ€™™€™™ªÌ™ªÌ̪Ì̪™Ì€™™€™Ìª™™€ÌÌ€™™€™™€™™UffUff€f™Uf™€ffUffUf™Uf™Uf™Uf™Uf™U™fUf™UffUf™Uf™UffU™fUf™UffUf™ÕÿÿÕÌÌÿÿÌÿÿÌÿÌÌÿÌÌÕÿÌÿÌÌÿÌ™ÕÌÌÕÌ™ª™™Õ™™Õ™fÕ™fªffª™fª™fªÌfÕ™™ÕÌÌÕÌ™ÕÌÌÕÌÌÿÌÌÕÿÌÿÌÌÕÿÿÿÿÿÕÌÌÿÿÌÕÌÿÕÌÌÕÌÌÕÿÿÿÌÌÕÌÿÕÿÌÿÌÿÕÿ̪™™Uf3U3€f3Õ™3€f3Õ™fU33+33UffÕÌÌÕÿÌÿÿÌÕÌÌÕÿÿÕÌÌÿÌÌÕÿÌÿÌÌÕÿÌÕÌÌÿÌ̪™™ÕÌÌÿÌÌÕÌ™ÿÿÌÕÌÌÕÌÌÕÌ™ÿÌÌÕ̙ՙ™ÕÌÌÕÌ™ª™™Õ™™ªÌ̪™™ª™™ª™™ª™™ª™fª™™€™f€ffª™™ª™™€™™ª™™€™™ª™™€™™ª™Ì€™™€™™ªÌ̪Ì̪™ÌªÌ™ª™Ì€Ì™€™Ìª™™€™™€™™€™™UffU™™€ff€™™Uf™Uf™€f™U™™UffU™™Uf™UffUf™U™™Uf™UffU™™UffUf™Uf™UffÕÌÌÿÿÌÕÌÌÕÿÌÕÿÌÕÌÌÕÿÌÕÌÌÿÌ™Õ̙ՙfÕ™fÕ™fª™fªf3ª™fªf3ª™fª™fª™fÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÿÌÕÌÌÿÿÌÕÌÌÕÿÌÿÌÿÕÿÌÿÌÌÕÌÌÿÿÌÕÌÌÕÿÿÕÿÌÿÌÌÿÿÌÕÌÌ€ffU3ª™fÕÌ™Õ̙ՙfÕÌ™€f3U33U33Uffª™™ÕÌÿÿÿÿÕÿÌÿÿÿÕÌÌÿÿÿÕÌÌÿÿÌÕÌÌÕÿÌÕÌÌÕÿ̪̙ÕÌÌÕÌ™ÕÌÌÿÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ̪™™€™™ª™fª™™ª™™ª™™ª™™€ffU3fª™fª™™€f3ª™™ª™f€™™€™™€™™€™™€™™€™™ªÌ̪ÌÌ€™™€™Ì€™™ª™Ì€™™€™™€™ÌUf™€f™U™f€ff€ff€™™€ffUff€ffUff+3fUffUf™UffUf™UffUffUf™UffUffUffU™™Uf™ÕÌÌÿÿÌÕÌÌÕÿÌÕÿÿÿÌÌÿÿÿÕÌÌÕ̙ՙfªffªf3ªf3€f3ªf3€™fª™fª™fÕ™fª™fÕÌ™ªÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÿÿÌÕÌÿÿÿÌÕÌÌÕÌÿÿÿÌÿÿÌÕÌÿÿÿÌÕÌÌÿÿÌÿÿÌÕÌÌÕÌÌU3€f3Õ̙ՙ™ÕÌfÕ™™Õ™fÿÌ™U3€f3U3€ffUffª™™ÕÌÌÿÿÿÕÌÌÕÌÌÕÿÌÿÌÌÿÌÌÕÌ™ÕÌ™ÿÌÌÿÌÌÿÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕ̙ՙÌÕÌ™ªÌ™ª™™ª™™ª™™ª™™ªÌ™ª™™ª™™ª™f€ff€ffª™f€ff€ff€™™ª™™€™f€ffª™fUff€ffª™™€™™ª™™€™™€™™€™™ª™™€f™€ff€™f€ffUff€™™€f™€™™€ff+33U33+33+33UffUffUf™Uf™UffUffU™™UffUf™U™fUf™ÕÿÌÿÌÿÕÿÌÿÌÌÕÌÌÕÌÌÕÌÌÕÌ™ªffª™fªf3€f3€™3ªff€f3ªffªffÕ™fª™™ª™fª™™Õ™™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÿÌÕÿÿÕÌÌÿÿÌÕÌÌÕÌÿÿÿÌÕÌÌÕÿÿÕÿÌÿÌÿÿÿÌÕÌ™U33ª™fÿÌ™Õ̙ՙfÕÌfÿÌ™ÕÌ™ª™fU3U33U3€f3+33€™fÕÌÌÿÿÿÕÌÌÕÌ™ÿÿÌÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÿÌÌÕÿ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ̪̙ÕÌÌÕÌ™ÕÌÌÕÌ™ª™™ª™™ª™™ªÌ̪™™€ff€ffª™™€ff€ffª™fª™™ª™™€ff€ff€ff€ff€™™€™™€™™ª™™€f™€ff€f™€™™€ff€ff€™™€ff€ff€f™€™™ª™™U33+33U33U33U3U3fUffUffUffUf™+ffUffU™™Uf™Uf™Uf™ÿÌÿÕÿÌÿÌÿÿÿÌÕÌÌÕÌ̪™™ª™™€f3€ff€f3ªf3ªf3€ffª™3ª™fª™fª™fª™fÕ™™ª™fÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÌÌÿÿÌÕÌÌÕÿÌÕÿÌÿÿÿÕÌÿÿÿÌÿÌÌÕÿÌÿÌÌÕÌ™€f3ÕÌ™ÕÌ™Õ̙ՙ™Õ̙ՙ™ÕÌfÿÿÌÕ™™€f3U3€f3€f3€f3ªffÿÿÌÿÿÌÕÌÌÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌ̪Ì̪™™ª™™ªÌ™ª™™ª™™€™™€™™€™fª™f€ff€ffª™™ªÌ™€ff€ff€ffªff€ff€ff€™fª™™€™™€™™€™™€™™ª™™ª™f€ff€ff€f3€™™€ff€ff€f™+33U33+33U33U33+33Uf3UffUffUffUf™UffUf™UffU™™UffÕÿÌÕÌÌÕÌ™ÕÌ̪™™ª™™ª™f€ff€ff€f3ªf3€f3€f3ª™fª™fª™fª™fª™fª™fÕ™fÕ™fª™™Õ̙ՙ™ÕÌ™ÕÌÌÕÌÌÿÌÌÕÌÌÿÿÌÿÿÌÕÌÌÕÌÿÕÿÌÕÌÿÿÿÌÿÿÌÿÌÌÿÌÌ€ffª™™ÿÌ™ÕÌ™ÿÌ™ÿÌ™ÕÌ™ÿÌÌÕÌÌÿÿÌÿÿÌÕÌÌÿÿÌU33€f3ªf3€f3€f3ª™™ÕÌÌÿÿÌÕÿÌÕÌÌÕÿÌÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ÕÌÌÕÌ̪™™ÕÌ™ª™™ªÌ™ª™Ì€™™ªÌ™ª™™Uffª™™ª™Ìª™™Uff€ffª™™Uf3€ffUf3ª™™ªÌ™€ff€ff€™™€ff€™™€ff€ff€™fªf™€™f€ff€ffUf3U33Uf3U33U33€ffU33Uf3U33U33€ffUffUf™Uf™Uf™U™™UffUf™ÕÌÌÕÌÌÕÌ̪™™ª™™ª™™€™f€ffªf3€f3€f3ªf3ªffª™fª™fªffª™fª™™ª™fª™fªÌ™ª™fÕ™™ªÌ™ÕÌ™ÕÌÌÿÌÌÕÿÌÕÌÌÕÿÿÿÌÌÕÿÿÕÌÌÿÿÿÕÿÌÿÿÿÕÌÌÿÿÌÕÌÌ€f3ÕÌ™ÕÌ™ÕÌÌÿÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÿÌÌÿÿÿÕÌÌÕÌÌÕ™f€f3U33€f3€ff€ffÕÌÌÿÌÌÕÿÌÿÌÌÿÌÌÿÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ̪̙ՙ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕ™™ª™™ª™f€™™€ffÕÌÌ€f™€™fª™™ÕÌÌ€™f€™™ª™™€ff€ff€ffª™™€™™€ffUff€ffª™™ª™™€™f€f™€ffª™f€ffª™™UffU33U33U3U3U33€f3€ffU33Uf3U33+33Uf™UffUffUf™Uf™Uf™U™™UffÕÌÌÕÌÌÕÌÌÕÌ™ª™f€ff€f3€f3€f3ªff€f3ªffª™fª™fª™fª™fª™fª™fª™™ª™™ª™™ÕÌ™ªÌ™Õ™ÌÕÌÌÕÌÌÕÿÌÿÌÌÿÿÿÕÌÌÿÿÌÕÌÌÕÿÿÿÌÌÕÿÿÕÌÌÿÿÿÿÌ̪™fª™fÕÌ™ÕÌ™ÕÌ™ÿÌ™ÕÌ™ÿÌ™ÕÌÌÿÌ™ÕÌÌÿÿÌÕÿÌÿÌÌÕÿÌÕÌ̪™fU3€ff€f3Uf3€33ÕÌÌÿÿ̪̙ÕÌÌÕÌÌÕÌ™ÿÌÌÕÌÌÕÿÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ªÌÌÕÌ™ÕÌÌÕÌ̪̙ÕÌÌÕ™™ª™™Uf3€™f€™™€™f€f™ªÌ™ªÌ™ª™™ª™™€ff€™f€ffª™™ª™™€ff€ff€™™€™™€ff€f™€™™€™™€f™€™™ª™™€ffU33U33U33+33U33U33€f3€f3U33€ffUffU33Uff€ffUffUffUffUf™Uf™Uf™ª™™ª™fª™f€ff€f3€f3€f3€f3€f3€f3ªf3ªffªff€™fª™fªffª™fª™™ª™™ÕÌ™ÕÌ™ªÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÿÌÌÕÿÌÕÿÿÿÌÌÕÿÿÿÌÌÿÿÿÕÌÌÕÿÿÿÿÌÿÿÌÿÌÌ€™fÿÌ™ÿÌÌÿÌÌÕÌ™ÿÌÌÕ̙ՙ™Õ™™ÕÌ™ÕÌÌÿÌ™ÕÿÌÿÿÌÕÿÌÿÌÌÕÿÌÕÌÌU3€f3€f3Uf3Uf3U33€f3ª™fÕÌÌÕÌ™ÿÌÌÿÌ™ÿÌÌÕÿÌÿÌ™ÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ªÌ™ÕÌ™ª™™ÕÌ̪™™€™fª™™Õ™™Uffª™™ª™™ªÌ™€ff€™™ª™™ª™™€ff€™™€™f€ffUffª™™ª™™€ff€™fª™™ª™™Uf3U33U33U33Uf3U33Uf3€ff€ff€ff€ff€f™€ff€f™€ff€™™€ffUffU3fUf™UffUf™UffUf™Uf™ª™f€ffª™f€f3€f3€f3€33€f3€ffªf3€f3€ff€ffªffª™fª™™ª™™ª™fª™fª™™ª™™ÕÌÌÕ™™ªÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÿÿÿÌÌÕÿÌÿÿÿÿÿÿÕÌÌÿÿÌÕÿÿÕÿÿÿÿ̪™fÿÌÌÿÌ™ÕÌ™ÿÿÌÿÌ™ÕÌ™ª™fª™™ÕÌ™ÕÌ™ÕÌÌÕÌÌÿÿÿÕÌÿÿÿÿÕÌÌÿÿÌU33U3U3U3U33€f3Uff€f3ÕÌ™ÿÌÌÿÿÌÕÌÌÿÌ™ÕÌÌÿÿÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ̪ÌÌÕÌ™ÕÌÌÕÌ̪™™ÕÌÌÕÌ™ª™™ÕÌ™ÕÌ™ª™™€™fª™™ª™™€™™€™™ª™™ª™f€™™ª™™ª™™ªÌÌ€ffª™™ª™™UffU3fU33+3U33U33€f3ªff€ffª™f€ffªffª™™ª™™€ff€™™€f™€™™UffUffUf™UffUf™Uf™+f™Uffªffªff€f3ªf3€f3€33€f3€f3€f3€f3ªff€™3€ffª™fªff€™fª™fª™™ª™fª™™ª™™ÕÌ̪̙ÕÌÌÕÌÌÕÿÌÿÌÌÕÿÌÕÿÿÿÿÌÕÌÌÿÿÌÿÿÿÕÌÌÿÿÿÕÌÌÿÌÿÿÿÌ€™fÿÌÌÕÌÌÿÌÌÕÌÌÕÌ™ÕÌ™ÕÌÌÕ™™ÕÌ™ÕÌÌÿÌ™ÿÿÌÕÌÌÕÿÿÕÌÌÿÿÿÕÌÌÕÌ™Uf3+U3Uf3U33€f3U33ªffÕÌ™ÕÌÌÿÿÌÿÿÌÕÌÌÿÌÌÕÿÌÕÿÌÿÌÌÿÿÌÿÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ̪™™ÕÌÌÕ™™ª™™€™™ª™™ª™™€™f€f™ª™™ªÌ™€™™ª™™ª™™ª™™ªÌ™ª™™ª™™UffU33Uf3+33+33U33€™f€™™ªffª™f€f3€ff€ff€ff€ff€ff€f™U™f€f™UffUffUffUff+ffUf™Uf™Uf™€f3ªf3€f3€f3€f3U33€f3€f3€f3€ff€f3€™f€ffª™fªffª™fª™fª™™ÕÌ™ª™™ªÌÌÕ™™ªÌÌÕÌÌÕÌÌÕÿÌÿÿÌÕÌÌÿÿÌÕÿÿÿÌÌÕÿÌÕÌÌÿÿÿÕÌÌÿÿÿÿÿÌÕÌ̪™fÕÌ™ÿÌÌÕÌ™ÕÌÌÿÿ̪™fª™™ÕÌÌÕÌÌÕÌÌÿÌÌÕÌÌÕÌÌÿÿÿÕÿÌÿÌÿÕÿÌÕÌ̪™™Uf3Uf3Uff€ff€ff€ffUf3€ffª™™ªÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ̪ÌÌÕÌÌÕÌÌÕÌÌÕÌ™ªÌ™ª™™ª™fª™™ª™™€™™ª™™ª™™ª™™ª™™ª™™€™™ª™™ª™Ìª™™€™f€ffU33UffUf3U33€ff€f™€™™€ff€ff€ff€f3€33€33€f3€ffª™f€ff€f™€™™€™™U33UffUff€f™Uf™UffUf™Uff€f3€f3€f3U33€f3€f3€ff€f3€ff€f3ªff€f3ªffª™f€ffª™fª™fÕ™™ª™™Õ̙ՙ™ªÌÌÕÌ™ÕÌÌÕÿÌÕÌÌÕÌÌÿÿÌÕÌÿÿÿÌÕÿÌÕÌÿÕÌÿÕÿÌÕÌÌÿÿÿÕÌÿÿÿ̪™™ÕÌÌÕÌÌÕÌ™ÿÌÌÕÌ™ÕÌ̪™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÿÌÌÿÿÌÕÌÌÕÿÌÿÌÌÿÿÌÕÌÌ€ff€ffU33Uf3UffUff€ff€f3+33€™fª™™ª™™ÕÌ̪™™ª™ÌªÌ™ª™™ª™™€™™ª™™€™fÕÌ̪™™ªÌ™ª™™ª™™ª™™Õ™™ÕÌ™ª™™€™fª™™ª™™ÕÌ̪™™ª™™ª™™ª™™€™™€ffUffUffUf3UffU33Uf3€™™€™™ª™f€™™€f3€f3€ff€f3€ffªff€ffªffªff€™™€f™€™™Uff€ffU3fUffUffUf™+ffUf™€f3€f3€33€f3€f3€f3€f3€f3€f3€f3€™fªffª™fª™fª™fª™™ª™™ª™™ªÌ™Õ™ÌÕÌÌÕÌ̪™ÌÕÌÌÿÿÌÕÌÌÿÿÌÕÌÿÕÌÌÿÿÿÕÌÌÿÿÿÿÌÿÕÿÌÿÿÿÕÌÌÿÿÌÿÌ̪̙ÕÌ™ÕÌÌÕÿÌÕÌÌÕÌ̪™™ª™fÕÌ™ª™™ª™™ÕÌ™ÕÌÌÿÿÌÿÿÌÕÌÿÕÿÌÕÿÌÕÌÌÕÌÌÕÌ™U33U33Uff€f3€ffUf™UffU33U3ª™f€ff€™f€ffUff€ffUff€™fUff€ff€ffUffUff€ffª™™ª™™ªÌ™ªÌ™ª™Ì€™fª™™ª™™ª™ÌªÌÌ€™f€f™ª™™ªÌÌ€ffUffU33+33Uf3U33Uff+33ªf™€™™€f™€ffU33€f3€f3€ff€f3€ffªff€™fª™f€™™€f™€™™+3fUf™UffUffUffUf™Uf™Uff€33€f3€f3€f3€f3€f3€f3€ff€ffª™3€ffªffªffª™fª™™ª™™ª™f€™fª™™ª™™ÕÌÌÕÌ̪™ÌÕÌÌÕÿÌÕÌÌÿÿÌÿÌÌÕÌÿÿÿÌÕÌÿÕÿÌÿÌÿÕÿÌÿÿÿÕÌÌÕÿÌÿÌ̪̙ÕÌ™ÿÿÌÕÌÌÕÌÌÕÌÌÕ™™ªÌ™ª™fÕ™™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÿÌÕÌÿÿÿÌÿÿÌÕÌÌÿÌÌ€™fU33Uf3U33UffUff€f™UffUf™Uf™€ff€f™UffUffU33U33U3fU33U3U33U3U33U33U33U33U33U33U33U3U33U33€f3€ff€ff€ff€ff€ffU33U33U33UffUffUf3U33Uff€™™€ff€ff€ffU33€f3U33€f3Uf3€f3€ff€f3€ff€™™ªf™€™™€™™Uff€™™Uf™UffUf™Uf™Uf™€f3€ff€f3ªff€ffªf3€ffªf3ªf3€ff€ffª™3ª™fªffª™f€™fª™™Õ™™ª™™ª™™ª™™ª™™ªÌ™ÕÌÌÿÿÌÕÌÌÕÿÌÿÌÌÿÌÌÕÿÌÿÌÌÕÿÌÕÿÿÿÌÌÕÿÌÕÿÿÕÿÿÿÌÌÕÌ̪™™ÕÌÌÕÌÌÿÌÌÕÌÌÕ̙ՙ™ª™™Õ̙ՙ™ÕÌÌÕÌÌÕÌÌÕÌÌÕÿÿÿÿÌÕÌÿÿÌÌÕÿÌÕ̙ՙ™Uf3U3fUf3Uff€ffUff€™fUf™UffUff€ffUff€33€ffU33€ff+3+33U33Uf3U33U3Uf3U33U33U3U33U3U33U3€ff€ff€f3€f3€f3€ffU3fUf3UffUffU3fUf3+33€ffªf™€™™ªffU3f€33U3U33€ff€33U3f€f3€ffªff€f™€ff€™™ª™Ì+3fUf™UffUf™€ffUf™Uff€f3ªf3€ffª™3ªff€™3ªff€™f€™fªf3€ffªffªffª™fª™fª™™ª™™ªÌ™ª™™ª™™ÕÌ̪™™ÕÌÌÕÌÌÕÿÌÕÌÌÿÌÌÕÿÌÕÿÌÿÌÌÕÿÌÿÌÌÕÌÌÕÿÿÿÌÌÕÿÌÿÿÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌ™ª™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÿÿÌÕÿÿÕÌÌÕÿÌÕÌÌÕÌ̪™™ÕÌ™U33€f3Uff€ffUff€ffUff€ff€™f€ff+33€ff€ff€f3+3U33+3+33Uf3U33U3U33U33U33Uf3U33Uf3U33Uf3U33€ff€f3€33€ffU33€ffUffUff€ffUffUf3U3fU33ÕÌ™ª™™€ffª™fUf3Uf3€f3€f3Uf3Uf3€ff€ff€ffª™f€™™€f™€™™ªÌÌ€f™UffUffUf™UffUf™Uff€ff€f3ª™fªffª™fªffª™f€ffªff€f3ª™fªffª™fªffª™f€ffª™™ª™fª™™ª™fÿÌÌÕÌÌÕÌ™ÕÌÌÿÌÌÕÿÌÿÌ™ÕÌÌÕÌÌÕÿÌÿÌ™ÕÿÌÕÿÌÿÿÌÕÌÿÿÿÌÿÌÌÕÿÿÕÌ̪™™ÕÌÌÕÌÌÕÌÌÕÿÌÕÿÿÿÌÌÕÿÌÿÌ̪™fª™fÕÌ™ÿÌ™ÕÌÌÕÿÌÿÿÿÿÿÌÿÿÌÕÌÌÕÌÌ€ffU33€ffUf3UffU33U33Uf3€33€ff€ffÕÌÌÕÌ™ÕÌ™ª™™€™fU33+3+33U33+3U33+3U33U33€ffUff€™fª™™€ffU33U33€ff€ff€ffU33UffUff€ffUffUffUf3U33Uf3Õ™™ª™™€ffª™fUf3€f3Uf3U33€™fUf3+33Uf3Uffª™f€f™€™™€™™ª™Ì€™™€™™UffUffUf™€™™Uff€ff€™fªff€ffªf3€™f€ffª™3€f3ªff€ffª™f€™fªffª™fª™fª™fª™™ª™™ª™™ÕÌ̪™™ÕÌÌÕÌ™ÕÌÌÿÌ™ÕÿÌÿÌ™ÕÌ™ÿÌ™ÕÿÌÿÌÌÿÿÌÕÌÿÕÿÌÿÌÿÕÌÌÿÿÌÿÌ̪̙ÕÌÌÕÌÌÕÿÌÕÌÿÕÿÌÕÌÌÕÌÌÿÌÌÕ™™Õ™fÕÌ™ÕÌ™ÕÌÌÕÿÿÕÌÌÕÌÌÿÌ̪̙ÕÌÌ€™fU33Uff€ff€ffUffUf3U3f€ffªÌ™ÕÌ™ÕÌ̪̙ÕÌ̪™™ª™f+33U33U3U33+3+3+33U33+33€™fª™™ÿÌ̪™f€ffUf3€f3U33€f3€ffUffUff+3fUffUffUffUffU33€ffÕ™™ª™™€f™ª™f€3f€ff€ffª™™€f3Uf3Uffª™™ª™™€ff€™™€™™ª™™ªÌÌ€™™Uff€f™€f™Uf™UffUf™€f3ªff€™3ªffª™f€f3ªffª™fª™3€ffª™fªffª™fªff€™fªffª™fªffª™™ª™™ÕÌ™ÕÌ™ÕÌ™ÿÌ™ÿÿ™ÕÌ™ÕÌ™ÿÌÌÿÿ™ÕÌÌÿÌ™ÕÿÌÕÿÌÿÌÌÕÿÌÕÿÌÕÿÌÕÌÌÕÿÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÿÕÌÌÿÿÌÕÿÌÕÌ™ªff€ffÕÌÌÿÿÌÕÌÌÕÿÌÕÌÌÿÌ̪™™ª™™ªffU33Uf3€ff+33U3fUff€ffª™™ªÌÌÕÌÌÕÿÿÕÌÌÕÌ™ÕÌ™ª™fU3Uf3+3+33+U3U33U3U33Õ̙ՙ™ÕÌ̪™™€™f€ffUffU33Uf3U33€f3U33UffUffUffUffUf3+33€f3ÕÌ™ÕÌ™ªf3€ff€ffUffª™™UffUffªÌÌ+33€™™€™f€™™€™™ª™Ì€™Ìª™Ì€™™ª™ÌUff€f™UffUf™U™fª™f€ff€ffª™fª™fªffª™fªffª™fªffª™fªff€ffª™fª™f€™™ª™™ª™fª™fª™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÿÌ™ÕÿÌÕÌ™ÕÌ™ÕÌ™ÿÌÌÕÌÌÿÿÌÕÌÌÕÌÌÕÌÌÕÌÌÿÌÌÕÌ™ª™™ÕÌÌÕÿÌÕÌÌÕÿÿÿÌÌÕÌÌÿÿÌÕÌ™ª™™ÕÌ™ÕÌÌÕÿÌÕÌÌÕÿÌÕÌ̪™fªÌ™ª™™U33Uf3U33U3Uf3€f3ªffª™fª™™ÕÌ™ÕÌÌÿÌÌÕÌÌÕÌ™ª™fÕ™fU3+3+33U3+3U3U3U3€f3ª™fª™™ÿÌ™ÕÌ™ÕÌ™€™™ª™ÌªÌ™Uf3€ffUffU33Uff+33U33Uf3U33U33€ffÕÌfªÌ™€f3ª™™ª™™ªÌ™ª™™€ffU33€ffUff€ff€™™€f™ª™™€Ì̪™™ª™Ì€™™UffUff€f™UffUf™U™f€f3ª™fªffª™f€f3ª™f€ffª™fªff€™f€ff€™fª™f€ffª™™ª™fª™™ª™™ª™™ª™™ÕÌ™ª™™ª™fª™™Õ™™ªÌfÕ̙ՙ™ÕÌ™ÕÌ™ÕÌ™ÕÿÌÕÌÌÕÌÌÕÿÌÕÌÌÕÿÌÿÌ™ÕÿÌÕÌ̪™™ÕÌ™ÕÌÌÕÌÌÿÌÌÕÌÌÕÿÌÿÌÌÕÌÌÕÌ™€ffª™fÿÌÌÕÌÌÿÿÌÕÌÌ€™™ª™™€ffUffU33U3U33€f3€f3ª™fª™™ÕÌ™ÕÌÌÿÿÌÕÿÌÿÌÌÕ™™ª™fª™f€3U3U3+33+U33+33U3U3Õ™fª™fÕÌ™ÕÌ̪̙ÕÌÌÕÌ̪™™€™™€ffUf3Uff€ff+33U33Uff+33U3€f3ª™fªÌ™Õ™™ª™fª™™ª™™€ff€ff€™fU33Uf3Uff€ffªÌ̪Ì̪ÌÌ€™ÌªÌÌ€f™UffUffUf™U™fUf™+ff€ffª™f€ffª™fª™fªff€™fªff€™fªffªffª™fª™fª™™ª™™€™f€™fª™™ªÌ™Õ™™ª™™ª™™ª™fÕ™fª™fÕ™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÿÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÿÿÌÕÌ™ÕÌ™ÕÌ™ÕÌÌÿÌÌÕÌÌÿÿÌÕÌÌÿÿÌÿÿÌÕÌ™ª™™ª™fÕÌÌÿÿ̪™™Õ̙ՙ™ª™™€™f€f3Uf3U33ª™fªffª™fÕ™fÕÌ™ÕÌ™ÿÌÌÕÿÌÕÌÌÿÿÌÕÌfªffª™f€f3€33+3+3+33U33U3€33€f3ªf3ª™fÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ̪™™ª™™€ffª™™ª™™+33€ffU33U33U33U3€f3ª™fÕ™fª™f€™fÕ™™ª™™ª™™€ffUf3Uf3€ff€f™ª™™ª™™ª™ÌªÌ̪Ì̪ÌÌ€™™UffUf™€™fUf™UffU™™€ffª™f€ffª™fª™f€ffª™f€ff€ffª™f€ffª™fª™fª™™ª™™ª™fª™™Õ̙ՙ™ª™™Õ™™ª™fª™™ª™fÕÌ™ª™™ª™™ª™fª™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÿÌÌÕÿ™ÕÌ™ª™fª™fÕÌÌÿÌ™ÕÌÌÕÿÌÿÌÌÕÿ̪Ìfª™fÕÌ™ÕÌ™ªÌ™ª™™ª™™ªÌ™€f3€ff€f€f3ª™fª™fÕÌ™ÕÌ™ÕÿÌÿÿÌÕÌÌÕÌÌÕÿÌÕÌÌÕÿÌÕÌ™ª™fª™f€f3€33€f3U33Uf3+33Uf3U33€f3U3ª™fÕ™™ª™fÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™™ª™fÕÌ™ª™fª™fª™fªff€f3U3U3€33ª™fª™fª™fª™fÕÌ™ª™™U3€f3U33€ff€™fÕÌÌÕÌ̪Ì̪™™€™ÌªÌÌ€™Ì€™™UffUffUffU™™+ffUf™ª™f€ffª™f€™f€ffª™f€ffª™f€ff€ffª™fª™fª™™ª™fª™™ª™fªÌ™Õ™™ªÌ™Õ™™ª™fª™™ª™™ª™fª™fªffª™fÕ™™ª™fª™™ª™™Õ™™Õ™™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÿÌ™ÕÌ̪™™Õ™fªÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕ̙ՙ™ª™™ª™fª™™ª™fª™™ÕÌ™ÕÌ̪™f€ff€33€f3Õ™fª™fªÌ™ÕÌÌÕÌÌÕÿÌÕÌÌÿÿÌÕÌÌÿÿÿÕÌ̪™™Õ™™ª™fª™fªf3€ffU33Uf3U33€ff€f3ªff€f3Õ™™ª™fª™fÿÌ™ÿÌ™ÕÌ™ÿÌ™ÕÌ™ªÌ™ªÌ™Õ™™Õ̙ՙ™ªffª™f€f3U3€f3€fÕ™™Õ™™Õ™fÕ™™€f3€f3U3€ff€f3€ffÕÌ̪ÌÌ€™™€™™ªÌÌ€™™€™™ª™™€™™U™™Uf™U™™UffUf™+ffªff€™fªffª™fª™f€ff€ffª™fª™fª™fª™™ª™fª™fª™™ª™fª™™Õ™fª™™ª™fª™™ª™fª™fÕ™fª™fª™fª™™ª™fª™fª™fÕ̙ՙfª™™ÕÌ™ª™™ÕÌ™ÕÌ™ÿÌÌÕÿ™ÕÌÌÿÿÌÕÌ™€™fª™fÕÌÌÕÌ™ÕÌ™ª™™ÕÌ™ª™™€™fª™™ÕÌ™ªÌ™Õ™™ÕÿÌÕ™™€ff€f3€™fª™fÕÌÌÕÌ™ÿÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ̪̙ÕÌ™ª™™ª™f€f3€ffª™f€ffUf3€ff€ffª™f€ff€™f€ffªffª™fª™fÕÌ™ÕÌÌÕÌ™ÕÌ™Õ̙ՙ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ª™fªf3Õ™f€f3UU3Õ̙ՙfª™fª™fªff€f3€f3€ff€™™€™™€ff€™™€™™ª™™ª™Ì€™ÌªÌÌ€™™€™™€f™€™™Uf™U™™Uff+f™ª™f€ff€™fªff€ffªff€ff€™fª™fª™™ª™™ª™™ª™fª™™ª™™ÕÌ™ª™fª™fª™™Õ™fª™fªffÕ™fª™fªf3ªff€f3ª™fª™fª™fÕ™™ª™™ÕÌ™ª™™ÕÌ™ÕÌ™ÿÌÌÕÌ™ÿÌÌÕÌ™€f3€ffª™fª™fª™™ª™™€ff€™f€™fÕÌ̪̙ÕÌÌÕÌ™ÕÌÌÕÌ™ª™™ªÌ™ª™fÕÌ™ÕÌÌÕ™™ÕÌÌÕÿÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™f€ffª™fª™fª™fªffª™f€f3ª™f€ffUf3€™fU33€3f€f3€f3U33ªf3€f3ªffª™fª™fÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÿÌÌÿÌ™ªf3€f3ªfÕ™3€f3€3U3€f3€f3ª™f€f3€f3+3€ff€ffª™ÌªÌ̪™™€™™Uff€™™€™™ªÌÌ€™Ì€™™U™™Uf™+ffU™™UffU™™€f™€™fªf™€™f€™fª™™€™fª™f€™™ª™fª™™ª™fª™™ª™™ª™™ª™™ª™fª™™ª™fª™™ª™fªf3ª™fªf3ªf3ª™fªffªf3ª™fª™fÕ™fªÌ™ª™fÕ̙ՙ™ÕÌ™ÕÌ™ÿÌ™ÕÿÌÿÌ™€ff€ffª™fª™™ª™fª™™UffUffª™™ªÌ™ÕÌÌÕÌ̪Ì̪̙ª™™ª™fÿÌÌÕÌÌÿÌÌÕÿÌÕÌÌÕÌ™ÕÌÌÕÌ™ª™™Õ̙ՙ™ª™f€™3€ff€ff€™f€™f€f3€f3ªff€™fU33€ffU33€ff€f3Uf3€f3€f3€f3€f3€f3ª™fª™fÕ™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™fªf3€fªf3ªf€f3€3U33€f3ªf3€f3U33U33Uf3ª™™ªÌÌ€™™€™™€™™€™™€f™€™™€™™UffU™™€™™€™™U™™Uff+f™Uff€™™ªff€™f€ffªf™€™f€ffª™™ª™fª™™ª™™ª™™ª™™ª™™ª™fªÌ™ª™fª™™ª™fªff€ffªf3€f3ªf3ªf3ªf3ªf3ªf3ª™fª™fª™fª™fª™fÕ™™ªÌ™ÕÌ™ÕÌ™ÿÿÌÕÌ™ÕÌ™ÕÌ™€f3€ff€™f€ff€™™ª™™€™™€™™ÕÌÌÕÌ̪Ì̪™™ª™™ª™™ª™™ÿÿÌÕÌ™ÿÿÌÕÌ™ÕÿÌÕ™™ÕÌ̪™™ª™fªÌ™ª™f€ff€ffUf3€f3€ff€™f€33€f3ª™fªff€f3Uf3+3€f3€f3€f3€ff€f3€f3ª™fª™f€f3ª™fª™fª™fÕ™™ÕÌ™ÕÌ™Õ̙ՙfÕ™fÕ™fªf3ªf3ªf3€f€33€f3€ff€f3U33€f3€ff€™f€ff€™™€™™€f™Uf™Uf™€™™€™Ì€™™+ffUffUf™U™fUffU™™UffU™™€™™€ffª™f€ffªf™€™fªff€™™€™™ª™™ª™™ª™™ª™™€™™ª™fª™™ª™fª™™ª™fª™fªff€f3€f3ª™fª™3ª™fªf3€f3ª™3ª™fÕ™fª™fª™™Õ™™ªÌ™Õ̙ՙ™ÕÌ™ª™fª™™€f3€™f€™™Uffª™Ì€™™ªÌÌ€™™ÕÌ̪Ì̪™™ª™™ÕÌ™Õ̙ՙ™ªÌ™ÕÌ™Õ̙ՙ™ÕÌ̪̙ª™™ª™fª™fª™f€f3€ff€f3€ff€f3€ffª™fªf3€f3€™3ªf3€f3ªffUf3€f3€f3Uf3€f3ª™fªf3€™3ª™fª™fªf3€™3ª™fªf3ª™fª™fÕ™fÕ™™ª™fª™fªf3ª™3ªf3ªf3€f3Uf3+3€ff€™fU33U33€ff€ff€ffUff€™™ª™™€™™ª™™ªÌÌ€™™€™™Uf™U™fUf™+ffUffUf™U™fUf™€™f€f™ª™™€™™ª™fª™™ª™™€™™€™™ª™fª™™ª™™ªÌ™ª™™ª™™ª™f€™fª™fª™fª™f€™3ª™fªffªf3€ffªf3€f3ª™fª™fª™fªffª™fªÌfª™fªÌ™Õ™™€™fª™™€ffª™f€f™€ff€ffª™f€™™ª™™ªÌÌÕÌ̪̙ª™™ªÌ™ÕÌ̪™ÌÕ™™Õ̙ՙ™ª™fÕÌ™ªÌ™ª™fÕÌ™ªffª™f€ff€f3ªffª™3€f3€™f€f3€™fª™f€f3€™fªff€f3ª™f€f3U3€f3ªf3U33€f3€f3ª™fª™fÕ™fª™fª™fªf3ª™fª™3ª™fª™fª™fª™fªf3Õ™fª™3ªf3ª™3€f3€f3U3€ffUf3+33U33U33€ffUf3€ffUff€ff€™™€™™€™™€™™UffUf™U™fUf™U™™Uff+™™UffU™™Uf™€™™ªf™€™fªff€™™ª™™€™fª™™ªffª™™ª™™ªÌ™ª™™ª™™ª™™ª™fªffª™™€ffª™fª™fª™f€f3ª™3ª™fª™3ª™fªf3ª™fª™fª™fªffªffª™fÕ™fÕÌ™€ffªÌ™€™f€™™€™™ª™™€™™€™™ªÌ™ª™ÌªÌ™ÕÌ̪™ÌÕÌÌÕÌ™ª™™ÕÌ™ÕÌ™ª™™Õ̙ՙ™ª™™ª™fª™fª™™€ff€™fª™f€ffª™f€™f€ffª™™ª™f€™fª™f€f3ªff€™3€f3U33€ffUf3€ff€f3€f3€™fªf3ª™fª™fÕ™f€™fª™f€f3€f3ªff€f3ª™fªf3Õ™f€f3€f€3ª™3€f€f3U3U33U33U33U33U33U33Uff€ffUff€™™ª™™ª™Ìª™Ìª™Ì€™Ì€™™€™™€™™UffUff+ffUf™UffU™™+ffªf™ª™™ª™™€™™ª™™€™™ª™™ª™™ª™™ª™™ª™fª™™ª™fÕ™™ª™™ª™™ª™™ª™fª™fª™fªffª™fªffª™fª™fªffª™3ªffª™f€ff€™fª™fª™fª™fª™™Õ™™€™™€f™€™™ªÌÌ€™™€Ì™ª™ÌªÌ™ÕÌÌÕÌ™ª™fª™fÕÌ™ÕÌ™ÕÌ™ÕÌfÕ̙ՙ™ÕÌ™ª™fª™fª™fª™™ªÌfª™fª™fª™fª™fª™fª™fª™™ÕÌ™ª™™ªÌ™ª™™ª™™U33€f3€ffUf3U33Uf3Uf3ªf™€ff€ffª™fª™f€f3€f3€f3€f3€f3€f3ª™fª™3€f3€f3ª™fªf3€f€f3ªf3ªf3€3ªff€f3U3€33U3U33Uf3+33Uf3U33U33U33Uf3Uf3€ff€ffU™™Uf™€f™€f™UffU™™Uf™Uf™U™™UffU™™ª™f€™™ª™fª™™ª™™ª™™ª™™ª™™ª™™ª™™ª™™ª™fª™fª™™ª™fª™fª™fª™™ªffª™fªf3€™fª™3ª™fª™f€f3ªffª™f€ffªf3ª™fª™fÕ™™Õ™™ÕÌ™ªÌ™€™™€™f€ff€™™ªÌ̪™™ª™™ªÌ™Õ̙ՙ™ª™f€f3ÕÌ™ª™fÕ™™ª™fª™fªÌ™ª™™ª™fª™fª™fª™fª™f€™3ª™fª™fª™fª™fÕÌ™ª™™ª™™ª™™ªÌ™ªÌ™€ff€f3€f3€f3€f3Uf3€3fUf3€ff€ff€f3Uf3U33€™f€f3Uf3ª™f€f3ª™3ª™f€f3ªf3Õ™fª™f€f3€f3ªf3ªf3U3€f€f3€f3€3U33U33U33U33€™f€33+33UfUf3U33U33€f3€ffUffUffUf™U™™+ffUff+ffUffU™™Uf™U™™€™fªffª™™€™™ª™™ª™™ª™™ª™™ªÌ™ª™™ª™™ª™™€™fª™f€™fªffª™™ª™fª™fª™fª™fª™fªffª™fª™fªf3ª™fª™fª™fª™fª™™ª™fª™™ªÌ™ª™fª™™ª™™€f™€™fª™ÌªÌ̪™™ÕÌÌÕÌ™ª™fÕ™fª™fª™fÕÌ™ÕÌ™ÕÌ™ÕÌ™ª™fª™fª™fª™™ÕÌ™ªÌfª™fª™fª™fªÌfª™fª™fª™fÕÌ™ªÌ̪™™ªÌ™Õ™ÌªÌ™€ff€f3U33U33U33U33Uf3U3fUffUf3U33Uf3Uf3€f3ª™fª™fÕ̙ՙfª™™ª™fª™fª™fª™f€f3ªffª™fª™fªf3€f3€f3€f€fU3€f3Uf3€f3ª™fU33U33U33U33€33€f3€f3€ffU33Uff+f3UffUffUffU™™UffU™™UffU™fU™™ª™fª™™ª™™ª™fª™fªÌ™ª™™ª™fª™fª™™ª™™ª™™ª™™ª™f€ffª™fª™fªff€™fªffª™3€ffª™3ªffª™fªf3ª™fª™fª™fªffª™fª™™ª™f€ffªff€f3Õ™fÕÌfÕÌ™ÕÌfÕ̙ՙ™Õ̙ՙfÕÌ™ª™fª™fª™fª™™ª™fª™fª™fªÌfÕ™™ªÌfª™™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ª™™ª™fª™fÕÌf€™fª™™ª™fÕÌ™ªÌ™ª™fª™fªf3€™f€f3+3Uf3U33Uf3€ffUf3U33+3Uf3ª™fÕÌ™ÕÌ™ª™fª™fª™fª™3ª™fª™fª™fÕÌ™ª™™ª™fª™fÕ™f€™3€f3€3€f3ªf3€f3€f3€f3€ff€ff€ffUff€f3Uf3U33Uf3U3f€™fUffUffU™fU™fUf™U™fUf™U™™€f™U™fUf™ª™fª™fªÌ™Õ™™ª™™ª™fª™™ªÌ™ª™™ª™™€™fª™™ª™fª™™ª™fª™fª™f€ffª™fª™fª™fª™fª™fª™3ª™fªffª™fªf3ª™fª™™ª™fªffª™fªffª™fª™fª™fÕ™fÕ™fÕÌfÕÌfÕÌ™ÕÌfÕ™™ÕÌfÕ™fª™fª™fªÌfª™f€ff€™3ª™fª™fÕÌ™ÕÌ™ÕÌÌÿÿÌÿÌÌÕÌÌÿÿÌÿÌ̪̙ª™fÕÌ™ª™fÕÌ™ª™fª™™ª™fª™fª™fª™fªff€f3€33€33Uf3U3f€f3+Uf3€f3€f3ª™fÕ™fª™fª™fª™3ª™fª™fÕ™fª™™ª™™ÕÌ™ª™fª™fÕ™™ª™fª™f€33Uf€33Uf3€f3€f3€f3U33Uf3Uff€ffUffUff€ffUff€f3U33+33Uf3Uf™Uf™€™™Uf™U™™U™™U™™U™™€™™ª™™€ffª™fª™fÕ™™ª™™ª™fª™™ª™fª™™ª™fªff€f3ªf3€ffª™fª™f€f3ªffª™f€ffªf3ª™f€f3ªf3€™fªf3ª™f€ffª™™ªÌ™ªff€ffª™3Õ™fÕ™fÕ™fÕÌfÕ̙ՙfÕ™fÕ™fÕÌ™ÕÌfª™fª™fª™fª™fªf3ªÌfª™3Õ™f€f3ª™f€™3ª™fÕÌ™ÿÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÿ̪™fª™fª™™ª™f€f3ª™fª™™ª™f€™fªÌf€™3ªff€f3U3U33U33Uf3Uf3€f3€f3€™3ª™fÕÌf€™fª™3Õ™fª™fÕ™fÕÌ™ª™fª™fÕ™™Õ̙ՙfª™fªf3€f3ªf€f3€f3€3€33€3€f3€3€33UffUf3U3fU3fUf3UffU33+f3+33U33+f3U™fUf™€™fUff€™fUf™U™fU™™ª™fª™™Õ™™ª™™ª™™ª™fª™™ª™fª™fª™™ª™f€ff€f3ªf3€f3ªffª™f€f3€ffªf3ªf3€f3ª™f€f3ªffª™3ªffª™f€f™ª™fª™f€f3ªf3€f3Õ™fÕ™fÕ™™Õ™fÕÌfÕ™fÕÌ™ÕÌ™ª™fª™fª™fª™fª™fÕÌ™ªÌfÕÌ™ÕÌ™ÕÌ™ÕÌ™ª™fÕÌ™ª™fÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÿÿ™ÕÿÌÕÿÌÿÌ™Õ̙ՙfª™f€f3ª™™€f3ª™fª™fª™f€™3U3+3€33Uf3ª™f€ffª™fª™fª™fª™™ª™fª™fª™fÕ̙ՙfª™3ÕÌfª™fªf3€f3ªf3ª™fªf3€f3ª™3ªffª™f€f3€f3€f€f3€3€3Uf3€33U33U33Uf3U33+3€ff+33+f3+33Uf™U™fUf™U™™€™™U™™Uf™U™™ª™fª™fªÌ™ª™™ª™™ª™™ª™™ª™™ª™™ª™™ª™fª™fª™fª™f€f3€™f€f3ªf3€f3€f3€™3ªff€f3€f3€f3ª™fªffª™fª™fª™f€ffªf3ª™fª™fÕ™fÕÌfÕÌfÕ̙ՙfÕÌ™Õ̙ՙfª™fÕ™fª™fªf3ª™fªffªff€ff€™fª™fªÌ™Õ™fÕÌ™ª™fª™fÕÌfÕÌ™ÕÌ™ÕÌ™ÿÿ™ÿÌÌÕÌÌÿÌÌÿÿÌÕÌÌÕÌ™ªff€™3ª™f€f3€f€f3ª™f€f3U3U33Uf3€f3€f3ª™f€™f€f3ª™™ª™fªÌ™ª™fÕ̙ՙfÕÌfª™fªf3€f3€f€f3ª™3€f3ªf3ª™3ª™f€f3€f3€ff€f3€33€f3€f3U3€3U3U3U3U3+3U33Uf3Uff€f™U™fUf™€™™€™™U™™Uf™U™™U™f€™™ª™™ª™fª™™ª™fª™fª™™ªÌ™ª™™Õ™fªÌ™ª™™ª™fª™fªff€f3ª™3€f3ªf3€f3€f3€ff€f3€f3€f3€f3€f3ª™fªffªffª™fªf3€f3ª™3Õ™fÕÌfÕ™fÕ™fÕ™fÕÌ™Õ̙ՙfª™fª™3ªffªffªf3ª™f€f3€f3€f3€f3€3€f3€f3Õ™fÕÌfª™f€™3ÕÌ™ª™fÿÌ™ÕÌ™ÕÌ™ÿÿÌÕÌ™ÿÿÌÕÌ™ÿÿ̪™fÕ™™€™3ª™fªf3€fªf3€f3U3U33€f3€™f€™3€f3ª™fUf3ªÌ™ª™™ÕÌ™ÕÌ™ª™fÕÌ™ª™fª™fª™fª™fÕ™fÕ̙ՙfª™3€f3ªf3ª™3€f3€f3€f3€f3€f€f3€33€f3ªf3€f3€f3€ff€f3Uf3€ffUffUff€™fUffU™fU™™€™™Uf™€™™U™fUf™U™™€™™ª™™ª™fª™fª™fª™™Õ™fª™fª™fª™™ª™fª™fª™fª™fªffª™3ªf3€f3ªff€f3€f3€f3€33€f3€3€f3ªf3€f3€f3€f3ªf3ª™fª™fÕ™fª™3Õ™fÕÌfÕ™fª™fª™fÕ™fª™3ªffª™3ÕÌ™ÕÌfÕÌ™ª™fÕÌ™ÕÌ™ªff€f€3€33U3€f3€f3€f3ª™fÕ̙ՙ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÿÿÌÕÌÌÕÿÌÕÌ™ÿÌ™ª™f€™f€f3ª™fª™fU33Uf3€f3ª™fª™f€™f€f3ª™fÕÌ™ÕÌ̪™™ª™™ÕÌ™ÕÌ™ªÌ™ÿÌÌÕÌ™ÕÌÌÕÌ™ÿ̙ՙfªffª™3ª™3ªf3€fU33€f3€fU3€f3€33€f3€f3€33€33€f3Uf3Uff€f3€ffUffUff+ffUffU™™Uf™U™™€™™UffU™™€™™€f™ª™™ª™fªffª™™Õ™fª™™Õ™fª™fª™f€ffªff€ffªff€™fª™fª™f€f3€f3ª™3ªf3€fªf3€f3U3€f3€f3€33€f3ªf3ªf3ª™3ª™3ª™3Õ™fÕÌfÕ™fª™fª™fª™3ª™fªffª™3ª™fª™fª™fª™fª™™Õ̙ՙfÕ™3€f3€3€3U3€f3U3U33€33€ffÕÌÌÕÌÌÿÌ™ÿÿÌÕÌ™ÿÿ™ÕÌ™ÕÌÌÿÌÌÕÌ™ÕÌ™€ffªf3€f3ª™fÕ™fU3U33€™fÕ™™ª™™€f3€ffª™™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÿÌÌÕ™™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™Õ̙ՙfÕÌfªf3Õ™fªf3€f3€f3€3€f3€33€f3€f€33€f3€f3€f3€ff€f3U3U33Uf3+33Uf3+33€™™€™™Uf™€™fU™™€™™U™fUf™€™fª™™ª™™ª™fÕ™™ª™fª™™ª™fªffª™f€ffª™fª™fª™fª™fÕ™fª™3ªffª™3€ffU33€f3€33€3€33€f3€33€f3€f3ª™fª™fª™fª™fÕ™fÕÌfÕ™fÕ™fª™fª™fª™fªf3ª™3ª™fª™3ª™fª™3ª™fª™fª™fª™fª™fªf3€fU33U3U33€ffUf3ª™fU33€™3Õ™fÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÿ™ÕÌ™ÕÌ™ÕÌ™ÕÌfª™3€f3ª™f€f3Uf3U33ÕÌ™ª™™ªÌ™€f3Uffª™fÕÌÌÕÿÌÕÌÌÕÌÌÕÌ™ÕÿÌÕÌ™ÕÌ™ÕÌÌÕÌ™Õ̙ՙfª™fªf3ªf3ª™fª™f€f3€3Uf3ªf3€f€f3€33€f€f3€f3€f3ª™f€ff€™fUf3Uf3Uf3UffUffUffU™fUffU™™U™fUf™U™f€™™€™fªffª™fª™fªff€f3ªff€ff€f3ªff€f3€ff€ffªff€™3€f3€ffªf3€f3ªf3€f3€f3€33€f3€f3€33U33€33€ffª™fª™™ÕÌ™ÕÌ™ÕÌ™ª™fÕÌ™ª™fÕÌfª™fÕÌfÕ̙ՙfÕ™fÕ™fªffª™3ª™f€f3Uf3€33U33Uf3U3Uf3€ffªÌ™ÕÌÌÕÿÌÕÌÌÕÌÌÕÌ™ÕÌ™€ffÕ™fÿÌÌÿÌÌÕÌÌÕÌÌÕÌÌÕ̙ՙ™ª™fª™f€f3ª™f€f3€3Uf3ªf3ª™fªÌ™ÕÌ™ÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌ™Õ̙ՙ™ÕÌ™ÕÌ™ª™fª™fÕÌ™€f3Uf3U3€ffU33€f3U3U3€f€33ª™3ª™f€f3€f3€f3€f3Uf3€33Uf3€f3Uf3Uff€ffUffUf™Uf™UffUffU™™U™fU™™€™™ª™f€™™ªff€f3€f3€f3€f3ªf3€f3€f3€f3€f3€f3€f3€f3€ffªf3€f3€ff€f3U33€f3U3€f3€33Uf3€f3€f3€™fª™™ÕÌ™ª™™ÕÌ™ª™™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌfÕÌfª™fÕ™fª™3ª™fªf3€f3U3U33U3U3U33Uf3€™fÕÌ̪Ì̪ÌÌÕÌÌÕÌÌÕÌÌÿÌÌÕÌ™ªÌ™ÕÌ™ÕÿÌÕÌÌÿÿÌÿÿÌÕÌ™ÕÌ™ÕÌf€f3€f3ªf3€f3Uf3€f3€™3€ffª™™ÕÌ™ÕÿÌÕÌ™ÕÌÌÿÿÌÕÌÌÿÿÌÕÌ™ª™™ÕÌ™ÕÌ™ª™fª™f€f3€f3Uf3U33Uf3+3+3U3U33U3€fU3€f3€f3ª™3ªf3€3UfUf3U3Uff€f3Uf3Uf3+ffUffU™™€™™€™™€™™€™™Uf™€™™Uffªff€ff€f3ªff€f3€ff€f3€ff€f3€f3€f3€f3€33€f3€f3€f3€f3€ffªf3€f3€f3€33U33€f3€f3U3€f3€f3ª™fª™™ÕÌ™ªÌ™ªÌ™ª™™ª™™ª™™ªÌ™Õ™™ÕÌ̪™™ÕÌ™ª™fÕ™fÕ™3Õf3ª™3ªf3ªf3U3€f3U3U3U3U33€ffªÌÌÕÿÌÕÌÌÕÌ̪ÌÌÕÌÌÕÿÌÕÌ™ÕÌ™ªÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ª™fª™fª™3€ff€fU3€f3€f3Uf3ª™™ÕÌÌÕÌÌÕÿÌÕÿÌÿÌÿÕÌÌÕÌÌÕÌ™ÕÌ™ÕÌ™ª™™ª™3€33€f3€ffU33Uf3Uf3€ffU33Uf3U3U3U3€f3€f3€f3€f3ªf3€f3€33Uf3€33Uf3€ffUffUff€™fUf™Uf™U™™Uf™U™fU™fU™™€™fU™™ªff€f3€ff€f3€f3€ff€f3€f3€f3€f3€33€f3€f3ªf3€f3€f3€33€f3€f3€f3€33€f3U33€3€f3ªffª™fÕ™fª™fÕ™™ª™fªÌ™Õ™™ÕÌ™ÕÌÌÕÌ™ª™™ÕÌ™ª™™ÕÌ™ÕÌ™ÕÿÌÕÌ™ÿ̙ՙ™Õ™fª™3ªf3U33€f3U3U3€f3U3U33ª™fÕÌÌÕÌÌÕÌÌÕ™™ª™™Õ̙ՙ™ÕÌ™ª™fÕÌ™ÕÌÌÕÌÌÕÌÌÿÿÌÕÌÌÕ̙ՙ™€ff€f3€f€f3U3U3€™fÕÿÌÕÌÌÕÿÌÕÌÌÕÌÌÿÿÌÕÌÌÕÌÌÕÌÌÕÌ™ª™™ª™fª™™ª™™ªÌ™ª™™€™™ª™™ª™f€ff€f3U3€f3U33U3€f3€f3€f3€3ªf3€f3€f3€f3€f3Uff€f3Uff€ff€ffUffUff€™™U™™UffUf™€™fU™™U™fª™f€ffªf3€ff€f3€f3ªff€ffªff€ff€ffªffªf3ªffªffªff€f3€33€f3€33U3€f3€f3Uf3€f3ª™fª™™ª™fª™fÕ̙ՙ™ª™™ª™™ÕÌ™ª™™ªÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÿÌÕÌÌÕÌÌÿÌ™ÕÌ™ÿÌ™€f3€f3€f3U3€f3€f3€f3€f3U33ÕÌ™ÕÌÌÕÌ̪̙ª™™Õ™™ª™fª™™ª™fÕ™™ÕÿÌÕÌÌÕÌ™ÕÌÌÕÿÌÕÌ̪̙€f3€f3€ffU33€f3U3ª™™ÕÿÌÕÌÌÕÌÌÕÿÌÕÿÿÕÌÌÕÌÿÕÌÌÕÌ™ª™™ª™fª™fªÌ™ª™™ª™™ª™™ª™™ª™™ª™fª™fª™f+3U33U33U3€f3ªf3€f3ªf3ª™3€f€f3€f3U33€ff€ff€ff€™f€™f€ffUff€™fUffUf™U™™U™fU™™Uffªf3€™3€ff€f3€3fªff€f3€f3€f3ªffª™3€ff€ffª™f€f3ª™f€f3€f3€f3€33U33€f3€33€f3Õ™fª™fª™3Õ™fª™™ªÌ™ª™fÕÌ™ªÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌÌÕÌÌÕÌ™€f3Uf3€f3ª™™ÕÌ™ª™™€f3+3ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ™ª™fª™fª™3ÕÌÌÕÿ™ÿÿÌÕÌÌÿÌÌÕÌ™ª™f€ffUf3€f3€3U3€f3ª™fÕÌÌÕÿÌÕÌÌÕÿÿÕÌÌÕÌÌÕÿÌÿÌÌÕÌ™€ffª™fª™™ª™™€ffU™fª™™€™f€™™€ffª™™€ffUf3U33U3Uf3€f3€f3€f3ª™fª™fªffª™f€ffª™f€ff€™fUf3UffUf™€™™€™™Uf™U™fUffUffUf™U™™€f™€™fªff€f3ªff€ff€ff€ffª™f€f3ª™fªffª™fª™fª™fÕ™fª™fª™fªf3€™3€f3€f3€f3€f3€33€ffª™fªÌ™Õ™™ÕÌ™ª™™ª™fªÌ™ÕÌ™ÕÌÌÕÌ™ÿÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ªÌÌÕ™™ªÌ̪ÌÌÕ™™ªÌ™Õ™fª™f€™fª™™Õ™™ÿÿÌÿÿÌÕÌ™U33+3Uf3+3+f3ªÌ™ª™™ª™fÕÌÌÕÌ™ªffªÌ™ªÌ™ÕÌÌÕÿÌÕ̙ՙ™Uff€f3U33U3U3€3€f3ª™fÕÌ™ÕÌÌÕÿÌÕÌÌÕÌÿÕÌÌÕÌÌÕ̙ՙ™ª™fÕÌ™ª™™ªffª™fª™f€™f€ff€ff€ff€f3Uf3U33Uf3U3U33€f3U33U33ª™fª™fª™™€™™ª™™ªÌ™€™™ª™™€™f€™f€™fUffU™fUffUff€ff€™™Uf™U™fUf™€™fª™f€ffª™fªffª™f€f3€ffªffª™f€f3ª™fª™fª™fªffª™fªff€™fªf3ªffªf3€f3€f3€f3ª™™ª™fª™™ÕÌ™ªÌ™ª™™ªÌÌÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ªÌ̪ÌÌÕÌ™ªÌÌÕÌ™ªÌ™ÕÌ™ª™™ÕÌ™ª™fª™fª™™ÕÌ™ÕÌÌÕÿÌÿÌ̪™f+3++3+3Uf3Uf3ª™™ª™™ÕÌ̪̙ª™™€ffÕÌÌÕÌ™ª™™ª™f€f3€ff€f3Uf3U33U3€33ª™fÕÌ™ÕÌÌÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌ̪™fª™fª™™ª™™ª™fÕ™™ÕÌ™ª™™€ffª™f€ff€f3U33U3U33€f3+33U3€33Uf3U3€ff€™fª™f€™™€Ì̪™™ª™™€™™€™™€ffUf3Uff€™™€f™€™™€™™Uf™U™fUf™Uffª™f€ffª™fª™f€™fªffªff€ffª™fªff€™fª™fª™fªffª™fª™fª™3€f3ªf3€f3ªf3€f3ªf3€f3€™fªff€™fª™™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕ™™ªÌÌÕÌ™ª™Ìª™™ª™™ª™™ÕÌ™ÕÌ™ª™f€™fª™™ÿÿÌÕÌÌÕÿ̪™™U3U33ª3€3€3U3U33€ff€™™ªÌÌÕÌÌ€™™ªÌ™ÕÌ™ª™™ªff€ff€ffUf3U33U33UfU3ª™fÕ™™ÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌÌ€ff€™fÕÌ™ª™fª™fÕÌ™ÕÌÌÕÌ™ª™™ª™™€ffUff€f3Uf3U33U3U33U3U3U33U3U33€f3€ffª™™€™™ªÌ™ª™ÌªÌ̪™™€™™ª™™€™f€ff€ffUffUffUf™U™™Uf™U™™Uf™ª™f€ffª™f€ff€™fªff€ffª™fªf3€ff€f3ªf3ª™f€f3ªff€f3€f3€f3€f3ªf3€f3€f3€f3€f3ªf3ªf3ªffª™fª™fÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÿÌÕÌÌÕÿÌÕÌ™ÕÌÌÕÌ™ÕÌ̪̙ՙ̪̙ª™™ª™™ÕÌ̪™fª™™ª™fª™f€ffÕÿÌÕÿÌÕÌÌ€f3U3ªffÕ™Õ™ªf€3Õ™fU33+33€ffª™™Õÿ̪̙ª™fª™f€ff€ff€f3UffU33U33€f3UfU3€f3ª™f€ffªff€ffÕÌ™ÕÌ™ª™f€f3€f3U33U3€33U3U33U33+3+3+3U33ª™fUffU33Uf3U33Uf3U3U33U33€f€f3€ffª™™ª™™€™™ª™™€™™€™™€™™€™™€™™€f™UffUffUffUffUffUf™ª™f€ffª™f€ffªff€f3€ff€f3€f3€f3ª™f€f3ªf3€f3€f3ªf3ªf3ªf3€f3€f3ªf3€f3€f3ª33ªf3€f3ª™3Õf3ª™™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ̪̙ª™™ªÌÌÕÌ™ÕÌÌÿÌÌÕÌ™€ffª™fª™fÕÌ™ÿÌÌÕÌÌ€f3U3ª™fÕÌÕ™ª™€f3U3+3U33U33ªÌÌ€™™ª™™ª™fªÌfªff€ffUf3€ffU33U3U33U3U3€f3ªffªÌ™ª™™ÕÌÌÿÌ̪™fU33U3U33U33€33€3€3U3U3+3U3U33ª™fÕÌ™U33Uf3U33Uf3U33U33U33Uf3€3U33€f3ª™™ª™™ª™™€™™€™™ªÌ̪™™€™™€™fª™™€™™€™™UffUffUffU™f€ff€f3€ff€f3€f3Uf3€f3€f3€f3€f3ªf3€f3€f3ªff€f3€f3€ff€f3ªff€f3€f3€f3€33€f3€33€f3ªffªf3Õ™™ªÌ™Õ™™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ª™ÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™fª™™ÕÌ™ÕÌÌÿÿÿÕÌ̪ffU3ªf3ÕÌÕÌ3Õ™Õ™ªfª3€f3U3€™fª™fª™™ª™™ª™™ª™™ª™™€ff€ff+3U33U33U3U33ª™™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™UffU3U3€™3U3UfªfªfªfU33+3+33€ffªÌ̪™™€™fU33€f3€f3€33UfU3€f3€™fª™fUf3ª™f€™f€™™€™™ª™™Uf™U™™€™Ì€™™€™™€™f€f™€™™UffUffUf™€f3€f3€f3€f3€f€33€f3€3€f3€3€f3€f3ªf3€ffª™fª™f€™f€ffªff€f3€f3€f3ªf3€f3€f3ªf3€ff€ffÕÌ™ª™™ª™™ª™™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌ™ªÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÿÌÿÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÿÌÌÕÿÌÕÌÌÕÌÌU33U3€f€f3ÿÌfÕÌfÕÌfÕ™3ªfªfU33Uf3Õ™™€™f€™fª™™€™f€ffUf3++33+33+3Uf3ª™™ÕÌ̪ÌÌÕÌÌU33U3U3€fªf€3€3Õ™3ÿ™3Õ™3ª™U3Uf3ª™™ÕÌ̪̙ª™Ìª™f€ff€f3€f3U3€f3€f3ª™fÕÌÌÕÌÌÕÌ̪™ÌªÌ™ª™Ìª™™ª™Ì€™™€™™€™™€™™€™™€™™U™™€™™Uf™Uf™U™f€f3€33€f3€f€f€33€f3U3€33Uf€33€f3€f3ªff€f3ªffª™fªf3€™fªf3€f3€33€f3€33€33ª™fª™fÕ™f€™™€ffª™fªÌÌÕÌ̪ÌÌÕÿÌÕÌ̪̙ÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌ™ÕÌ™ª™™ÕÌÌÿÌÌÕÿ™ÕÌÌ€f3U3€3€fªÌ™ÕÌÌÕÌÌÕÌÌÕ™3ªf+3U33ª™fª™™€ff€™fUffU33U33+33+3+33U33ª™™ªÌ™ª™Ìª™Ì+3U3€3ªfÕ™Õ™Õ™3Õ™3ÿÌfÕ™3€f3U3€™fª™™ÕÌÌÕÌÿªÌ™ª™™€ff€f3€f3€f3ª™f€ffª™fªÌÌՙ̪Ì̪™ÌªÌ̪™Ì€Ì̪ÌÌ€™™€™™€™™€™™€™Ì€™Ì€™Ì€f™U™fUf™€f™€f3ªf€f3ªf€f€33€f3€3€3€f€33€f3€f3€f3€f3€f3€f3€ff€f3€ff€f3€f3€f3€f3€ffª™fª™™ª™™€ff€™fªÌÌÕÌÌÕÌÌÕÌÌÕÌ̪ÌÌÕÌ̪ÌÌÕÌÌÕÿÌÕÌ™ÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÿÌÿÌÌÿÌÌÕÌ™ª™™ª™™ÕÌÌÕÿÌÿÌÌÿÌÌÕ™f€f3€3ªf€f3€™™€™™ª™™Õ™3€fU33+3€™f€ff€ff€ffU33+33+33+3+33++33U3€™3ª™™Õ™™ª™f+U3€f3Õ™ªfÕ™3Õ™fÕ™fÕÌf€f3€f3U33ª™™ªÌÌÕÌÌÕÌ̪™ÌªÌ™ªffUf3€f3ª™fª™f€™3€™™ª™™ÕÌÌÕÌ̪Ì̪̙€™ÌªÌ™ªÌ™ª™™€™™€™™€™Ì€™™€™™U™™U™™Uf™Uf™U™fªf3€3€f3ªf3€f3€f3€f3€f3€f3€33€f€f3€f3€f3U33€f3€33€f3€33€f3€f3ªf3€f3€f3€f3€ffª™fª™™ÕÌ̪Ì̪™™ÕÌ̪Ì̪̙ÕÌ̪Ì̪ÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ̪ÌÌÕÿÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕ̙ՙ™ÕÌ̪ÌÌÕÿÌÕÌÿÕÌÿÕÌ̪™™€ffU3€f3€3U3U33U33+3+3€™f€f3Uf3U33U33U33U33++3+3+3U33U33Uf3Uf3U3+33U3€33ªf3€f€f€f3€f3Uf3€f3Uf3Uf3ª™™ÕÿÌÕÌ̪̙ª™™€™f€™fª™fª™fª™™ªÌ™ªÌ™ªÌ̪ÌÌÕÌÌÕÌ̪ÌÌÕÌ̪Ì̪Ì̪̙€™ÌªÌÌ€™Ì€™™€™™€™™Uff€™™€™™€™™Uff€fª33€f€f3ª™fªffªff€ff€f3€f3€f3€f3€f3€f3€3€33Uf3€33€f3U33€f3€33Uf3€33ª™fª™fª™fª™™ª™™ª™™ªÌ™ª™Ìª™™ª™ÌªÌ̪̙ÕÌ™ªÌÌÕÌ™ªÌÌÕÌÌÕÌ™ÕÿÌÕÌÌÕÌÌÕÿÌÕÌÌÿÌÌÿÿÌÕÌÌÕÌ™ªÌ™ÕÌ™Õÿ™ÕÌÌÕÌ™ÕÌÌÕÌ̪Ì̪™™€™™€ffU33U333+33U3+33€ff€ffUf3Uf3€ffUf3UffU3Uf3+33U33+33U3Uf+3+3€ffU33U33U3€33Uf€3fª™™€33U3€ffª™™ªÌÌÕÌÌÕÌ̪™™€ff€ff€ffÕ™™€™™ª™™ª™™ª™Ìª™™ÕÌ̪Ì̪Ì̪ÌÌÕÿÿÕÌÿªÌ̪ÌÌ€™Ì€Ì̪ÌÌ€™™ª™Ìª™™€™™U™f€f™€™™U™™€f3€f3€f3€f3ªf3€f3€™f€f3€ffUf3€33€f3€f3€33€f3Uf3€3€f3U3€f3€3€f3€f3€f3€™fªff€ff€™fªff€™fª™™ª™™ªÌ™ÕÌ̪™™ÕÌ̪™ÌªÌ™ÕÌÌÕÌ̪̙ÕÌ̪̙ÕÌÌÕÌÌÕÌÌÕÿÌÕÌÌÕÌ™ÕÌ™ÕÌ̪™™ªÌ™Õ™ÌÕÿÌÕÌÌÕÌ™ÕÌÌ€ffª™™Õ™™ÕÌ™ª™™ª™f€ffU3+33Uff€™f€ff€™™€™f€ff€™fUf3U33Uf3€™f€ffUff+3+33+3+3+33+33€™™ª™™UffUf3U33€ffª™™ÕÌÌÕÌÌÕÌ̪™ÌªÌ̪™™Uff€ffUf3€™™ª™™ªÌ̪̙ªÌÌÕÌÌÕÌÌÕÌ̪Ì̪Ì̪Ì̪Ì̪Ì̪™™ª™Ì€Ì™ªÌÌ€™™€Ì̪™™Uf™Uff€™™U™™€33€f3€f3€ff€ff€f3€ff€ffªff€f3U33€ff€f3€f3€f3€f3Uf3€f3€f3€3€33ªf3€f3€f3€f3Uf3€f3€f3ª™fª™™ª™™ªÌ™ª™Ìª™™ªÌ̪™ÌªÌÌÕÌ̪ÌÌÕÌ™ÕÌ™ÕÌÌÕÌ̪ÌÌÕÌÌÕÌÌÕÿÌÿÌÌÕÌÌÕÌÌÕ™™ÕÌfª™fª™™ÕÌÌÕÌ̪̙ՙ™ªÌ™ÕÌ™ÕÌÌÕÌ™ÿÌÌÕÌ̪̙ª™™UffUf3U33Uff€ffª™fªÌ™ª™fª™™Uf3€ff€™fª™fªff€ffU33+3+3++3+3+33+3+33+33U33Uf3ÕÌ™ÕÌÌÕÌ™ªÌ̪Ì̪Ì̪™™€™™€ffª™f€f3ª™™ª™™ªÌ™ª™™ªÌ̪ÌÌÕÿ̪ÌÌÕÿÿÕÌÌÕÌÌÕÌ̪Ì̪ÌÌ€Ì̪Ì̪Ì̪Ì̪ÌÌ€™Ì€f™U™™Uf™€™fU33€f3Uff€ffU33€ffUf3Uf3U33U33U3U3€f3€f3ªf3€ff€f3€f3U33€f€f3U3U3Uf3€ff€ffª™™ª™™ª™™ª™ÌªÌ™ª™ÌªÌ̪Ì̪Ì̪™ÌÕÌ̪ÌÌՙ̪̙ÕÌ̪™™ÕÌ̪ÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕ̙ՙ™Õ™fÕÌ™ªf3€ffª™fª™™ÕÌ™ª™™ÕÌ™ÕÌ™ÕÿÌÕÌÌÿÌÌÕÿÌÕÌ™ª™™ª™f€™™€ffª™™ÕÌÌÕ̙ՙ™ªÌ™Õ™™€™fª™™€™f€™f€ff€ffUf3U3+33€™fª™fª™fªÌ™ªÌ™ªÌÌÕ™™ªÌ™ÕÌÌÕÌ̪ÌÌÕÌÌÕÌ̪Ì̪̙ª™™€ff€™™€™f€ffª™™ªÌ™€™Ìª™™ªÌÌÕÌ̪ÌÌÕÌÌÕÌ̪ÌÌÕÌÌÕÌ̪Ì̪™ÌªÌ̪Ì̪ÌÌ€™™U™™€™™€ÌÌ€™™U™™U™™U3€f3€ff€ffUf3€ffU33U33+3U3U33U33€f3€f3€f3€33€33U33€3U33€33€f€f3€f3Uf3U33€ffUff€™™ª™™ªÌ̪̙ª™Ì€™™ªÌ̪Ì̪Ì̪̙ÕÌ̪Ì̪ÌÌÕÌ̪̙ÕÌ̪̙ՙ™ÕÌÌÕ̙ՙ™ªÌ™Õ̙ՙf€ffª™fª™™€ffª™™ª™fª™™ª™™ÕÌ™ÕÌÌÕÿ™ÿÌ̪̙ªÌ™ª™™€™™ª™™ÕÌÌÕÿÌÕ™™ªÌ™ª™™ª™™€™fª™™ª™f€ffª™f€ff€f3Uf3Uf3ª™™ªÌ™ª™™ª™ÌÕÌ̪̙ÕÌ̪ÌÌÕÿÌÕÌÌÕÿ̪Ìÿ€™Ìª™Ìª™™€™™€ff€™f€ffUff€™™ª™ÌªÌ™ªÌÌÕÌÌÕÌ̪ÌÌÕÿ̪ÌÌÕÌ̪ÌÿªÌ̪Ì̪Ì̪Ì̪Ì̙̀ª™Ì€™™€™™€™™€™™€™™€™™U33€33U33Uf3U33€f3U3+3U33U3Uf3U3U33U3€33Uf3€f3€f3Uf€33€f3U3U33€33€ff€ff€ffª™f€™™€™™ª™™ª™Ìª™™ªÌ̪™™ª™™ª™™Õ™ÌªÌ™Õ™ÌªÌ™ªÌÌՙ̪ÌÌՙ̪̙ªÌ™ª™™ÕÌ™ª™fÕ™f€ffª™fª™fª™fª™fª™fª™fª™fª™fª™fª™™ÕÌ™ÕÌ̪™™ÕÌ™ª™™ª™™ÕÌ™ÕÌÌÕÌ̪̙ՙ™ªÌ™ª™™€ffªÌ™Õ™ÌªÌ™ª™f€f3Uff€33Uffª™™ÕÌ̪™™ªÌ™ª™™ªÌÌÕÌÌÕÌÌÕÌ̪ÌÌÕÌÿªÌÌUffªÌ̪̙Uf3€™fUffª™™€™™ª™™ªÌ̪™™ªÌÌÕÌÌÕÌ̪ÌÌÕÌÿÕÌÿªÿÌÕÌÌÕÌ̪ÌÌÕÌ̪Ì̪ÌÌ€™Ì€™™€™Ì€™™U™™Uf™€™™U™™U33€f€f3€33€33€f€f€33€33U3U3U3U3€f3U33U3Uf3U3U33€3U33U33€33€33€33€f3€33€f3ª™™€ffUf3€ff€ffª™™€™fª™™ªÌÌ€™™ª™™€™™ª™™ªÌ™ª™™ª™™ª™Ìª™™ª™™ª™™ª™fª™™ª™fª™™ªffÕ™f€f3€f3€f3€fU33Uf3€f3€ff€™fª™™ª™™ª™fª™™ÕÌ™ÿÿÌÕÌ™ª™™ª™fª™™Õ™™ªÌ™ª™™Õ™™ª™™€ffU3fUf3€ff€™f€ff€™f€™™ª™™€™™€™™ªÌ™ª™Ì€™™€™™€™™€™™Uf™ª™™Uff€ffUff€f3€™™€ffU™fª™Ìª™™ªÌ̪Ì̪™™ªÌ̪Ì̪Ì̪ÌÌÕÌ̪ÌÌÕÌÿªÌ̪Ì̪̙€™ÌªÌÌ€™ÌU™™Uf™Uf™€™™€™™U™™€f3€3€f€f3€f3€fªf3€f3€f3€3€3€f3€f3€3€3Uf3€33Uf3€3U33€fU33€f3U33U33€f3U33€f3Uf3€f3€ff€ff€™™€™™€™™ª™™ª™™ª™™€Ì̪™™€™™ª™Ìª™™ª™ÌÕÌ™ª™™ª™™ª™™ª™f€ffªffª™f€ff€f3€ff€f3Uf3U33Uf3U33Uf3€ff€™f€™™ª™™€™fÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ª™™ª™™Õ̙ՙ̪™™ª™f€ff€™f€f3€ffU33€f3€ff€™f€ff€ffUff€f™€™™Uf™€™™€ffUffUffUffUffU33€ffU33€ff€ff€™f€™™€™™ªÌ̪™™ªÌ̪̙ª™Ìª™™ªÌÌÕÿÿªÌÌÕÿ̪ÌÌÕÌ̪Ì̪ÌÌ€™™€™™€™™€™™€™™UffU™™U™™€™™€f3€f3ªf3€fªf3€f3ªf3€f3€f3ªf3€f3ªf3ªf3€f3€f3€33€f3U3U33U3U33U33€f3U3U33€33€33€f3€f3ªffª™f€™™ª™™€™™ª™™ª™™€™™€™™ª™™ª™™ª™™€™™€™™€™™€™™ª™™€™f€ff€ff€f3€ffª™f€f3ª™fªff€f3€f3U33Uf3U3UffUf3ª™f€ffª™fª™™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌ̪™™ª™™ªÌ™ª™f€ffª™fª™f€ffUf3€f3€f3€ff€ffUffUf3Uff+ffUffUffUf™UffUf3+3fUf3UffUf3Uf3U33€ff€™f€f™€™™ª™Ì€™™ª™™ª™™ª™™€Ì™ª™™€™™ªÌÌÕÌ̪ÌÿÕÌ̪Ì̪Ì̪ÌÌ€™™Uf™U™™€™™U™™Uf™Uf™U™™€™™€f3ª33€fªf3ªf3€f3ªf3€f3ªf3€f3€f3ªf3€f3€f3ªf3ª™fª™f€f3€f3€3U3Uf€33Uf3U33€f3U33€f3€f3€ff€f3€ff€™™€ff€ff€ff€ff€™™ª™™ª™™€ff€™™€™™ªÌ™€ff€™fUffªff€f3€™fª™fª™fª™f€ff€™fªff€ffªf3€ff€3U33€f3U3ªffÕÌ™ÿÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ̪Ì̪̙ª™™ÕÌ™ªÌ™ª™™€™f€ff€ffUf3€f3€ff€ff€f3+3U3U33+3+33+33Uf3U3f+f3U33U33Uf3Uf3€ff€™fªf™€™™ªÌ™ª™™ªÌ̪™™ªÌ̪Ì̪™™ªÌÌ€™™ª™Ì€Ì̪Ì̪Ì̪Ì̪™ÌªÌ̪ÌÌUf™U™™€™™Uf™€f™U™™Uf™U™™ªf€f3ªf3€33€3ªf3€f3ªf3€f3ªf3€f3€f3ª™fªff€f3ªf3ªf3ªff€f3€f3U3U33U3€33U3U33€f€f3€3€f3€f3€ffªffUff€ff€ff€ffª™f€ff€™fUffª™™ª™™ª™™€ff€ff€ffUf3€ff€ffª™fª™™ª™f€™™€™f€™fªff€™fªffUf3€f3€f3Uf3ª™™ÕÌÌÕÌ™ÕÿÌÕÌÌÕÌ™ÕÿÌÕÌ̪ÌÌÕ™™ªÌ™ª™™ª™™ª™™ª™f€™™€f3€f3€ff€ff€f3€f3Uf3U33+3U33+33U33+3+33UffU33UffUffUf3U3f€™f€™™€™f€™™ª™™ª™™ª™™ªÌ™ª™™€™™€™™ª™™€™™€™™€™™U™™€™Ì€™ÌªÌ̪ÌÌ€™Ì€™™Uf™Uff€™™U™™€™™€™™U™™€f3ªf€f3ªf3ªf3€f3€f3€3€f3€f3€f3ªffª™f€f3ª™fª™f€ffª™f€f3€f3U3U3U3Uf3U33€3U33€f3U3Uf3€ff€ffUffUff€ff€ff€ff€ffª™f€ffª™™ª™™€™™ª™™€ff€™f€ffUff€ffª™™€™fª™™ª™™€™™€™Ìª™™ª™™ª™™€ff€ff€ff€ff€ffÕ™™ÕÌÌÕÌÌÕÌÌÕÌ̪ÌÌÕÌÌÕÌÌÕÌ̪™™ÕÌ̪̙ª™™ª™™ª™™ª™™€ff€ff€f3ª™f€ff€ff€f3U33U33+33+3+33+33U3fUf3Uff€f3U33UffUff€™fª™™€™™€™™€™™€™™€™Ìª™™ª™™€™f€™™€™™€™™€™™€™Ì€™™U™™Uff€™Ìª™™€ÌÌ€™™€™™U™™Uf™U™™Uf™U™™U™™€33ªf€f3ªf3ªf3€f3€f3ªf3ªffÕÌ™ÕÌ™ª™fÿÌÌÕÌ™ÕÌ™ªÌfÕÌfª™™Õ™fª™fUf3U3U3U3€f3U3€f€33U3U33€f3U33€ff€ff€ffUffU33Uf3€ff€ff€ff€ff€ff€f3€f3Uff€f3Uf3€f™€ff€f™Uffª™Ì€™™ªÌ̪™Ì€™™ª™™€ffª™f€ff€™fª™fÕ™™ª™fÕÌÌÕÌ™ªÌ̪™™ÕÌÌÕÌ̪̙ª™™€™™ª™™ªÌ™ªÌ™ª™™€ff€f3ªff€f3€™fªf3€f3€ff€f3Uf3+33U33U33+33UffU33UffU33€ff€™fª™™€™™€™™€™™€™™€™™ª™™€™™€™™€™™€™™UffUffUffU™™€™™€™Ì€™™U™fUf™U™™U™™€™Ì€™™U™™€™™U™™€™™U™™€Ì™€f3€f3ªf3ª33€3€f3ªf3ª™fª™fÕ̙ՙ™ÕÌ™ÕÌ™ÿÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™€f3€3U3€3€3U3€33U3U3U33Uf3€ff€ffUff€ff€ffUf3€f3€ff€f3€f3€ff€f3€ff€f3€f3€f3Uf3UffUffUffUff€™™ªÌ̪™Ì€™™€™™€™™€™™€™™ª™fª™fªff€™3ª™™ÕÌÌÕÌ̪™™ÕÌ̪™™ÕÌ™ÕÌ̪™™ª™™ª™™ª™™ª™™ª™™€ff€ff€f3€ffªf3€f3€f3ª™f€f3€f3U33Uf3+33UffUffUf3U33Uff€™f€™™€™™€™™€™™€™™€™™€™™€™Ì€™Ìª™™€™™€ffU™f€™™UffUffU™fUf™U™™€™™UffU™f€f™€™™U™™€™™U™™U™™U™™€™™U™Ì€f€33€f3€fªf3ª™fÕ™fª™fÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÿÌ™ÕÌÌÕÌ™ÕÌÌÿÌ™ÕÌ™ª™fªff€f3€f3€fU33U3U3Uf3U33€f3U33€f3€ff€ff€ff€ff€ffªffª™f€ff€f3€ff€f3Uf3€33U33U33€ffUf3Uff€™™U™f€f™€™™€™™€™™€™™€ffª™™ª™™€f3€f3€ffª™™ÕÌ̪̙ªÌ™ÕÌ™ÕÌ™ª™™ÕÌ™ªÌ™ª™fª™™ªÌ™ª™™ª™™ª™fªff€f3€f3€ff€f3€f3€f3ªff€f3U33U33Uf3+33U33U33U33Uf3Uf3U3f€ff€™™€™™€™™€™™€™™€™™€f™€™™€f™€™™€f™Uff€™fUff€f™U™™€ff€™Ì€™™€™™U™™U™™€™™U™™€™ÌU™™€™™U™™€™™€f3€3€f3€fª™fÕ™fª™fª™fÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÿ™ÿÌÌÕÌ™Õ̙ՙ™ª™™ª™f€f3Uf3U3U33U3U3U33U33€f3U33U33Uf3€f3€f3€f3€f3ª™fªf3ª™f€ffUf3U33Uf3U33UffUf3Uf3€ffUf3€f™€™™€ff€ff€™™€ffª™™€ffU33Uf3€™fÕÌÌÕÌÌÕ™™Õ̙ՙfª™™Õ™fÕ™fª™f€™fª™fª™™ª™™ª™fªff€ff€ffª™fªÌ™ª™f€ff€f3ª™f€f3U33U3Uf3U33U33Uf3U33Uf3€fU33€f3€f3€ff€f™€™™€™™Uff€ffUffUffUff€ff€™™€™™€™™€™™€™™€™™UffU™ÌU™™€™™U™™€™™€™Ì€™™U™™U™™U™™U™™€f3€fªf3€33ª™fª™fÕ™fÕÌ™ÕÌ™ÕÌÌÕÌÌÿÿÌÕÌ™ÕÌÌÕÌ™ÿÌÌÕÌ™ÿÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ª™™€ff€f3U33U33U33Uf3U33€f3U33U33U3€33€f3ªf3€ffª™3€™3€f3€f3€f3€f3Uf3U33+33€ffUf3€f3€f3€f3Uff€ff€f3Uf3ª™f€™™€™™€ffUf3€ffÕÌ™ÕÌ™ÕÌÌÕ̙ՙ™€f3€f3ªffª™fª™fªffª™fª™fª™fªff€f3€f3€ffÕ™™ÕÌ™ÕÌ™€f3€ffªf3€f3+3Uf3U33Uf3U3fU33U3U3U33€f3€33U3€f3Uff€ff€™f€™™€ffU™f€ffUffUf3U33Uf3UffUff€™™€™™€™™€™™€™™U™ÌU™™€™ÌU™™€™Ì€™™U™™€™™€™™ªf3€3€f3ªf3Õ™fÕ™™Õ̙ՙ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÿÿÌÿÿÌÕÌ™ÕÌ™ÕÌ™ÿÿÌÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ª™f€ffU33+3U33U33U3U3U3U33U3U3€f3€™3ª™fªff€f3€f3€ff€f3€f3Uff€f3U33Uf3€33€f3€f3€fU33U33Uf3€f3€ffªff€ff€™fUffª™™ªÌ™ÕÌÌÕÌÌÕÌ™ª™fª™fªf3ª™f€f3€™3ªf3€f3ª™fª™fª™f€f3€ffª™fª™™Õ̙ՙ™€ff€f3€ff€f3U33Uf3U33U33Uff€f3+33U3U3€f3€f3€f3€f3€™f€ffU™fUf™€f™€™™€f™€ffUffUf3Uf3Uf3UffUffUff€f™U™™Uf™U™™U™™€™™U™™U™™€™™U™™Uf™U™™€fªf3€f3ªf3Õ™fÕ̙ՙ™ÕÌÌÕÌÌÿÿÌÕÌ™ÿÌÌÿÌÌÕÌÌÿÿÌÕÌ™ÕÌ™ÕÌ™ÿÌ™ÕÿÌÕÌÌÿÿ™ÕÌÌÕÌ™ÕÌ™ª™f€ffU33U3+3U3U33U3U33Uf€33€33€f3€™3€ff€f3€f3ª™f€ff€f3€ffª™f€ff€™f€ff€3fUf3Uf3U3€f3U3€3€f3€f3€ff€™™Uff€ff€™fªÌ™ÕÌ̪™f€f3ª™fªf3ªf3€f3ªf3€f3€™3€f3€f3€f3€f3€f3U33ª™™ÕÌ™ª™fU33€f3€ff€33€3fUf3UffUffUf3Uf3€f3U33U33€f3Uf3U33€ffUff€ffU™fUffUffUffUffUff€ffUff€ff€ff€ffUf3U33Uf3€™™U™™Uf™Uf™U™fUf™U™™U™™U™™€ffU™™€fªf3ªf3ª™fÕ™fª™™ÕÌfÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÿÿ™ÕÌÌÕÌ™ÿÌÌÕÌ™ÿÌÌÕÿÌÿÌ™ÿÿ™ÕÌÌÕÌ™ÕÌÌÕ̙ՙ™ª™f€f3+3U+33U3U3U3U3€f3€f3€f3€ff€f3€f3ªff€f3€f3€f3€f3Uf3€f3€f3ª™fª™f€f3€33U33U33€3€f3€f3Uf3€f3€ffªf3€33€ffÕÌÌÕÌ™€f3€33Õ™™ª™f€f3U33€f3U3€33€f3Uf3U33U33Uf3+33€ffª™™ª™™€3€f3Õ™fUf3UffUf3UffUf3€™™€ffUffUf3€f3Uf3U33U3+fU33Uf3Uff€ffUff€ffUffUffUffUffUffU33Uff€ffUffU3fUffUff€™™UffUf™U™fUf™UffUffU™™U™™€f3€f3€f3ªf3ª™fª™fÕ™™ÕÌÌÿÿÌÕÌÌÿÌÌÕÿ™ÕÿÌÿÌÌÕÿÌÿÌ™ÿÿ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌÌÿÿÌÕÌ™ÕÌÌÕÌ™ªÌ™ª™fU33+3U3+3+3U33U3€33U33€f3€f3€33€f3€ff€f3€ff€f3€f3€f3U33€ffª™f€ff€ff€f3€f3€33Uf3€3€f3€ff€™f€ff€f3Uf3€f3ÕÌ™ÕÌÌ€f3Uf3ÕÌ™ª™™U33UfU3U33U3U3U3+33+3U33+33U™fª™™€™f€f3€f3ª™3U33Uf3€ffUffU3f+33ª™™€™fUffUf3€ffUf3Uf3€f3Uff€ff€f3€f™€ff€™™€ff€ffUf3Uf3€f3UffUf3Uf3€ff€ffUf™U™f€f™€™™U™™U™™Uf™U™™U™™Uf™U™™€ff€ffªf3ª™3ª™fÕ̙ՙ™ÕÌ™ÕÌ™ÕÿÌÿÌÌÕÌ™ÕÌÌÿÿÌÿÌÌÕÿÌÕÿ™ÿÌÌÕÌÌÿÿ™ÕÌÌÿÿÌÕÌ™ÕÿÌÕÌÌÕÌ™Õ̙ՙ™€f3+3+3UU3U33€f3U3U33€f3€f3€f3Uf3€ffUff€ff€ff€f3€f3U3€f3€ffª™fª™™€ff€f3€f3U33€f3€f3€f3€ffª™fªffªf3€f3ÕÌ™ÕÌ™+33U33ÕÌÌÕÌ̪Ì̪™™ª™f€ffUf3€33U33Uff+33+33+33ª™™ª™™U33U3U33Uf3Uf3Uf3U33UffUffU3fUf3€ffU33U33UffUf3€ffUf3U33UffUffUffUff€™fUf3U33€f3Uf3€™f€ff€™™€ff€™™€™™Uf™U™™€™Ì€™™U™™Uf™Uf™U™™€™™Uff€f3€ff€f3ªf3ª™3Õ™™ÕÌfÕÌ™ÿÌÌÕÌ™ÕÿÌÿÌÌÕÌ™ÿÿÌÕÌ™ÿÿÌÕÌÌÿÌ™ÕÿÌÕÌ™ÕÌ™ÕÌ™ÕÌÌÿÌ™ÕÌ™ÕÌ™ÕÌ™ªÌ™€f3+U33+3U3U33€fU3Uf€f3U33€f3UffUff€f3Uff€f3€f3€f3€f3U33€f3€ff€ffU3f€f3€ff€f€f3€ffªff€™fª™f€f3€f3ª™fÕÌ̪ÌÌU3+33ª™™€™fU33Uf3UffU33U3+33++3+33+3€™™ª™™Uf3€f3U3U33U3fUffU33Uf3€ff+f3UffUff+33Uf3U33Uf3Uf3UffUf3Uf3U33Uff€™f€ff€™f€ffU33€f3€ff€™f€f™U™™U™ÌUf™€™Ì€™Ì€™™€™Ì€™™U™™€™™U™™U™™€™™€ff€f3€f3ªf3ªffª™fª™fÕÌ™ÕÌÌÿÌ™ÕÌÌÕÌ™ÕÌ™ÕÌ™ÕÌÌÿÌ™ÿÿ™ÕÌÌÿÌ™ÕÿÌÕÌ™ÿÌÌÕÌ™ÕÌÌÕÌÌÕ̙ՙ™ÕÌ™€™fU33+3UU3U3U33U3€3U33U33€33Uf3€ffUf3€ff€ffUf3€33€f3U33€f3ª™f€f3U33€f3€ff€33€33€ffª™f€ffª™f€f3ª™3ª™™ÕÌÌÕÌÌU33+3U33+33++33++33++3+3+33+3+33€™™ª™™+U3U33UffUf3UffUf3U33U33+33€f3U33Uf3U33U33Uf3U33U33U33Uff+33Uf3Uff€ff€™f€ffUff€ff€ff€ff€f™€™™€™Ì€™™€™Ì€™™U™™€™Ì€™Ì€™ÌU™™€™™€™™€™™Uf3€ffªf3€f3€f3ªffÕ™fÕÌ™ÕÌ™ÕÌ™ÕÌ™Õ̙ՙ™Õ™fÕ̙ՙ™ÕÌ™ÕÌ™ª™™ÕÌ™Õ̙ՙ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™€f3U33+3U3U3U3U3€f3U33U33€f3U33U33Uff€f3€ff€ffUf3€ff€f3€f3€f3€33€f3€f3€ffU3ªff€ffªf™€™f€ff€f3ª™fÕÌ™€™ÌÕÌÿÕÌ™ª™fU33+33+3+33+33€™™ªÌ™ª™™U3+33Uf3UffUff+33U33U3Uf3U33U3€f3Uf3U33Uf3U33Uf3Uf3€ffUff€33€f3U33Uf3€ffUff€ff€ff€ff€ff€ff€f™€™™€™ÌU™™U™™€™Ì€™Ì€ÌÌ€™Ì€™™€™Ì€™Ì€™Ì€f3€ff€f3€f3€f3ª™fª™fª™fÕ̙ՙfÕ™™ª™fª™fÕ™fÕ™fª™3ª™fªffª™fª™fª™fª™fª™fÕ™™Õ™™Õ̙ՙfÕ™fÕ™™ª™fªf3U3U33U3U3U33U33U33€f3UffUffUff€ff€ff€f3Uff€33€ffªff€ffªf3€f3€3Uf€f€33Uf3ª™f€™™ª™fUf3€f3ª™fՙ̪™™ªÌ™ÕÌ̪™™U33+3++333+3++3+33ª™f€™fª™™U33+33U33U33U33Uf3+3U33U33UfUf3U33Uf3U33Uf3Uf3Uff€f3Uff€f3€f3€33€f3Uf3€ff€f3U33U3€3U33€ff€ff€ff€f™€™™€™Ì€™Ì€™Ì€ÌÌ€™Ì€™Ì€™Ì€™™€™™€f3ªff€f3€ff€f3ªf3ªf3ª™fª™fÕ™fª™fª™fªf3ª™fª™fªff€ff€f3€ffªff€™fªff€™fª™fª™fÕ™fª™fÕÌ™Õ̙ՙfª™fU33+3+3U33+3U3U3U33€33Uff€ffUff€ff€ff€f3€ff€f3ª™f€™fª™f€f3€3€f3€33€f3€ff€ffª™f€ffU33U33ª™fª™fÕÌÌÕÌ™ª™™ÕÌ™U33++3Uf33+3333++3Uf3ª™f€ff€ff+33+3+33U33+3U33U33U3U3U33U33Uf3U33Uf3U33€ff€ff€f3Uff€ff€f3€f3€ff€f3Uf3€33U33U3€f3€f3ª™f€ff€ffU™™€f™€™™€™Ì€ÌÌ€™Ì€™™€™™€Ì̪™Ì€™Ì€f3ª™f€f3€ff€f3€f3€f3€f3€ff€f3€ff€™f€™f€ff€ffª™f€™fªf™ª™™€f™ªffª™f€™™ª™fª™fª™f€ffª™fª™fÕ™fª™™ª™f€33U33U3U3U3U33U33U33Uf3UffU33Uf3€ff€f3€ff€f3€ff€ffªff€f3€33U3€f3ªf3Uf3+33ªff€™fUf3U3€f3ª™fª™fªffªf3ª™fªffU33+3+333++3U33€f3Uf3€ffUf3U33+33+3U33U3+33U3U33U3Uf3€33UffUffUf3U33Uf3€f3€ffUff€ff€f3€ff€f3Uf3U33U33€f3€f3€f3€33€f3€f3ª™™€ffª™™€™Ì€Ì̪™Ì€™Ì€™™€™Ì€™Ì€™ÌU™™€ff€f3€ff€f3€f3ªf3€f3€ff€ff€ff€ff€™f€™fªff€™™ª™f€ff€™f€ffª™f€™fªffª™fª™™Õ™™ª™fª™fÕ™fÕÌ™ª™fÕ̙ՙ™€ff€f3U33U3U33+3U33U33U33U33U33€f3€f3Uf3€ff€ff€™f€ff€f3€ff€f3€f3€f3€f3U33Uf3ª™f€ff€f3U33U33€f3Õ™™ª™f€f3ª™fª™3Uf€33+3++3+33++33U33U33Uf3U33+3U33U33+3++33+33+3U33U3+33U33Uf3U33Uf3U3f€f3Uff€f3€f3€ff€ff€ff€f3€f3U33U33Uf3U3€33€33€f3€ff€ffªff€f3€f™€™™€™™€™™€™Ì€™Ì€™Ì€™Ì€™™ªÌÌ€™™€ff€f3€f3ªff€f3€ff€f3€ff€ff€™f€ff€f™€ff€ff€™f€ff€™fªf™ª™fª™fª™f€ffª™fª™fÕ™™ÕÌfÕ™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ª™f€f3Uf3U33+3U3U3+33U33U3U33U33Uf3€33€™f€ff€f3€ff€ff€ff€f3U33€f3€f3UfU33€ffUf3Uf3€f3U3U3ª™fªÌfª™™Õ™fª™f€33€f3U3U33U3+33+3U33U3U33U3Uf3+33U33U33+33+3++33+3U33+3U3U3U33Uf3€f3€ff€ff€ffUffUf3€ff€ff€ff€ff€f3€f3Uf3U33U3U33U3€33€f3€ffªff€ffUff€f™ª™™€™™€™Ì€™™€™™€™™€™™€™™ª™™€ff€f3€™f€f3Uf3€f3€ff€f3€ff€™fUff€f™€f™€™f€ff€™fª™™ª™™ÕÌ™ÕÌÌÕÌÌÕÌ™ÿÌÌÕÌÌÕÿÌÿÌÌÕÿÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™fª™fU33U3U33U3U3+33U3U33U33€f3U33€ffUff€ffUf3€ffU33€f3Uf3€ff€™fU33Uf3€ff€f3€ffU33+€f3€f3Uf3Uf3€f3€3€f3€33€33U3U3U3€33U3€fUf3U33+3+3U33+++3+33U3Uf3+33U3Uf3U33Uf3U3f€ffUff€ff€ffU33Uf3€f3€ff€f3€f3€f3Uf3U3€33U33U33U33€f3Uff€ff€f™ª™Ì€™™ª™Ì€™Ì€™™€™Ì€f™€™™Uff€ffU33€ff€ffªff€f3€f3€ff€ffUffUff€ff€ff€™fU™f€ff€™™ª™™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÿÿÌÕÌÌÕÿÌÿÌ™ÿÌÌÕÌ™ÕÌÌÿÿÌÕÿÌÿÌÌÕÌÌÕÌ™ÕÌÌÕÌ̪™™ÕÌ™€f3€f3U3+3U3U33U3U3U3U33U3Uf3€ffUff€ff€ffUf3U33U33€™f€™fUffUf3€f3€f3€ff+33ª™™ÿÌÌ€f3€3€3€3€3€f€3ªf3€3€3€3€3U3U3U33U33+33+3+3++3U33+33U33U33Uf3U33U33Uf3U33U33€™f€ff€ff€ffU33€ff€f3€f3U33U33U3U33U3Uf€f3U33€33€f3€f3€fª™™ª™™ª™™ª™Ì€™Ìª™Ì€™™€ff€ffUf3Uff€f3€ff€f3€f3€f3€ff€f3Uff€ffUff€ffUff€ffª™™ª™™ª™fÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÿÌ™ÕÿÌÕÌÌÕÿÌÕÌÌÿÿ™ÕÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕ̙ՙ™ªÌ™€™f€f3U33U3U3U33U3U3U3Uf3+33U33€ff€ff€ff€ffU33Uf3€f3€™™€ffUff€33€ff€f3€ff+3+3ÕÌ™ÕÌ̪ff€f3Õ™™ª™3Õ™™ªf3Õ™fªf3ªf3€f3U3€3U3U3Uf3++33++3U3+3U3U33€33Uf3€33€f3U33Uf3U33Uf3€ff€™f€ffU33Uf3U33€f3€f3UfU33U33Uf3€33€f3€f3€ff€ffªff€ffªf3€ffª™™€™™€™™€™™€™™€™™€ffUff€3fUf3€f3€f3€ff€ff€f3€ff€ff€ff€ff€™f€ff€™f€ff€™fª™fª™™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÿÌÌÕÿ™ÿÌÌÕÿÌÕÿ™ÕÌÌÿÌÌÕÿ™ÿÿÌÕÌÌÿÌÌÕÿÌÕÌÌÕÌ™ÿÌÌÕÌ̪̙ՙ™ª™f€f3€33U3U3U33+3U3U3U33U33€f3€f3€33U3U33€f3€ff€ff€™™U3Uf3€f3U33U3+3ÿÌ™ªÌ™€ff++3++33+3+33+33+3+33+U33U33Ufª™fU33+U3U3U33+3+3U33U33Uf3U33Uff€ff€f3U33U33U33U33Uf3+3U3Uf3€33U3U3Uf3€33U3€33€f3Uf3ª™™€™™ª™™€™™ª™™ª™™ª™™ª™™ª™Ìª™™€f™Uff€f™€™fUff€33€f3ªf3€f3ª™f€™f€ff€™f€ff€ff€f™€™f€f™€™fªffª™™ª™™ÕÌ™ÕÌ™ÕÌ™ÿÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÿÌ™ÕÿÌÕÌÌÕÿ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÿÌÕÌÌÕ̙ՙ™ªÌ™ª™™€ffU33U3U33€3U3U33U3U33U33Uf3€33Uf3U3U33€f3UffUff€™f€33€f3€f3U33Uf3+3ÕÌ™ª™fU33+3++++3U33€ff++U33€f3UfU+3U33Uf3U3€f3€ff€f3€ffU33U33U3U33Uf3+33U3U33€fU3€3U33€3€33Uf3€f3€ff€™Ì€f™€™Ìª™Ìª™Ìª™™€™™ª™™€™™€™™€f™€ffUff€f™UffUff€f3€f3€f3ªf3ªff€™f€ff€™f€ff€™f€ff€™f€ffª™fÕ™™ªÌfªÌ™Õ™™ÕÌ™ÕÌ™ÿÌ™ÕÌÌÿÿÌÕÌ™ÕÌ™ÕÿÌÕÌÌÕÌ™ÿÌÌÕÌÌÕÿÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™€f3U33U3U33U33+3U3U33U33U3€f3U33U33U3€f3U33€ff€™fU33€33Õ™fUf3ªff+3Õ™fª™™+3+3++33+3+3+3€f3€f3+3U€33€3U3++33Uf3U33U33€f3€f3Uff€ffU3U3U33+3U33U33U3Uf3€3U3U3€f3U33€33U33€f3€ffª™Ì€™™ª™Ì€™Ì€™™€™Ì€™™ª™Ì€ffª™™€ff€™fUff€ffUffU33€33ªf3€f3ªff€f3€ff€ff€ff€ff€™f€™™ª™fª™fª™f€ffª™fÕ™™ª™fÕ™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÿ™ÕÌÌÕÌ™ÕÿÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ªÌÌÕÌ™ÕÌÌÕÌ™ª™™ª™™ª™fª™™Uf3U3U33+U3U3U33€fU33U3UfU33€f3Uf3U33Uf3€33€ffª™fU3ª™f+€f3Õ™f++3+U3+U3+3++333€ff+3+U3€33U3U3+U33U3fUf3U33Uf3U33U33€ffU3U3+3U3U33€f3U3U3Uf3U3U33€33U33U33€f3€f3€ff€™™€f™€™Ì€f™€™™U™Ì€™Ì€™™€™™€ff€f™UffUf™UffUffU3f€f€3ªf3€f€f3€f3ªf3€ff€ff€™™€ff€™™ª™™€™™€ff€ffª™fª™fÕÌ™ª™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÿÿÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕ™™ÕÌÌÕÌ̪™™ª™™ª™™ÕÌ™ª™™ª™fU33Uf3U3U33U3€33U3U3€f3€33Uf3€33€f3Uf3€f3€33€33ÕÌ™U3ªffU3€3Õ™f+33+UU33UU3U3+3+3+UffUf3++€3ªfU3+3+3U33UffU33U33U33U3U33€f3U33U3U33U3U3U33U33€fU33€f3U33Uf3U33Uf3€f™€™™€ff€f™€™™€™™€™™€™™€™™€™™€f™€™Ì€™™€™™U™™U™™Uff€ffUffªf3ªf€f€f3ªf€f3ªf3€™3€™fª™™€™fª™™ª™™ª™™ª™fª™fÕ™™ª™fª™fÕÌfÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌÌÕÌÌÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ̪™™ÕÌ™ÕÌ™ª™™ªÌ™ÕÌ̪™™Õ™™ª™fU3U3U33U3UfU33U3U3U3Uf3U3€f3U3Uf3U33€3ª™™€3€33U3€3€33+3++3UU3U3U3U3U3U3++U33U33+U3€3ª3U3+3++3UffU3fUf3+33Uf3U3€33UfU3U3U3U3U3Uf3€33Uf3Uf3Uf3€ffUf3U33€ffUffUf™€™Ì€™™€™Ì€™Ì€™Ì€f™€™™U™™ª™ÌU™™U™™€f™Uf™UffUffUffªf3ª3€f3€3€f€f3ªf3€f3€ff€™fª™™€™™€™™ª™™ªÌÌÕ™™Õ™™ª™fª™fª™fÕÌ™ª™™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÿÌÿÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ™ª™™ªÌ™ÕÌÌÕÌ™ª™™ÕÌÌÕÌÌÕ™™ÕÌ™Uf3U3U33U3U33UfU33U3U33Uf3€3Uf3UfU33€f€33Õ™™€f€33U3ª3ªf3€3€3U3+U3€3ªf3ª3€3ª3€f3+33++U33ªf3€3++3+33U33+33+33U3+3U3Uf3U3Uf3U3U3U3U3U33Uf3U33U33€f3U33€ffUf3UffUffUffUf™Uf™Uf™U™™€™Ì€™Ì€™™Uf™ªÌÌ€™ÌUf™€™™U™™U™™Uf™UffUffªf3ªf3€f€f3€3€f3ªf3€f3ªff€™f€f™ª™f€™™ªÌ™ª™ÌªÌ™ÕÌ™ª™™ª™fª™fª™fÕ™fª™™ÕÌ™ÕÌ™ÕÌÌÕÿÌÕÌ™ÕÌÌÕÿÌÿÌÌÕÌ̪ÌÌÕÌ™ª™ÌÕÌ™ÕÌÌÕ̙ՙ̪̙ÕÌ™ÕÌÌÕÌ™ª™™ª™fU33U3U3U33U3U3U33U33€f3U33€3U3U33€33U3ª™fªff€3U3€3Õff€3€3€3U3U3€33ª3ª3ª33Õf3ªf3U33+3++U3Õf3ª3+3++3U3+33+33+33U33U3U33U3U3U3U3U33€fUf3€33€f3U33€33Uf3€ffU33U33Uff€ffUf™Uf™€™™€™Ì€™™€™Ì€™™€™™€™Ì€™™€™Ì€™™€™Ì€f™UffUffUffª™3ªf3ªf3€f3€f€3€f€f3€ffªff€™fª™™€™™ª™™ª™™ÕÌ™ª™fª™™Õ™™Õ™™ª™fÕ̙ՙfª™fÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕ̙ՙ™ªÌ™ÕÌÌÕÌ̪™™ÕÌÌÕÌ̪™™€f3U33U3U3€f3U33U3U33UfU33Uf3U3Uf3€3U33ª™fª™f€f3ªf3€3ÿ™™€3€3U33U3U3€3ª3ªf3Õf3Õf3Õ™fUff++U3U33Õ™f€3++3+33+3+33+33U3U3U3UfU3€f3U3U3€3U33€33Uf3€33Uf3Uf3U33U33€f3Uff€ff€™™Uff€™™€™™€™Ì€™Ì€f™€™™€™™ªÌÌUf™€™Ì€™™€™™€™™Uf™Uf™Uffªf3ª™3ªffªf3ªf3ªf3ªf3€3Uf3€f3€ffªff€™fª™™ª™™ªÌ™ª™™ª™™Õ̙ՙ™ª™fª™3ªf3ªffª™™Õ™™ªÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕÌ̪̙ÕÌÌÕÌ™ª™™ÕÌ̪™™ª™™ÕÌ̪™™ÕÌ™ÕÌ™ª™™€f3U3U3€f3U33U33U33U33U3U33U3U33UfU33ª™™Õ™f€f3ªf3€33ÿ™™€3€3€3€3€3ª3Õf3ª3ª3ªf3ªffU33++U33€33€3€U+33+33+3+33+33U3U33+33U3Uf3€33€f3U3U33€33Uf3€33€ffUf3U33€ffUff€ffUff€f™€™™€™™€™Ì€™Ì€™Ì€™Ì€™Ì€™™€™™€™™€Ì™ª™Ì€™Ì€™™€f™Uf™U™f€f™ªff€™fª™f€ff€f3€f3€f3€f3U3€f3U33€f3€ffªff€™fª™™ª™fÕ̙ՙ™ÕÌ™€™3ªff€f3ª™fª™™Õ™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ª™™Õ™™ª™™ªÌ™ÕÌ̪™™ªÌ™Õ™™ª™™Õ™™Õ™™ª™f€ff€33U33U33U3U33U33Uf3U33Uf3Uf3U33€f3€f3ª™fª™fªffU3€33Õ™f€3€3€ª3€3Õfª3Õf3Õf3ªf3ªf3U33+3+U3€f3U3+3U3+3U+3U3+33++33U33U3U33Uf3€f3€f3Uf3U33Uf3€f3U33Uf3UffUf3€f™€™™€f™U™™€™™U™ÌªÌÌ€™™€™™ªÌ̪™Ì€™™€f™ª™fª™Ì€™™€™ÌU™™€ff€f3€f3€f™ªffª™™ªff€f3ªff€f3€f3ªf3Uf3€33€f3U33€f3€ffªffªffª™fª™fª™™Õ̙ՙ™ª™f€ffª™fª™fª™™ªÌ™ª™™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌÌÕ̙ՙ™ª™™ÕÌ̪™™ª™™Õ™ÌªÌ™ª™™ª™™ª™fªffUf3U3€f3U3U33U33U3U33U3U3U3€33U33ª™fª™™ªf3U33U3ª™™ª3ª3ª3ª3ªf3ª33Õf3ªf3Õf3ªf3€fU€f3U3+3U3U33UU33+U3+3+3U33+3U33U33+3U33U3U33€f3U33€f3U33U33U33€ff€ff€ff€ff€ffUff€™Ì€f™€™™€™™€ÌÌ€™Ìª™Ìª™Ìª™™€ffª™™€™ÌU™™€™Ì€™Ì€™fªf3ªff€ffªff€ff€f3€f3ªf3€ffªf3ª™fª™fªff€f3€f3€33€f3€ff€f3€ffª™fª™fÕ™™Õ™™€ffª™f€ff€™fª™fª™fª™fÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌÌÕÌ™ÕÌ̪̙ª™™ªÌ™Õ™™ªÌ̪™™ª™™ÕÌ™ª™™ª™™ª™f€f3€f3U3U33+33U3U33+33U3+33U33U33€33€f3ªff€ffª™fU33ªÌ™U33Õf3Õfª3€3€33ª33ªffÕ™™€f3ªff€33Uf3U3Uf3€ffU33++3U3+3U3UU3U33+3U33U3+33UfU33Uf3€f3€33€f3Uf3U33U33€f3Uf3€ffUff€ff€™™€™™€™™€™Ìª™ÌªÌ̪ÌÌ€™Ì€ÌÌ€ff€™fªffª™™ª™ÌªÌÌ€ÌÌ€ffª™fª™f€ff€f3ªf3€f3ªf3€f3ªf3€f3ªffª™fª™f€ff€f3€33Uf3€33€f3€f3€f3ªffª™fÕ̙ՙ™ÕÌ™€™f€ffª™fª™™ÕÌ™ªÌ™Õ™™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕ™™Õ™™Õ™™ªÌ̪™™ÕÌ̪™™ª™™ª™™ª™™ª™™ª™f€ff€f3U33U3U3U33U3U33+f3U3U33UfU33Uf3ª™™U33ª™fUf3ÕÌ̪™™€fªf3€3€fU3€3€3€3ªf3Õ™3ª™fUf3+3ª™Ì€™fUf3+3++U33+3U33U33+3U3U33U33U33U33U3€33Uf3U33Uf3U33Uf3U33Uf3€f3€ff€ff€™™€™™€™™€™Ìª™ÌªÌ̪Ì̪Ì̪™™ª™™€ff€™™ªffª™™ªÌÌ€™Ì€™Ì€™™ª™fª™f€ff€33€f3ªf3€f3€f3€f3ª™f€f3€ffª™f€ffªff€f3€ffU33€f3€f3€f3ªffª™fÕÌ™ª™fÕÌ™ª™™ª™fªÌ™ª™™ÕÌ™ÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌÌÕ™™ªÌ™ÕÌ™ÕÌ™ª™™ª™™ÕÌÌÕÌ̪̙ª™™ª™™ª™™Õff€ff€f3U33U33+3U33+33U3U33U33U33U33U3U33€ff€f3€ff€ff€™fª™™ª™fÕ™™€ffÕ™f€f3Õff€3ªf3€33€f3€ff€f™ª™™€™f€ffUff+U33U3U3U33U3U3U33U33U3U33U3U33Uf3Uf3€f3U33€f3€f3U33Uf3U33UffUf3€ff€™f€™™€f™€™™€ÌÌ€™ÌªÌ̪ÌÌ€™Ì€™™€™™€ff€f3ª™™ª™Ì€Ì̪Ì̪™™ª™™€ff€ff€3€3€33€fªf3€f3€ff€ff€™f€ff€ff€ff€ff€f3€ff€f3ªff€f3€f3€33ªffÕÌfÕÌ™ÕÌ™ÕÌ̪̙ՙ™Õ™™Õ̙ՙ™ÕÌ™ÕÌÌÕ™™Õ̙ՙ™ªÌ™ª™™€™™ª™fª™Ìª™™€™™ª™™ª™™ª™™ª™fªffU33U33U33U33+3+3U33U33Uf3U33U33+fU33€™fª™™€f3€™™U3ª™™ªff€f3€f3€f3ªff€f3ªf3ªf3ªf3€f€3€33€3+3€33U33U3U33U3U33U3U33U3U33U3U3U33U33U33Uf3Uf3U33Uf3€3fU33€ffU33€ff€ffªf™€™f€ff€™™€™™€™Ì€™™€™ÌªÌ̪ÌÌ€™™ª™Ìª™™ª™™€f3€™™ª™™ªÌÿ€™Ì€™™€f™Uf3€ffU3€f3U3U3U33€f3ªff€f3€f3ªff€ff€f3€ff€33€f3€ffªff€ffªf3€f3ªf3ª™fÕ™™ª™fª™™ÕÌ™ª™™ÕÌ™ª™™ÕÌÌÕÌ™ÕÌ™ª™™ÕÌ™ª™™Õ™™ÕÌ™€ff€™™ª™™ªÌ̪™™€ffª™™ªffªffª™fU33Uf3U33U33Uf3+33Uf3U33U33U3U33U33U33ªffª™™€ffª™™UffU33€™f€™™€ff€™f€ffUf3UffUf3€ff€f3€f3U3U3U33Uf3U3U3UU3U33U3U33U33U33U3U33U3Uf3U33€f3U33U33U33U33€f3€ff€f3Uf3€™™ª™™€™™€™™€™™U™™€™™€™Ìª™ÌªÌ̪™ÌªÌÌ€™™ªÌ̪™Ì€™f€f3ª™fª™™ª™™€™Ì€™™UffUffU3€33€fU33€f€ffªf3€ff€ff€f3€f3€ff€ffUf3€ff€ffªff€f3ªff€f3€f3ª™fª™fÕÌ™ÕÌ™ÕÌ™ª™™ÕÌÌÕÌ™ÕÌ™ÕÌÌÕ™™ªÌ™Õ™™ª™fªÌ™Õ™™€™™ª™™ª™™ª™™€™Ìª™f€™™ªffª™fªff€f3U33U33+3U33U33U33U33+33U33U33U3U33€ff€ff€™fª™™€ffUff+33+U33U33U33U33U33U3+33+3U3U33U3U33U33U33U3U33U3U33U3U3U3U33U33U3U33U33U33Uf3€f3U33€f3U33€ffU33€33€ff€ff€ffª™™€™™€f™€™Ì€™Ì€™™ª™ÌªÌ̪Ì̪Ì̪ÌÌ€™Ìª™Ìª™™Uff€ff€ff€™fª™™€™f€ff€f3+3U33U3+3€33€f3€f3€3U3€f3€ff€f3€ffUff€ff€ff€™f€ffª™™ª™™ª™fª™fª™™ÕÌ™ÕÌ™ª™fª™™ÕÌ™ª™™ÕÌÌÕÌ™ªÌÌÕ™™ª™fª™™€™fª™™€™fª™™ª™™ª™™€™™ª™™€™fª™f€ffªffªf3€ffU3+33U33U33Uf3+33U33U33U33U3U33U33Uffª™f€™™€™™€™™ª™™€ffª™™ª™™€™f€ff€ffUff€f™UffUff€ffUff€f3U33U33U3U33U33U3U3U33U3U33U3Uf3U3U33Uf3U33Uf3U33€f3€ff€f3€™fªff€ffª™™€™™€ff€f™€™ÌªÌÌ€™Ì€™Ì€™ÌªÌÌ€Ì̪ÌÌ€Ì̪™Ì€™Ì€™™€™™€™™ªÌ̪™™ªff€f3€f3€ff+3U3+33U3U33€33U3U3€33€f3€f3U33€ffUff€ffUff€™™€f™ª™™ª™™ª™™ª™™Õ̙ՙ™Õ™™ªÌ™Õ̙ՙ™ÕÌ™ÕÌ̪™™ÕÌ™ªÌ™ª™fÕ™™ª™fª™™ª™fª™™€™™€™™ª™™ªff€ffªffªffª™f€f3€ff+3U33U33Uf3U33U33+f3+33Uf3+33U33U33€f3€ff€f™ª™Ì€™™€™Ìª™™ªÌÌÕÌ̪™™ª™™€™™€ffUff€f™€ff€ff€f3€3f€33U3U3U3U3U33U3U33U33U33U33U33Uf3U33U33U33U33U33Uff€f3€f3€ff€ff€ffª™f€ff€f™€™f€™™ª™ÌªÌÌ€Ì̪Ì̪™Ì€™ÌªÌ̪Ì̪™Ì€™Ì€™™€™™ª™™ªÌ̪™™€ffUf3€f3€™™+3+33U3U3U3Uf3U3U33U33€33Uf3U33€ffU33Uf3€ff€ffª™™€™™ª™Ìª™™ª™fª™™ÕÌ™ÕÌÌÕ™™ÕÌÌÕÌ™ÕÌ̪̙ªÌ™Õ™™ª™™ª™fª™fªffªffª™fª™™€ffªff€™™ª™f€™fª™f€f3ªff€f3€f3+33+33U33U3f+33UffU33UffU33U33U33U33€f3€ff€™fªÌÌ€™ÌªÌÌ€Ì̪™ÌÕÌ̪ÌÌ€™™€™™€™™Uf™€™fUff€ffUff€f3U3€f3U33U3U3U33U3U33U3U33U3U33U33U33U33Uf3U3fUf3U33Uf3€ff€3f€f3ª™fªff€ff€™f€f™€™™€™Ì€™Ìª™ÌªÌÌ€™ÌªÌÌ€™Ì€Ì̪™Ìª™™ª™™ª™™ª™fՙ̪̙€™f€ff€™™€™™++3+U3+3U33+3+3U3U33U33U33€33€f3€33€f3€ff€™fª™™ª™ÌªÌ™ª™™ªÌ™Õ™fÕÌ™ÕÌ™ÕÌ™ÕÌÌÕÌ̪™™ªÌ™Õ̙ՙ™ª™fªffª™fª™f€ffª™™€ff€ff€™™€ffªffªff€f3€f3€ff€33+33Uf3+33+33UffU33+33U33+ffU33U33U3€3U33€33€™™ª™™ªÌ̪™™ÕÌÌÕÌ̪™™ªÌÌ€™™€™™€™™Uff€™™Uff€ff€33U3€3U33€3U3U33U3U33U33U33U33Uf3Uf3U33U33U33Uf3€ffU33€ff€f3€ff€ff€ff€ffª™fª™™€ff€f™€™™ªÌ̪™ÌªÌÌ€™™€™™€™Ì€™Ì€™™ªÌÌ€™™ªffª™fª™™€™™U™™€™™€™Ì€™™+33++3+33U33U3U33U3U3U33+3U33U33Uf3€ff€f3€ffª™fª™fª™fÕ̙ՙ™ÕÌ™ªÌ™ÕÌ™ªÌÌÕÌ™ÕÌ̪ÌÌÕÌ̪™™ª™™ª™fª™fª™f€f3ªff€ffª™fª™fª™f€ff€f3€ff€f3€f3€ff€f3U33U33U33U33U33Uf3U3fUf3+33Uf3U33Uf3U33U33U33Uf3€ffª™™€™ÌªÌ̪Ì̪Ì̪™ÌªÌÌ€™™€f™€ff€ff€ffªff€ffU33U3Uf3€3€3U3U33U3U33Uf3U33€3U33U33Uf3U33UffU3f€ff€™fU3fUff€3f€ff€™f€™fª™™ªf™€™™€™™€™™ª™™€™Ìª™Ìª™Ì€™™ª™™€™™ª™Ì€™Ì€™™€™™U™™€ff€™™€™™ª™ÌªÌ̪™™+3+3++U33+3U33+3+3U33++3U33€ff€f3€ff€ffªffª™fª™™Õ™fª™™ÕÌ™ÕÌÌÕ™ÌÕÌ™ÕÌ̪̙ªÌÌÕÌ™ªÌÌÕ™™ª™fªff€ffªff€f3€ffª™fª™f€™f€ff€ff€f3€f3€f3€f3€33€f3U3U33U33U33U3fUf3+33U33UffU33U33U33Uf3U33U33Uffª™™ª™™ª™Ì€™™€f™€™™ª™™€f™€ff€ff€f™€ff€ff€f3U3€3U33€3U33€3€33U33U3U33U33Uf3U33UffU33€ffU33Uf3€ff€f™UffUffUf3€ff€™fª™fª™™ª™™ª™™€™™ª™™€™Ì€™™€™™€™™€f™€™™€™™€™ÌªÌÌ€™Ì€™™€™™€™™€™™€™Ìª™™€™Ìª™™3+++3+3U33+3U33U3+3++33Uf3€33Uf3U33€ffªffª™™ª™fª™fÕÌ™ª™™ÕÌ™ÕÌ™ªÌÌÕ™™ÕÌ™ÕÌ™ª™™ª™™ª™fª™fª™fªffª™fªff€™fªff€™f€ff€ff€f3ªff€ff€f3€ff€33U33U33U33+3f+3fU33U33UffU3fUf3U3f+f3U33U33U33U3U33Uf3U33U3f€ff€ff€ff€ff€f3€ffU33€33€3€33U3U3U3U33U3U33€33U3€33U3Uf3€33Uf3U33UffU33U33€3fU3fU33€ffUff€ffUff€ff€ffª™™ª™™€™™ª™™ª™Ì€f™€™Ì€™™€™™€™Ì€™™ª™Ìª™™€™Ì€™Ì€™Ìª™Ì€Ì̪™™€™Ì€™Ìª™™€™Ì€™™+3+3+33UU33+U33+3U3+3+3U33U33U33U33€f3€ffª™fª™fª™™ª™fª™™ÕÌ™ÕÌ™ª™™ÕÌÌÕÌ̪™™ªÌ™ª™™ÕÌ™ª™™ª™fªff€ffª™fª™fª™f€ffª™™€f3€f3€f3€f3ªf3€ff€f3€ffU33U33+f3U33UffU33+f3U33+33U3fU33U33U33U33Uf3U33U33U33€33€f3€33€ff€f3U33€33€f3U3U33U3U3€3U33U3U33U3U3U3U33U3U33U33U3U33€33U33Uf3U33Uf3€f3UffU33Uff€f™€ffUf3€f3€™™€™™ª™™ª™™ª™Ì€™™€™™€f™€™™€™Ì€™™€™™€™™€™Ì€™™€ÌÌ€™™€™Ì€™Ì€Ì™€™™€™™€™™ª™™++33++3++3+3++3+U33+3+33€f3U3fUf3€ffª™™ª™fÕ™™ª™fª™fª™™ÕÌ™ªÌ™ÕÌÌÕÌ™ªÌ̪™ÌÕÌ™ª™™ª™™ª™fª™f€f3ª™f€ffª™™ª™fª™f€ff€f3€f3€f3€f3ªff€f3ªffU33U33U33Uf3+f3U33U33U3fU3f+f3U33+f3Uf3U33U33U3U33Uf3U33€33U33€33€33U3U3€33U3U3€3U3U3U33U33U3U3U33U3€33Uf€33Uf3€33U33Uf3Uf3U3fU33€f3U33€ffUffU33€™f€ff€ffUf3€f™€™™ª™™ª™Ìª™Ì€™™€f™€™™ª™Ìª™™€™™€™Ì€™™€™Ì€™™€™Ì€™Ì€™™ªÌÌ€™Ì€™Ìª™™€Ì™ª™™+3++3+33+3++3+3++U33U33U33U33Uf3€ffª™™ª™™ª™fªÌ™Õ™™ªÌ™ÕÌ̪™™ÕÌ̪™™ÕÌ̪™™ª™™ÕÌ™ª™™ª™fª™fªffª™f€f™ª™fª™™ª™f€™fªf3€f3€f3€f3ªff€f3€f3Uf3U33U3+33+f3U33U33U33+3fUf3+3fUf3Uf3U33U33U3U33Uf3€33Uf3U33€33U3€f3€33U3U3U3U33U3U33€3U33U3U33U33U33€33Uf€33U33U33U33U33UffU33€ffU33Uf3ªffUff€3fª™™ª™™ª™™€ffª™™€ffª™™ª™™ª™™€ff€ff€™™€ff€f™€ff€™™ª™™€™™€™™€™Ì€ÌÌ€™™ª™Ìª™Ìª™™ª™™ª™™ªÌ™+++3+3++3+3+3++3+33U33U3U33Uf3U3f€™fª™fÕ™™ª™fÕ™™ÕÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ÕÌ™ª™™ª™™ª™™ª™fª™fª™fªf™€™fª™™€™fª™™ª™™€f™ª™f€f3ªff€f3€ffªf3€f3€f3U33U3U33U33U33U33Uf3UffU33U33U33U3fU33+33U33U33U33€33U33€33€f3U33U33U33U33U3U3U33U3€3U3U33U3U33U3U3Uf3U3U33U3U33U33Uf3€33Uf3U33Uf3€ffU33€ff€ff€ffªff€™™€ffª™™ª™™ª™™€ff€f™ª™™€™™ª™™ª™™€™™€™™€™™€f™Uf™€™™€™™€ÌÌ€™Ì€™Ì€Ì™€™Ì€™Ì€™™ªÌ™ª™Ì3+3+3++33+3++33+3+3+3+3U33U33U33U33€ff€™fª™fª™fªÌ™ÕÌÌÕÌ™ÕÌÌÕÌ™ª™ÌªÌ™Õ™Ìª™™ª™fªf™ª™fª™fª™fª™™€™f€f™ª™™€™™ª™fª™f€ffªff€f3ªf3€f3€f3€f3€f3U3+33U3U33+33U33U33UffU33+ffU33+33Uf3+33U3U33U3U33€33€33Uf3€33U3U3U3U33U3€33U3€3U3U33U3U3U3€3U33U3U33U33€33U33Uf3UffU33U33€f3Uff€f3U33€f3€ffª™™ª™™ª™™€™fªf™€™fª™™ª™™ª™™ª™Ìª™™€f™Uff€f™€™™€™™€™Ì€Ì™€™Ì€™™€™Ì€™Ì€™™ª™™ªÌ̪™™ªÌÌlibopengl-perl-0.6704+dfsg.orig/examples/texhack.pl0000644000175000017500000000453512334200655021506 0ustar gregoagregoa#!/usr/local/bin/perl # # texhack # # This program demonstrates texture mapping # An image file (stan.ppm) is read in as the texture # by using the glReadTex() function that was # created for this OpenGL perl module. # This example was implemented before "texture" # which calls glTexImage2D directly with a pack()-ed # thing of bytes. # The file format must be full color ascii ppm like # what is outputted from the image program xv. # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; $spin=0.0; sub myReshape { # glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0 , 1.0, 30.0); glMatrixMode(GL_MODELVIEW); } sub display{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); glTranslatef(0.0, 0.0, -2.6); glPushMatrix(); glRotatef($spin,0,1,0); glRotatef($spin,0,0,1); glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(1.0, -1.0, 0.0); glPopMatrix(); glEnd(); glFlush(); glXSwapBuffers(); } glpOpenWindow(width=>200, height=>200, attributes=>[GLX_RGBA,GLX_DOUBLEBUFFER]); glClearColor(0,0,0,1); glColor3f (1.0, 1.0, 1.0); glShadeModel (GL_FLAT); myReshape(); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); $file = "stan.ppm"; -r $file or $file = "examples/$file"; glpReadTex($file); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); #glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); #glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glEnable(GL_TEXTURE_2D); OpenGL::glFogfv_p(GL_FOG_COLOR,0,0,0,1); glFogi(GL_FOG_MODE,GL_LINEAR); glFogf(GL_FOG_START,2.8); glFogf(GL_FOG_END,3.8); glEnable(GL_FOG); while($spin < 100000.0){$spin=$spin+1.0;display; } libopengl-perl-0.6704+dfsg.orig/examples/tessellation.pl0000644000175000017500000002371112334200655022562 0ustar gregoagregoa#!/usr/bin/perl =head1 NAME tessellation.pl - Show workings of perl based tessellation =head1 SOURCE general ideas taken from: http://glprogramming.com/red/chapter11.html =head1 AUTHOR Paul Seamons =cut use OpenGL qw(:all); use strict; use warnings; print "Starting $0\n"; my $color_toggle = 1; my $edge_toggle = 1; my $solid_toggle = 1; my $antialias_toggle = 1; my $defaults_toggle = 0; my $opaque_toggle = 'off'; my $opaque_cycle = 0; my ($w, $h) = (800, 600); main(); exit; sub main { glutInit(); glutInitWindowSize($w, $h); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("Tessellation"); glClearColor (0.0, 0.0, 0.0, 0.0); init(); glutDisplayFunc(\&render_scene); glutKeyboardFunc(sub { if ($_[0] == 27 || $_[0] == ord('q')) { exit; } elsif ($_[0] == ord('e')) { $edge_toggle = ($edge_toggle) ? 0 : 1; } elsif ($_[0] == ord('a')) { $antialias_toggle = ($antialias_toggle) ? 0 : 1; } elsif ($_[0] == ord('s')) { $solid_toggle = ($solid_toggle) ? 0 : 1; } elsif ($_[0] == ord('d')) { $defaults_toggle = ($defaults_toggle) ? 0 : 1; } elsif ($_[0] == ord('o')) { $opaque_toggle = ($opaque_toggle eq 'off') ? 'polygon_data' : ($opaque_toggle eq 'polygon_data') ? 'vertex_data' : 'off'; } elsif ($_[0] == ord('y')) { $opaque_cycle++; } else { $color_toggle = ($color_toggle) ? 0 : 1; } render_scene(); }); print "'q' - Quit 'e' - Toggle edge flags (show triangles) 's' - Toggle solid (polygon vs lines) 'a' - Toggle anti-alias lines 'd' - Toggle perl callbacks vs default c implemented callbacks 'c' - Toggle color (perl callbacks only) 'o' - Toggle opaque data passing (off, polygon_data, vertex_data) (perl callbacks only) 'y' - Cycle the type of opaque data passed (perl callbacks only) "; glutMainLoop(); } sub init { glViewport(0,0, $w,$h); glMatrixMode(GL_PROJECTION()); glLoadIdentity(); if ( @_ ) { gluPerspective(45.0,4/3,0.1,100.0); } else { glFrustum(-0.1,0.1,-0.075,0.075,0.175,100.0); } glMatrixMode(GL_MODELVIEW()); glLoadIdentity(); } sub render_scene { glClear (GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0, 0, -6); print "Callbacks: ".($defaults_toggle ? "c based" : ' perl') .", Solid: ".($solid_toggle ? ' on' : 'off') .", EdgeFlags: " .($edge_toggle ? ' on' : 'off') .", Color: " .($color_toggle ? ' on' : 'off') .", Anti-alias: " .($antialias_toggle ? ' on' : 'off') .", Opaque: $opaque_toggle" ."\n"; my $tess = gluNewTess('do_color'); my %opaque_printed; # ideally - these would be loaded into a call list - but this is just a sampling if ($defaults_toggle) { gluTessCallback($tess, GLU_TESS_BEGIN(), 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR(), 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END(), 'DEFAULT'); gluTessCallback($tess, GLU_TESS_VERTEX(), 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG(), 'DEFAULT') if $edge_toggle; gluTessCallback($tess, GLU_TESS_COMBINE(), 'DEFAULT'); } else { gluTessCallback($tess, GLU_TESS_BEGIN(), sub { glBegin(shift) }); gluTessCallback($tess, GLU_TESS_ERROR(), sub { my $errno = shift; my $err = gluErrorString($errno); print "got an error ($errno - $err)\n" }); gluTessCallback($tess, GLU_TESS_END(), sub { glEnd(); }); gluTessCallback($tess, GLU_TESS_EDGE_FLAG(), sub { glEdgeFlag(shift) }) if $edge_toggle; my $type = ($opaque_toggle eq 'vertex_data') ? GLU_TESS_VERTEX() : GLU_TESS_VERTEX_DATA(); gluTessCallback($tess, $type, sub { my ($x, $y, $z, $r, $g, $b, $a, $opaque) = @_; glColor4f($r, $g, $b, $a) if $color_toggle; glVertex3f($x, $y, $z); # the following is only a test of passing opaque polygon data or vertex data if ($opaque) { my $ref = ref($opaque) || 'SCALAR'; my $pv = ($ref eq 'CODE') ? $opaque->() : ($ref eq 'ARRAY') ? $opaque->[0] : ($ref eq 'HASH') ? $opaque->{'key'} : ($opaque =~ /^\d+$/) ? do { $ref = 'SCALAR NUM'; chr($opaque) } : $opaque; my $str = "Vertices were passed ".($pv eq 'p' ? 'polygon' : $pv eq 'v' ? 'vertex' : "other ($pv)")." data of type $ref\n"; print $str if ! $opaque_printed{$str}++; print "We received a non-vertex data type ($pv $ref)\n" if $opaque_toggle eq 'vertex_data' && $pv ne 'v'; } }); gluTessCallback($tess, GLU_TESS_COMBINE(), sub { my ($x, $y, $z, $v0, $v1, $v2, $v3, $w0, $w1, $w2, $w3, $polygon_data) = @_; # polygon data is passed to COMBINE in addition to COMBINE_DATA # GLU_TESS_COMBINE and GLU_TESS_COMBINE_DATA call the same code so polygon data is always passed # When GLU_TESS_VERTEX is used, the two-four opaque elements passed to gluTessVertex are passed as the final element of each vector data # In the GLU_TESS_VERTEX case an 8th return parameter can then be returned which can be any perl variable, # which is then eventually passed as the data to the GLU_TESS_VERTEX callback. return ( $x, $y, $z, $w0*$v0->[3] + $w1*$v1->[3] + $w2*$v2->[3] + $w3*$v3->[3], $w0*$v0->[4] + $w1*$v1->[4] + $w2*$v2->[4] + $w3*$v3->[4], $w0*$v0->[5] + $w1*$v1->[5] + $w2*$v2->[5] + $w3*$v3->[5], $w0*$v0->[6] + $w1*$v1->[6] + $w2*$v2->[6] + $w3*$v3->[6], ((@$v0 == 8 || @$v0 == 11) ? ($v0->[7] || $v1->[7] || $v2->[7] || $v3->[7]) : ()), # if we received vertex data - return some for the new vertex ); }); } glPolygonMode(GL_FRONT_AND_BACK, $solid_toggle ? GL_FILL : GL_LINE); glEnable (GL_BLEND); if ($antialias_toggle) { glEnable (GL_LINE_SMOOTH); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE); glHint (GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE); } else { glDisable(GL_LINE_SMOOTH); } glColor3f(1,1,1); # triangle glPushMatrix(); glTranslatef(-2.2, 1.2, 0); glScalef(.9, .9, 0); my $tri1 = [[0,1,0, 1,0,0,1], [-1,-1,0, 0,1,0,1], [1,-1,0, 0,0,1,1]]; gluTessBeginPolygon($tess); gluTessBeginContour($tess); for my $q (@$tri1) { gluTessVertex_p($tess, @$q); } gluTessEndContour($tess); gluTessEndPolygon($tess); glPopMatrix(); # square glPushMatrix(); glTranslatef(0, 1.2, 0); glScalef(.9, .9, 0); my $quad0 = [[-1,1,0, 1,0,0,1], [1,1,0, 0,1,0,1], [1,-1,0, 0,0,1,1], [-1,-1,0, 1,1,0,1]]; $quad0 = [reverse @$quad0]; gluTessBeginPolygon($tess); gluTessBeginContour($tess); for my $q (@$quad0) { gluTessVertex_p($tess, @$q); } gluTessEndContour($tess); glColor3f(1,1,1); gluTessEndPolygon($tess); glPopMatrix(); # pontiac glPushMatrix(); glTranslatef(2.2, .1, 0); glScalef(.7, .7, 0); my $quad1 = [[-1,3,0, 1,0,0,1], [0,0,0, 1,1,0,1], [1,3,0, 0,0,1,1], [0,2,0, 0,1,0,1]]; gluTessBeginPolygon($tess); gluTessBeginContour($tess); for my $q (@$quad1) { gluTessVertex_p($tess, @$q); } gluTessEndContour($tess); glColor3f(1,1,1); gluTessEndPolygon($tess); glPopMatrix(); # window glPushMatrix(); glTranslatef(-2.2, -2.1, 0); glScalef(.45, .45, 0); my $quad2 = [ [[-2,3,0, 1,0,0,1], [-2,0,0, 1,1,0,1], [2,0,0, 0,0,1,1], [2,3,0, 0,1,0,1]], [[-1,2,0, 1,0,0,1], [-1,1,0, 1,1,0,1], [1,1,0, 0,0,1,1], [1,2,0, 0,1,0,1]], ]; gluTessBeginPolygon($tess); for my $c (@$quad2) { gluTessBeginContour($tess); for my $q (@$c) { gluTessVertex_p($tess, @$q); } gluTessEndContour($tess); } glColor3f(1,1,1); gluTessEndPolygon($tess); glPopMatrix(); # star glPushMatrix(); glTranslatef(0, -2.1, 0); glScalef(.6, .6, 0); my $coord3 = [ [ 0.0, 3.0, 0, 1,0,0,1], [-1.0, 0.0, 0, 0,1,0,1], [ 1.6, 1.9, 0, 1,0,1,1], [-1.6, 1.9, 0, 1,1,0,1], [ 1.0, 0.0, 0, 0,0,1,1], ]; gluTessProperty($tess, GLU_TESS_WINDING_RULE(), GLU_TESS_WINDING_NONZERO()); my @p_cycle = (sub { "p" }, ["p"], {key => "p"}, "p", ord('p')); my @v_cycle = (sub { "v" }, ["v"], {key => "v"}, "v", ord('v')); if ($opaque_toggle eq 'off') { gluTessBeginPolygon($tess); } else { gluTessBeginPolygon($tess, $p_cycle[$opaque_cycle % @p_cycle]); } gluTessBeginContour($tess); for my $q (@$coord3) { if ($opaque_toggle eq 'off') { gluTessVertex_p($tess, @$q); } else { gluTessVertex_p($tess, @$q, $v_cycle[$opaque_cycle % @v_cycle]); } } gluTessEndContour($tess); glColor3f(1,1,1); gluTessEndPolygon($tess); glPopMatrix(); # octagon glPushMatrix(); glTranslatef(2, -1.3, 0); glScalef(.35, .35, 0); my $coord4 = [ [ -1, 2.4, 0, 1, 0, 0,1], [ 1, 2.4, 0, 1, 1, 0,1], [ 2.4, 1, 0, 0, 1, 0,1], [ 2.4, -1, 0, 0, 1, 1,1], [ 1, -2.4, 0, 0, 0, 1,1], [ -1, -2.4, 0, 1, 0, 1,1], [ -2.4, -1, 0, 1, 1, 1,1], [ -2.4, 1, 0, .5,.5,.5,1], ]; $coord4 = [reverse @$coord4]; gluTessProperty($tess, GLU_TESS_WINDING_RULE(), GLU_TESS_WINDING_ODD()); gluTessBeginPolygon($tess); gluTessBeginContour($tess); for my $q (@$coord4) { gluTessVertex_p($tess, @$q); } gluTessEndContour($tess); glColor3f(1,1,1); gluTessEndPolygon($tess); glPopMatrix(); gluDeleteTess($tess); glutSwapBuffers(); } libopengl-perl-0.6704+dfsg.orig/examples/with-glut.txt0000644000175000017500000000001012334200655022167 0ustar gregoagregoaplanets libopengl-perl-0.6704+dfsg.orig/examples/tk_steal.pl0000644000175000017500000000505612334200655021664 0ustar gregoagregoa#!/usr/local/bin/perl # # This is an example of combining the tk module and opengl # You have to have TK installed for this to work. # this program opens a window and when you hit a key in # the window a callback that does some opengl stuff is # executed. # Yes, this is a totally lame program, but its a proof # of concept sort of thing. # We'll get something better next time :-) # use lib ('blib'); use Tk; use OpenGL; eval { $top = MainWindow->new(-container => 1, -bg => 'white') } or $top = MainWindow->new(); #$top = MainWindow->new(); #$top->configure(-container => 1); my $kid; sub CreateKid { return if $kid; my $par = shift; $id = $par->WindowId; print " window id: $id -> ", (sprintf '%#x', $$id),"\n"; $w = $par->Width; $h = $par->Height; glpOpenWindow(width=>$w,height=>$h,parent=>$$id, steal => $par->cget('-container')); $kid = 1; } sub ResetKid { return unless $kid; $w = $top->Width; $h = $top->Height; glViewport(0,0,$w,$h); # glFlush(); # Does not help... print "viewport change: $w,$h\n"; DrawKid(); } sub DrawKid { return if $redraw_pending++; $top->DoWhenIdle(\&DrawKid1); } sub DrawKid1 { print STDERR "enter draw $w,$h\n"; $redraw_pending = 0; return unless $kid; glClearColor(0,0,1,1); glClear(GL_COLOR_BUFFER_BIT); glOrtho(-1,1,-1,1,-1,1); glColor3f(1,0,0); glBegin(GL_POLYGON); glVertex2f(-0.5,-0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5,-0.5); glEnd(); glColor3f(0,1,0); glBegin(GL_POLYGON); glVertex2f(-1,-1); glVertex2f(1,0.1); glVertex2f(1,-0.1); glEnd(); glBegin(GL_POLYGON); glVertex2f(-1,-1); glVertex2f(0.1,1); glVertex2f(-0.1,1); glEnd(); glBegin(GL_POLYGON); glVertex2f(1,-1); glVertex2f(-1,0.1); glVertex2f(-1,-0.1); glEnd(); glBegin(GL_POLYGON); glVertex2f(1,-1); glVertex2f(0.1,1); glVertex2f(-0.1,1); glEnd(); glBegin(GL_POLYGON); glVertex2f(-1,1); glVertex2f(1,0.1); glVertex2f(1,-0.1); glEnd(); glBegin(GL_POLYGON); glVertex2f(-1,1); glVertex2f(0.1,-1); glVertex2f(-0.1,-1); glEnd(); glBegin(GL_POLYGON); glVertex2f(1,1); glVertex2f(-1,0.1); glVertex2f(-1,-0.1); glEnd(); glBegin(GL_POLYGON); glVertex2f(1,1); glVertex2f(0.1,-1); glVertex2f(-0.1,-1); glEnd(); glFlush(); } sub DoKey { return if $kid; my $w = shift; CreateKid $w; DrawKid; } $top->bind("",\&DoKey); $top->bind("",[$top,'destroy']); $top->bind("",[$top,'destroy']); $top->bind("",\&ResetKid); $top->bind("",\&DrawKid); Tk::MainLoop(); libopengl-perl-0.6704+dfsg.orig/examples/with-glx.txt0000644000175000017500000000041312334200655022015 0ustar gregoagregoaclip: glXSwapBuffers; double: glXSwapBuffers; fun: glXSwapBuffers; light: glXSwapBuffers(); planets: glXSwapBuffers(); quest: glXSwapBuffers; quest: glXSwapBuffers; quest: glXSwapBuffers; texhack: glXSwapBuffers(); texture: glXSwapBuffers(); libopengl-perl-0.6704+dfsg.orig/examples/README0000644000175000017500000000126312334200655020375 0ustar gregoagregoaNOTE: This example directory is in the process of being refactored to use GLUT/FreeGLUT rather than the original GLX/X11 for window creation and user interactions. It has not yet been determined the level of compatibility to be maintained between the previous GLX-only implementation and the new cross platform one based on *GLUT. -------------------------------------------------------------------- These are Stan's original examples. Not all will work with all X/OpenGL depths. Additionally, there is a planets demo (based on an article in EPM/2) by Ilya Zakharevich. The articles explains how to build the demo step by step. Different steps are available via the supplied RCS file. libopengl-perl-0.6704+dfsg.orig/examples/stan.ppm0000644000175000017500000014001612334200655021200 0ustar gregoagregoaP3 64 64 255 232 240 240 240 248 240 232 240 240 240 248 240 240 248 240 240 248 240 240 248 240 240 248 240 232 248 236 232 248 236 240 248 240 232 248 236 232 240 240 232 248 236 232 240 240 224 240 236 232 248 236 232 240 232 216 232 224 220 232 216 216 232 236 224 224 224 216 232 236 216 232 224 208 212 228 216 224 224 216 224 224 224 232 224 220 232 216 208 228 228 184 200 192 200 200 204 200 200 180 192 192 176 192 192 184 224 232 224 216 224 224 224 240 236 224 232 236 224 240 236 192 212 200 188 216 228 208 228 228 200 208 208 200 216 204 200 200 204 216 212 192 192 192 184 200 200 204 192 200 200 192 192 200 176 176 164 216 232 224 208 216 208 208 208 208 232 240 232 240 248 232 232 240 232 208 228 228 224 240 236 240 248 240 240 240 240 224 240 236 184 200 192 240 248 232 240 248 240 240 248 240 232 248 236 240 248 240 240 248 240 240 248 240 240 248 240 232 240 240 232 240 240 232 248 236 232 240 240 240 248 240 232 248 236 232 240 232 232 248 236 216 232 224 208 228 228 208 228 228 208 228 228 208 228 228 224 232 224 224 232 224 200 208 208 208 216 208 216 232 236 208 216 208 208 224 208 216 224 224 224 232 224 200 208 208 192 160 156 192 192 176 200 200 180 192 212 200 216 224 224 192 200 200 208 228 228 224 232 236 216 232 224 184 200 192 208 224 208 224 240 236 216 232 236 224 232 236 208 228 228 176 156 156 184 184 168 208 216 208 224 232 236 200 200 192 200 208 200 224 232 224 208 212 228 208 212 228 216 216 208 232 240 232 208 228 228 208 224 208 192 200 200 232 240 240 240 248 240 240 248 240 216 224 224 240 248 240 240 248 240 240 248 240 232 240 240 232 248 236 240 248 240 240 248 240 232 248 236 232 240 232 232 240 232 240 248 240 240 240 240 240 248 240 232 248 236 240 248 240 232 248 236 224 240 236 224 240 236 216 232 224 208 228 228 200 208 208 200 216 204 216 224 224 208 208 208 064 056 176 048 136 176 192 160 156 236 220 192 208 228 228 200 216 204 208 208 208 160 200 192 224 180 156 176 140 104 192 192 200 208 216 208 152 172 156 192 200 200 224 240 236 208 228 228 208 212 228 208 228 228 216 224 216 200 208 208 208 228 228 176 176 164 176 176 164 200 208 208 216 216 208 208 216 208 200 200 180 192 192 200 216 224 216 208 224 208 208 216 208 224 232 236 224 224 224 216 224 216 208 216 208 208 208 208 224 232 224 240 248 240 240 248 240 216 224 216 248 244 236 240 248 240 240 248 240 240 248 240 240 248 240 240 248 232 240 248 240 240 248 240 240 248 240 224 240 236 240 248 232 248 244 236 248 244 236 240 248 232 248 244 236 232 240 232 240 240 232 232 240 232 208 228 228 200 208 208 208 212 228 216 224 224 200 208 200 160 200 192 188 052 072 152 172 156 040 048 076 040 048 076 160 200 192 188 216 228 200 200 192 176 140 104 184 160 156 176 140 104 176 172 148 216 216 208 160 200 192 192 200 200 208 216 208 184 200 192 232 240 224 200 216 204 184 200 192 184 200 192 220 224 236 216 212 192 200 200 180 220 200 192 216 232 236 208 208 208 184 180 152 192 192 184 208 208 208 216 224 224 216 224 216 200 208 208 216 216 208 200 200 192 208 216 208 216 216 208 224 232 236 240 248 232 240 248 240 216 232 224 240 248 240 248 244 236 240 248 240 248 244 236 248 244 236 248 244 236 232 248 236 240 248 240 232 240 232 232 240 224 232 232 224 240 248 232 240 248 240 240 240 240 240 240 232 240 240 232 240 240 232 240 240 232 224 240 236 200 216 204 216 224 216 216 232 224 208 208 208 160 200 192 064 056 176 188 080 104 048 136 176 000 000 000 000 000 000 048 136 176 192 160 156 176 140 104 164 136 092 164 160 104 184 160 124 176 140 104 160 200 192 176 140 104 192 192 176 192 192 200 216 224 216 200 216 204 208 224 208 200 200 180 208 216 208 200 200 180 200 200 192 192 184 156 192 192 184 184 180 152 176 140 104 176 156 156 200 216 204 208 216 208 200 200 180 216 216 208 224 220 216 208 208 208 208 212 188 208 208 208 232 240 232 224 240 236 240 248 240 224 232 224 240 248 240 240 248 240 240 248 240 240 248 240 240 248 240 240 248 240 232 240 232 232 240 232 240 240 240 232 248 236 232 240 232 232 232 224 232 240 232 232 240 232 240 240 232 240 248 232 240 248 240 240 248 232 224 240 236 224 232 224 224 232 224 224 224 224 200 208 200 184 200 192 208 212 228 192 036 012 000 000 000 128 012 000 084 044 044 160 168 192 000 000 000 184 160 124 176 140 104 176 136 092 216 168 124 216 172 192 184 160 124 176 172 148 184 184 168 192 192 200 208 208 208 208 216 208 160 160 136 200 200 180 216 168 124 192 200 184 192 160 156 184 152 088 176 176 164 176 176 164 200 200 192 164 136 092 208 208 208 192 160 156 224 180 156 192 192 184 216 212 192 208 216 208 224 224 224 216 216 208 224 232 224 208 224 208 224 232 224 224 232 224 232 248 236 248 244 236 240 248 240 240 248 240 240 248 240 240 248 240 232 248 236 208 208 208 208 208 208 236 228 216 208 208 208 232 240 224 240 240 232 232 240 240 232 232 224 240 248 232 232 240 232 232 240 232 220 232 216 208 216 208 216 224 224 208 224 208 216 212 192 000 000 000 120 144 176 188 080 104 064 056 176 040 048 076 224 180 156 156 152 156 176 156 156 176 140 104 176 140 104 176 140 104 176 156 156 200 200 192 176 176 164 156 152 156 192 160 156 160 200 192 208 216 208 200 200 180 184 184 168 176 172 148 200 200 192 192 184 156 176 140 104 164 136 092 176 140 104 192 192 200 176 176 164 176 140 104 200 208 200 216 168 124 184 160 124 200 200 180 236 228 216 216 216 216 216 172 192 216 216 208 216 232 224 216 216 208 208 216 208 208 216 208 240 240 240 240 248 240 240 248 240 248 244 236 248 244 236 248 244 236 232 240 232 224 232 236 232 232 224 216 216 208 232 232 224 224 232 224 232 232 224 236 228 216 232 232 224 232 240 232 232 240 232 232 240 224 224 240 236 224 232 224 200 200 204 200 208 200 184 184 168 160 200 192 040 048 076 088 000 000 000 000 000 000 000 000 236 228 216 200 200 204 184 160 124 176 156 156 192 160 156 176 140 104 176 140 104 192 160 156 176 176 164 216 168 124 200 200 192 184 200 192 184 160 156 216 212 192 200 200 192 192 200 200 200 208 208 200 200 180 176 140 104 176 140 104 176 140 104 200 200 180 164 136 092 192 160 156 220 200 192 192 136 092 192 184 156 224 180 156 224 224 224 224 224 224 216 224 216 216 216 208 192 160 156 200 200 192 192 192 176 224 224 224 240 240 232 240 248 240 240 248 240 248 244 236 240 248 240 248 244 236 240 248 240 232 240 232 224 232 224 224 232 224 224 224 224 216 212 192 232 240 224 200 200 180 208 212 188 224 220 216 240 240 232 232 240 224 232 240 232 236 228 216 192 192 176 200 200 180 160 200 192 160 200 192 120 144 176 112 072 076 000 000 000 000 000 000 000 000 000 120 144 176 176 172 148 192 160 156 160 160 136 144 112 072 176 140 104 184 160 156 192 160 156 216 168 124 208 208 208 176 172 148 200 216 204 216 216 208 184 180 152 200 200 192 208 208 208 192 160 156 176 140 104 148 124 112 164 136 092 176 140 104 176 140 104 200 200 180 192 192 176 184 152 088 192 184 156 220 200 192 208 224 208 192 160 156 216 212 192 208 208 208 176 172 148 192 184 156 200 200 180 208 212 188 248 244 236 240 248 240 240 248 240 248 244 236 248 244 236 232 240 232 240 248 240 240 248 240 240 240 232 232 232 224 216 212 192 236 228 216 200 200 180 200 200 180 216 172 192 236 228 216 232 232 224 232 232 224 232 240 224 224 224 224 216 168 124 048 136 176 048 136 176 208 228 228 208 228 228 120 144 176 160 160 136 192 200 200 184 200 192 208 208 208 192 184 156 168 172 156 148 124 120 176 140 104 144 112 092 176 112 072 156 152 156 184 160 156 176 172 148 192 160 156 184 160 124 176 156 156 176 140 104 192 184 156 208 208 208 192 160 156 184 160 124 132 096 048 148 124 112 184 160 156 168 136 072 192 184 156 184 160 124 160 160 136 216 172 192 192 160 156 192 192 176 192 192 176 208 224 208 192 192 184 176 156 156 184 160 124 192 184 156 200 200 180 240 248 232 240 248 232 240 248 240 248 244 236 232 240 232 216 212 192 224 220 216 200 208 192 184 160 124 192 192 176 236 220 192 224 220 216 236 228 216 224 220 216 236 228 216 236 228 216 232 240 232 232 240 232 224 224 224 216 224 224 192 192 184 048 136 176 160 200 192 160 200 192 192 212 200 208 212 228 216 168 124 184 200 192 216 224 216 216 224 216 192 192 176 200 200 180 216 168 124 184 152 088 148 124 120 148 120 072 184 160 124 176 140 072 184 160 156 148 132 092 164 136 092 192 136 092 164 136 092 164 136 092 192 192 184 216 224 216 184 160 124 184 160 124 216 168 124 192 136 092 176 112 072 216 168 124 176 140 104 216 172 192 192 192 176 216 168 124 156 152 156 148 096 020 176 140 104 192 160 156 176 140 104 176 172 148 200 200 180 236 228 216 248 244 236 232 240 232 240 248 240 240 248 232 240 248 240 224 240 236 224 224 224 224 232 224 232 240 224 224 224 224 220 200 192 192 160 156 216 216 208 216 216 208 236 220 192 192 192 176 192 192 176 192 136 092 192 184 156 192 184 156 048 136 176 048 136 176 048 136 176 120 144 176 184 200 192 216 224 224 216 224 216 200 216 204 200 200 204 216 212 192 192 192 176 160 200 192 184 160 124 164 136 092 156 152 156 192 160 156 176 140 104 176 140 104 176 156 156 176 140 104 176 176 164 216 168 124 132 096 048 156 152 156 144 112 072 184 160 156 180 120 072 180 120 072 164 136 092 144 112 072 164 136 092 176 140 104 184 160 156 200 200 180 192 192 176 236 228 216 192 192 176 184 152 088 216 164 076 192 192 176 160 160 136 208 212 188 176 176 164 224 180 156 232 232 224 232 240 224 248 244 236 248 244 236 248 244 236 224 224 224 224 240 236 232 232 224 224 232 224 200 200 192 200 200 180 208 212 188 192 184 156 216 168 124 176 172 148 192 192 176 192 160 156 216 224 224 200 216 204 176 176 164 048 136 176 048 136 176 160 200 192 208 212 228 184 200 192 216 224 216 236 228 216 160 160 136 208 216 208 184 184 168 176 172 148 184 180 152 184 160 124 176 140 104 160 160 136 148 124 112 000 000 000 148 124 120 164 136 092 132 096 048 200 200 180 192 160 156 160 160 136 176 140 104 148 124 112 148 124 120 144 104 044 164 136 092 152 104 044 144 112 072 152 104 044 144 112 072 180 120 072 192 184 156 176 140 104 176 140 104 164 136 092 216 168 124 216 168 124 184 160 156 192 136 092 164 160 104 192 184 156 148 124 112 224 232 236 224 232 236 240 248 240 240 248 232 240 248 232 240 240 240 232 240 232 240 248 232 224 232 224 224 232 224 156 152 156 176 172 148 216 168 124 192 192 176 216 216 208 200 208 208 200 200 180 216 168 124 200 200 180 120 144 176 040 048 076 048 136 176 160 200 192 160 200 192 208 224 208 224 224 224 208 212 188 136 120 084 160 200 192 192 212 200 200 200 204 176 172 148 176 172 148 164 136 092 148 124 112 160 160 136 000 000 000 148 132 092 164 136 092 192 200 184 176 172 148 200 200 180 184 152 088 176 140 104 176 140 104 148 124 112 144 112 072 108 080 044 176 112 072 144 112 092 164 136 092 176 140 104 184 152 088 200 200 180 184 180 152 148 132 092 184 160 156 176 140 104 216 168 124 176 156 156 192 184 156 164 160 104 144 112 092 176 140 104 200 200 204 208 216 208 232 240 240 240 248 232 240 248 232 240 248 232 240 240 240 240 240 232 232 232 236 216 224 216 200 200 180 184 160 156 160 160 136 208 212 188 200 200 180 176 156 156 176 172 148 176 172 148 216 168 124 040 048 076 064 056 176 048 136 176 048 136 176 048 136 176 184 200 192 244 240 224 148 124 112 032 036 044 040 048 076 040 048 076 020 040 000 136 096 016 164 136 092 184 160 156 156 152 156 176 176 164 144 112 092 168 120 052 176 140 104 192 160 156 192 184 156 184 160 124 180 120 072 216 168 124 176 140 104 144 112 072 164 136 092 180 120 072 132 080 016 148 120 072 184 152 088 176 156 156 176 172 148 184 160 124 148 124 112 156 152 156 144 112 092 184 160 124 176 140 104 176 140 104 164 136 092 176 140 104 164 160 104 176 140 104 184 200 192 224 232 224 232 240 232 240 248 232 240 240 240 240 240 232 232 240 232 216 224 224 220 200 192 192 192 184 208 212 188 200 200 180 192 184 156 176 172 148 200 200 180 200 208 192 192 192 184 208 212 188 200 200 204 048 136 176 040 048 076 160 200 192 064 060 000 040 048 076 152 172 156 160 200 192 160 168 192 188 216 228 040 048 076 040 048 076 040 048 076 040 048 076 000 000 000 008 000 000 192 036 012 068 048 100 144 104 044 148 124 112 176 140 104 164 136 092 152 104 044 176 140 104 176 128 072 164 136 092 160 160 136 156 152 156 164 136 092 176 156 156 132 088 020 148 132 092 164 136 092 164 136 092 132 096 048 148 124 112 176 140 104 148 124 120 132 096 048 164 136 092 192 160 156 108 080 044 144 112 072 176 112 072 164 136 092 216 168 124 156 152 156 200 200 192 232 240 232 240 240 232 240 240 232 240 248 232 232 240 232 216 232 224 216 216 216 216 216 208 184 160 124 192 184 156 192 160 156 184 160 124 192 192 176 192 200 200 208 216 208 200 208 200 048 136 176 048 136 176 104 116 084 192 192 176 208 224 208 040 048 076 048 136 176 040 048 076 160 168 192 160 200 192 176 112 072 192 036 012 188 120 184 224 232 236 064 056 176 148 132 092 144 112 072 040 000 000 112 072 076 032 036 044 104 116 084 164 136 092 176 176 164 216 168 124 176 112 072 184 180 152 176 140 104 144 112 092 164 160 104 148 124 112 084 044 044 144 104 044 148 120 072 148 132 092 112 072 076 160 160 136 148 124 112 144 112 072 144 112 072 144 112 072 184 160 124 176 140 104 144 112 072 176 156 156 164 160 104 164 136 092 184 180 152 216 224 216 232 240 232 240 248 240 240 240 240 240 248 240 240 240 232 224 232 224 224 232 224 208 208 208 200 200 180 208 212 188 184 184 168 148 124 112 200 200 192 208 208 208 208 208 208 192 160 156 040 048 076 048 136 176 160 160 136 208 212 188 208 216 208 220 232 216 112 072 076 064 056 176 032 036 044 000 000 000 112 072 076 008 000 000 200 200 180 240 248 232 064 056 176 148 124 112 160 160 136 108 080 044 000 000 000 000 000 000 148 132 092 008 000 000 216 232 236 176 136 092 176 112 072 136 120 084 148 124 120 148 120 072 176 156 156 132 096 048 104 116 084 144 112 072 176 140 104 148 120 072 144 104 044 148 124 112 148 124 112 136 120 084 176 140 104 180 120 072 184 160 124 148 120 072 144 112 092 164 136 092 144 112 072 176 140 104 224 232 224 216 216 208 224 232 236 224 240 236 232 232 224 232 232 224 216 224 216 232 240 232 240 240 232 216 216 208 200 200 180 208 212 188 192 184 156 168 172 156 164 136 092 216 172 192 176 176 164 160 160 136 040 048 076 040 048 076 160 200 192 184 200 192 048 136 176 156 152 156 160 200 192 152 172 156 156 152 156 144 112 092 160 160 136 148 124 120 108 080 044 164 136 092 164 136 092 156 152 156 112 072 076 000 000 000 104 012 000 236 228 216 000 000 000 000 000 000 248 244 236 224 180 156 184 136 072 152 104 044 176 140 104 144 112 072 136 096 016 128 096 032 128 096 032 096 032 000 148 112 040 152 104 044 152 104 044 132 096 048 144 112 072 108 080 044 104 072 016 148 124 112 164 136 092 148 124 112 128 096 032 148 120 072 128 096 032 176 140 072 208 212 188 216 172 192 208 216 208 216 216 208 224 224 224 216 216 208 192 192 184 208 216 208 216 224 224 176 140 104 184 184 168 192 192 176 176 172 148 160 160 136 148 124 112 176 140 104 176 140 104 148 124 112 040 048 076 040 048 076 040 048 076 040 048 076 040 048 076 040 048 076 040 048 076 040 048 076 048 136 176 048 136 176 120 144 176 184 200 192 176 176 164 176 172 148 128 012 000 152 036 012 188 080 104 120 064 000 008 000 000 216 168 124 000 000 000 000 000 000 108 096 044 176 140 104 108 080 044 132 096 048 148 124 112 144 084 016 144 104 044 108 080 044 104 064 000 104 064 016 148 112 040 176 112 072 136 080 000 144 112 072 144 112 092 144 104 044 168 132 052 176 112 072 132 096 048 160 112 044 176 112 072 144 112 072 104 064 016 176 112 072 224 232 224 208 212 188 220 232 216 224 224 224 184 184 168 208 216 208 200 200 192 216 212 192 220 232 216 192 192 184 200 208 192 200 208 192 160 160 136 132 096 048 148 124 112 160 160 136 148 124 120 160 160 136 040 048 076 040 048 076 000 000 000 020 040 000 040 048 076 040 048 076 064 056 176 040 048 076 040 048 076 040 048 076 040 048 076 104 116 084 152 172 156 216 224 216 128 012 000 192 036 012 192 036 012 088 000 000 088 000 000 120 144 176 008 000 000 144 112 072 096 056 000 144 112 092 144 104 044 120 072 000 104 064 016 144 112 072 120 064 000 108 080 044 144 096 000 096 032 000 132 088 020 132 088 020 132 080 016 132 080 016 080 040 000 104 064 000 120 080 016 132 096 048 152 104 044 104 064 000 144 104 044 132 096 048 104 056 000 132 088 020 232 248 236 220 232 216 232 232 224 208 216 208 176 176 164 216 224 224 216 224 216 208 216 208 192 192 184 184 184 168 176 172 148 184 184 168 176 140 104 160 160 136 148 124 112 148 132 092 156 152 156 148 124 112 064 056 176 000 000 000 040 048 076 000 000 000 040 048 076 040 048 076 040 048 076 032 036 044 040 048 076 040 048 076 040 048 076 104 116 084 208 212 188 152 036 012 000 000 000 188 080 104 192 036 012 128 012 000 048 000 000 104 012 000 056 000 000 132 096 048 148 124 112 104 064 016 184 084 012 192 036 012 192 036 012 192 036 012 192 160 156 176 112 072 088 040 000 144 096 000 160 112 044 104 072 016 112 072 000 132 096 048 108 080 044 096 048 000 120 072 000 128 072 000 096 040 000 128 072 000 112 056 000 132 080 016 128 072 000 144 104 044 224 224 224 200 208 200 200 208 200 200 208 200 192 192 200 200 208 200 216 216 216 192 192 200 176 156 156 160 160 136 176 176 164 192 192 184 184 180 152 148 132 092 144 112 072 148 124 120 148 124 112 132 096 048 144 112 072 112 072 076 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 040 048 076 000 000 000 064 056 176 160 200 192 188 048 044 152 036 012 156 152 156 192 160 156 128 012 000 192 036 012 128 012 000 000 000 000 144 036 012 104 116 084 128 012 000 192 036 012 192 036 012 128 012 000 136 068 000 144 080 000 152 084 016 192 036 012 200 136 072 088 012 000 132 088 020 104 056 000 080 024 000 104 064 016 120 072 000 088 032 000 120 080 016 120 064 000 112 072 000 096 048 000 104 080 016 104 056 000 096 056 000 148 112 040 232 240 232 224 232 224 184 184 168 200 200 192 200 200 192 192 160 156 208 212 188 208 216 208 208 212 228 156 152 156 184 184 168 192 192 200 148 124 120 160 160 136 192 136 092 132 096 048 176 176 164 104 116 084 040 048 076 048 136 176 080 072 016 032 036 044 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 064 056 176 048 136 176 160 200 192 128 012 000 128 012 000 128 012 000 152 036 012 128 012 000 128 012 000 032 000 000 088 000 000 016 000 000 188 120 184 128 012 000 104 032 000 104 072 016 136 068 000 096 040 000 128 072 000 096 040 000 104 048 000 064 024 000 088 032 000 136 096 016 088 032 000 104 048 000 088 040 000 132 088 020 132 088 008 120 056 000 096 048 000 088 032 000 112 064 000 104 048 000 120 072 000 112 080 000 152 124 036 216 224 216 208 216 208 144 112 072 176 176 164 168 172 156 168 172 156 200 208 208 200 200 204 208 216 208 176 176 164 200 200 192 192 184 156 160 160 136 000 000 000 144 112 072 160 128 052 104 116 084 040 048 076 032 036 044 048 136 176 032 036 044 020 024 016 032 036 044 032 036 044 000 000 000 000 000 000 000 000 000 040 048 076 040 048 076 160 200 192 128 012 000 112 012 000 112 012 000 072 000 000 016 000 000 020 040 000 128 012 000 132 088 020 128 012 000 112 012 000 064 056 176 156 152 156 132 088 020 120 080 000 088 048 000 132 096 048 144 084 016 068 012 000 056 012 000 048 000 000 120 056 000 128 080 000 112 064 000 104 064 000 120 072 000 148 112 052 132 096 048 080 040 000 128 096 032 112 048 000 056 000 000 112 072 000 056 024 000 120 088 016 208 208 208 224 224 224 168 172 156 148 124 112 192 160 156 176 176 164 200 216 204 200 216 204 208 208 208 184 184 168 176 176 164 148 124 120 184 160 156 000 000 000 128 012 000 000 000 000 104 116 084 016 000 000 032 036 044 020 024 016 040 048 076 040 048 076 040 048 076 032 036 044 000 000 000 032 036 044 000 000 000 040 048 076 048 136 176 160 200 192 000 000 000 108 080 044 048 136 176 104 116 084 104 056 000 000 000 000 128 012 000 112 048 000 192 036 012 112 012 000 216 216 216 152 172 156 112 048 000 016 000 000 000 000 000 000 000 000 000 000 000 000 000 000 080 072 016 008 000 000 080 032 000 048 000 000 080 024 000 096 048 000 128 072 000 132 088 020 144 112 072 112 064 000 112 056 000 096 040 000 096 032 000 104 040 000 064 024 000 144 096 000 208 216 208 200 200 192 184 160 156 148 124 112 156 152 156 176 172 148 176 172 148 160 160 136 192 192 200 184 184 168 176 176 164 176 176 164 128 012 000 000 000 000 048 000 000 000 000 000 128 012 000 128 012 000 128 012 000 096 008 000 000 000 000 128 012 000 152 036 012 192 036 012 192 036 012 192 036 012 192 036 012 040 048 076 152 172 156 160 160 136 084 044 044 000 000 000 000 000 000 000 000 000 080 040 016 104 028 016 112 036 000 112 064 000 192 036 012 104 040 000 104 048 000 048 000 000 000 000 000 000 000 000 000 000 000 064 060 000 064 060 000 032 036 044 000 000 000 000 000 000 128 112 044 096 024 000 032 000 000 048 000 000 132 088 020 120 080 000 152 104 044 132 096 048 088 032 000 088 032 000 132 088 020 096 024 000 096 048 000 132 088 020 208 208 208 148 132 092 104 116 084 108 080 044 144 112 072 132 080 016 144 112 072 176 156 156 192 184 156 160 160 136 176 140 104 148 124 120 164 136 092 000 000 000 128 012 000 128 012 000 032 036 044 056 024 000 156 152 156 128 096 032 000 000 000 192 036 012 192 036 012 192 036 012 192 036 012 128 012 000 192 036 012 040 048 076 160 200 192 160 200 192 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 112 012 000 064 000 000 104 012 000 128 012 000 088 040 000 032 000 000 020 040 000 000 000 000 148 124 120 104 080 016 064 024 000 096 040 000 104 048 000 068 012 000 000 000 000 000 000 000 108 080 044 096 024 000 128 072 000 112 056 000 132 088 020 128 080 000 096 040 000 104 048 000 096 032 000 160 112 044 088 024 000 016 000 000 120 080 000 164 136 092 144 112 092 144 112 072 112 056 000 132 096 048 144 112 072 148 124 112 176 112 072 192 136 092 144 112 092 144 112 072 104 116 084 000 000 000 000 000 000 144 104 044 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 192 036 012 192 036 012 192 036 012 128 012 000 128 012 000 024 000 000 048 136 176 160 200 192 156 152 156 000 000 000 000 000 000 000 000 000 000 000 000 096 048 000 024 008 000 056 000 000 088 000 000 128 012 000 096 056 000 000 000 000 000 000 000 048 136 176 080 040 000 148 124 112 108 080 044 148 096 020 168 104 044 112 056 000 032 000 000 040 048 076 000 000 000 016 000 000 032 000 000 080 032 000 088 040 000 080 040 000 088 040 000 104 048 000 168 132 052 168 104 044 120 064 000 080 012 000 144 104 020 144 112 092 128 064 044 096 056 000 064 000 000 112 072 000 088 032 000 120 080 016 088 032 000 108 096 044 108 080 044 096 056 000 108 096 044 000 000 000 048 040 000 104 072 016 016 000 000 000 000 000 112 072 076 000 000 000 000 000 000 008 000 000 128 012 000 128 012 000 128 012 000 128 012 000 128 012 000 000 000 000 040 048 076 160 200 192 040 048 076 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 068 012 000 040 000 000 096 008 000 096 040 000 104 056 000 000 000 000 108 096 044 132 088 020 216 216 208 184 184 168 088 048 000 136 068 000 068 012 000 072 000 000 080 012 000 104 056 000 000 000 000 108 096 044 064 000 000 080 024 000 096 032 000 128 072 000 104 048 000 080 000 000 040 000 000 068 012 000 112 080 000 096 056 000 104 056 000 176 112 072 152 104 044 108 080 044 072 024 000 104 048 000 104 064 000 104 056 000 132 096 048 144 112 072 104 040 000 084 044 044 080 040 016 080 048 000 108 080 044 104 056 000 112 072 000 104 064 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 040 048 076 160 200 192 040 048 076 152 136 072 184 184 168 184 200 192 000 000 000 112 012 000 072 000 000 040 000 000 112 064 000 056 000 000 024 000 000 000 000 000 132 088 020 096 024 000 112 072 076 112 072 076 176 140 104 000 000 000 068 012 000 096 056 000 080 024 000 096 048 000 000 000 000 080 040 000 080 000 000 088 012 000 088 024 000 152 096 000 112 056 000 064 000 000 080 000 000 064 000 000 120 048 000 072 000 000 104 040 000 144 112 072 096 048 000 096 056 000 088 012 000 096 048 000 104 064 000 104 072 016 104 072 016 108 080 044 056 032 016 056 024 000 108 080 044 144 104 044 096 048 000 104 072 016 088 048 000 000 000 000 000 000 000 020 024 016 008 000 000 000 000 000 040 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 104 116 084 072 000 000 156 152 156 104 116 084 160 160 136 160 160 136 168 104 044 128 012 000 080 000 000 056 000 000 080 012 000 104 012 000 068 012 000 000 000 000 112 072 000 072 000 000 088 012 000 152 172 156 000 000 000 000 000 000 108 080 044 112 048 000 088 012 000 120 072 000 056 024 000 000 000 000 112 036 000 132 052 000 104 048 000 148 116 020 168 112 012 048 000 000 104 040 000 184 136 072 088 024 000 104 040 000 120 080 016 108 060 044 120 080 016 108 080 044 080 072 016 064 060 000 080 032 000 108 080 044 108 080 044 064 024 000 108 080 044 064 032 000 056 032 016 080 040 000 064 024 000 064 032 000 024 008 000 000 000 000 000 000 000 148 112 052 088 032 000 112 056 000 056 024 000 000 000 000 040 048 076 000 000 000 000 000 000 000 000 000 104 116 084 104 116 084 176 176 164 192 192 184 200 200 180 220 200 192 000 000 000 080 072 016 088 000 000 056 000 000 120 056 000 104 040 000 088 012 000 000 000 000 064 000 000 080 024 000 108 080 044 096 048 000 160 200 192 000 000 000 000 000 000 108 080 044 104 080 016 132 096 048 080 040 000 000 000 000 132 052 000 132 052 000 136 068 000 120 080 000 136 080 000 096 024 000 112 036 000 072 000 000 080 024 000 056 000 000 096 040 000 056 012 000 056 000 000 056 012 000 080 040 000 056 024 000 104 072 016 056 032 016 080 040 016 048 040 000 064 060 000 056 032 016 024 008 000 056 012 000 024 000 000 056 032 016 000 000 000 000 000 000 040 000 000 064 000 000 068 012 000 000 000 000 068 048 100 096 024 000 088 032 000 104 012 000 072 000 000 000 000 000 152 172 156 104 116 084 088 000 000 120 144 176 184 160 124 000 000 000 000 000 000 080 000 000 112 036 000 096 024 000 104 028 016 136 068 000 136 088 000 000 000 000 148 124 120 088 024 000 120 048 000 132 088 020 000 000 000 000 000 000 000 000 000 112 048 000 088 048 000 144 104 044 084 044 044 000 000 000 136 068 000 136 080 000 088 000 000 088 040 000 136 080 000 128 072 000 112 048 000 080 024 000 088 032 000 064 000 000 088 012 000 048 040 000 024 000 000 040 000 000 040 000 000 024 008 000 096 068 000 096 068 000 080 048 000 056 012 000 080 048 000 056 000 000 056 024 000 056 012 000 000 000 000 000 000 000 000 000 000 000 000 000 056 024 000 024 008 000 000 000 000 000 000 000 008 000 000 064 000 000 128 012 000 000 000 000 000 000 000 000 000 000 020 024 016 104 116 084 136 120 084 000 000 000 000 000 000 064 000 000 072 000 000 088 012 000 132 052 000 104 028 016 128 064 000 112 036 000 104 040 000 000 000 000 224 224 224 064 000 000 080 012 000 108 080 044 088 032 000 112 056 000 104 064 000 128 096 032 112 036 000 112 056 000 000 000 000 008 000 000 112 012 000 088 000 000 104 012 000 080 012 000 160 112 044 160 112 044 056 000 000 072 000 000 112 056 000 104 040 000 088 024 000 032 000 000 024 000 000 056 032 016 016 000 000 056 024 000 088 048 000 088 040 000 080 048 000 080 040 016 080 032 000 088 040 000 088 032 000 072 024 000 064 000 000 024 000 000 000 000 000 024 008 000 096 056 000 008 000 000 000 000 000 128 012 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 024 000 000 040 000 000 088 024 000 080 000 000 056 000 000 056 000 000 096 008 000 112 036 000 132 080 016 132 052 000 152 084 000 136 068 000 104 048 000 056 000 000 008 000 000 192 192 200 088 032 000 120 072 000 112 048 000 164 136 092 112 036 000 168 120 052 080 040 016 104 116 084 000 000 000 104 048 000 072 000 000 048 000 000 088 012 000 068 012 000 072 000 000 064 000 000 032 000 000 040 000 000 088 012 000 088 000 000 064 000 000 048 000 000 068 012 000 064 024 000 040 000 000 040 000 000 024 008 000 088 048 000 056 012 000 056 012 000 056 012 000 072 024 000 088 024 000 056 000 000 072 000 000 000 000 000 000 000 000 032 036 044 096 056 000 000 000 000 016 000 000 000 000 000 000 000 000 000 000 000 016 000 000 040 000 000 000 000 000 104 028 016 088 000 000 104 012 000 128 012 000 120 056 000 104 012 000 088 000 000 136 068 000 152 084 000 148 096 020 144 084 016 152 084 000 096 024 000 080 012 000 096 040 000 000 000 000 000 000 000 156 152 156 128 080 000 132 088 020 144 104 044 152 104 044 136 068 000 104 116 084 000 000 000 000 000 000 072 000 000 064 000 000 040 000 000 048 000 000 072 000 000 080 000 000 152 104 020 144 104 044 064 000 000 128 072 000 120 048 000 120 056 000 088 048 000 072 024 000 080 048 000 104 048 000 088 012 000 132 088 020 088 040 000 056 012 000 088 032 000 096 040 000 048 000 000 096 008 000 112 056 000 096 024 000 072 000 000 000 000 000 000 000 000 108 080 044 072 024 000 000 000 000 000 000 000 000 000 000 136 080 000 152 036 012 000 000 000 000 000 000 120 048 000 112 048 000 132 052 000 136 068 000 160 096 012 144 084 016 152 084 000 168 100 000 132 052 000 152 084 000 144 088 000 152 084 000 120 056 000 112 036 000 096 032 000 128 080 000 000 000 000 000 000 000 160 160 136 048 136 176 148 124 112 064 056 176 064 056 176 000 000 000 000 000 000 088 000 000 112 036 000 104 012 000 088 012 000 104 040 000 104 056 000 068 012 000 068 012 000 144 104 044 072 000 000 104 040 000 096 032 000 148 096 020 088 032 000 096 048 000 104 056 000 104 056 000 064 024 000 104 072 016 136 080 000 148 096 020 132 088 020 064 000 000 088 024 000 112 056 000 112 012 000 088 000 000 056 000 000 040 000 000 000 000 000 160 160 136 104 040 000 056 012 000 088 040 000 080 012 000 128 064 000 120 048 000 000 000 000 024 000 000 152 084 016 136 068 000 144 088 000 168 100 016 168 100 000 168 100 016 168 104 044 176 112 044 176 112 044 160 112 044 148 112 052 152 104 020 144 096 000 120 056 000 104 012 000 088 012 000 088 032 000 016 000 000 088 000 000 000 000 000 020 024 016 020 024 016 000 000 000 000 000 000 104 040 000 104 012 000 104 048 000 136 088 000 112 056 000 128 072 000 112 072 000 088 024 000 096 024 000 120 100 000 132 088 008 120 072 000 112 048 000 152 104 004 056 024 000 088 048 000 104 048 000 120 072 000 096 024 000 104 064 016 128 072 000 132 080 016 112 048 000 096 008 000 104 012 000 088 000 000 080 000 000 068 012 000 112 012 000 104 012 000 000 000 000 000 000 000 156 152 156 084 044 044 120 080 016 120 080 016 112 072 076 000 000 000 000 000 000 144 104 044 160 096 012 152 084 000 168 112 012 176 120 044 176 112 044 152 084 000 184 084 012 176 104 012 160 096 012 176 120 044 168 112 012 168 112 012 176 120 044 160 104 000 128 072 000 136 088 000 112 048 000 104 048 000 132 052 000 088 024 000 000 000 000 080 012 000 168 112 012 160 096 012 136 080 000 128 088 000 136 088 000 144 088 000 152 096 000 132 108 000 144 104 004 152 104 004 144 096 000 112 080 000 144 104 020 168 112 012 136 088 000 144 104 020 032 000 000 024 000 000 056 000 000 120 056 000 096 048 000 096 032 000 136 068 000 104 040 000 096 024 000 080 000 000 088 000 000 096 024 000 104 032 000 096 024 000 112 012 000 120 064 000 032 000 000 000 000 000 000 000 000 020 024 016 020 040 000 020 024 016 000 000 000 000 000 000 136 096 016 176 112 044 160 112 044 148 096 020 148 096 020 168 100 016 176 112 044 168 100 016 176 104 012 168 100 000 160 104 000 168 100 016 152 084 000 208 120 012 176 128 012 200 132 044 200 132 044 168 112 012 184 132 044 168 112 012 168 100 000 168 112 012 160 120 012 184 132 044 168 100 000 160 104 000 160 104 000 136 080 000 144 088 000 136 068 000 136 080 000 168 112 012 176 140 072 152 104 004 144 104 004 144 096 000 144 104 004 160 120 012 176 128 012 176 120 044 024 008 000 056 012 000 096 048 000 120 080 016 104 012 000 120 056 000 136 068 000 128 072 000 104 032 000 088 000 000 132 052 000 112 048 000 120 056 000 128 064 000 132 052 000 120 056 000 096 008 000 112 048 000 064 024 000 000 000 000 000 000 000 000 000 000 000 000 000 144 088 000 168 112 012 168 112 012 152 084 000 112 036 000 144 096 000 144 080 000 160 096 012 168 112 012 144 088 000 160 096 012 160 096 012 148 096 020 152 084 000 132 052 000 120 048 000 168 100 016 200 132 044 200 132 044 200 132 044 200 132 044 176 128 012 200 132 044 168 128 012 164 136 092 200 132 044 176 136 044 176 136 044 200 132 044 168 112 012 152 096 000 160 112 044 168 112 012 160 104 000 176 136 044 148 116 004 168 112 012 184 132 044 200 132 044 184 084 012 200 132 044 024 000 000 024 000 000 120 048 000 152 084 000 112 012 000 132 052 000 104 032 000 136 080 000 120 048 000 132 052 000 132 052 000 128 072 000 136 068 000 136 068 000 112 056 000 132 052 000 120 048 000 136 080 000 128 072 000 128 072 000 136 080 000 136 080 000 144 096 000 152 084 000 160 104 000 168 100 000 152 084 000 136 068 000 208 120 012 152 084 000 160 096 012 176 120 044 112 048 000 128 064 000 120 048 000 152 096 000 168 100 000 208 120 012 176 104 012 200 136 072 176 128 012 200 132 044 200 132 044 200 132 044 200 132 044 216 164 076 164 160 104 168 128 012 200 132 044 200 132 044 216 164 076 200 132 044 164 136 092 200 132 044 168 112 012 208 120 012 176 104 012 176 120 044 176 128 012 200 132 044 216 164 076 200 132 044 176 136 044 176 136 044 088 048 000 080 040 000 132 052 000 152 084 000 168 104 044 176 120 044 160 112 044 168 112 012 160 096 012 160 096 012 152 084 000 148 096 020 132 052 000 136 068 000 132 052 000 136 068 000 176 104 012 128 036 000 132 052 000 184 084 012 132 052 000 168 100 000 168 112 012 168 100 000 152 084 000 152 084 000 168 100 000 136 068 000 152 096 000 160 096 012 160 096 012 168 112 012 152 096 000 144 080 000 136 068 000 160 096 012 152 084 000 168 112 012 152 084 000 176 104 012 176 104 012 168 100 000 200 132 044 176 128 012 200 132 044 216 164 076 168 128 012 168 128 012 200 132 044 200 132 044 168 128 012 168 128 012 216 164 076 152 124 036 176 104 012 176 104 012 200 132 044 200 132 044 200 132 044 200 132 044 200 132 044 200 132 044 176 128 012 168 128 012 144 112 072 144 084 016 152 084 016 168 104 044 168 104 044 176 120 044 176 120 044 176 120 044 168 100 000 152 084 000 152 084 000 160 096 012 152 084 000 168 100 000 152 084 000 096 008 000 152 084 000 144 104 044 184 084 012 208 120 012 184 084 012 168 100 000 208 120 012 176 104 012 176 104 012 168 112 012 160 096 012 160 096 012 152 084 000 160 096 012 208 120 012 168 112 012 136 088 000 112 056 000 120 056 000 132 052 000 144 080 000 152 084 000 132 052 000 168 100 000 160 096 012 168 100 000 208 120 012 168 100 000 200 132 044 176 128 012 176 128 012 200 132 044 168 112 012 200 132 044 168 128 012 168 112 012 168 128 012 168 100 000 152 084 000 152 084 000 208 120 012 168 128 036 168 112 012 176 128 012 160 120 012 168 112 012 168 112 012 168 112 012 180 120 072 160 104 016 168 104 044 152 084 000 152 084 016 176 120 044 132 080 016 160 096 012 144 080 000 132 052 000 144 088 000 144 084 016 148 096 008 168 100 016 128 080 000 120 048 000 152 036 012 152 084 000 132 052 000 136 068 000 168 100 000 152 084 000 160 096 012 176 104 012 160 096 012 168 112 012 168 112 012 160 096 012 152 084 000 168 100 000 176 104 012 168 112 012 176 104 012 168 112 012 168 100 000 152 104 004 176 120 044 176 120 044 176 128 012 176 120 044 176 120 044 176 104 012 200 132 044 176 128 012 152 096 000 176 104 012 160 104 000 148 116 004 144 080 000 152 096 000 168 112 012 176 104 012 184 084 012 152 084 000 132 052 000 168 112 012 176 128 012 168 112 012 168 112 012 160 104 000 152 104 004 176 128 012 160 120 012 120 072 000 144 084 016 144 088 000 152 104 044 132 088 020 132 088 020 152 084 000 120 064 000 112 056 000 112 072 000 088 012 000 088 012 000 120 072 000 148 096 020 136 088 000 128 064 000 112 048 000 136 068 000 132 052 000 132 052 000 120 064 000 128 036 000 112 012 000 120 048 000 112 048 000 144 088 000 136 068 000 152 096 000 144 088 000 136 068 000 152 084 000 144 080 000 128 036 000 160 104 000 168 112 012 168 112 012 168 112 012 176 120 044 184 132 044 168 128 036 144 088 000 152 096 000 168 112 012 168 112 012 160 104 000 136 088 000 152 096 000 160 096 012 144 088 000 136 088 000 160 104 000 168 112 012 160 096 012 128 036 000 144 080 000 144 088 000 152 096 000 168 112 012 152 104 004 168 112 012 144 096 000 152 104 004 148 116 004 144 080 000 136 088 000 120 088 016 128 088 000 144 080 000 148 096 020 152 084 016 144 096 000 168 112 012 160 104 000 112 036 000 032 000 000 112 064 000 120 064 000 120 064 000 056 000 000 064 024 000 112 048 000 096 024 000 104 040 000 104 040 000 072 000 000 072 000 000 072 000 000 056 000 000 040 000 000 104 032 000 120 072 000 136 080 000 120 056 000 088 032 000 112 048 000 096 040 000 112 056 000 128 072 000 120 056 000 136 068 000 136 088 000 128 080 000 148 096 008 160 104 016 136 088 000 120 056 000 136 088 000 136 068 000 144 088 000 152 084 000 112 056 000 136 080 000 128 064 000 136 096 016 144 096 000 160 104 000 144 088 000 128 080 000 128 072 000 128 080 000 148 112 040 136 080 000 152 096 000 144 104 004 144 096 000 148 116 004 128 088 000 136 088 000 096 048 000 124 096 016 112 080 000 080 024 000 096 040 000 120 072 000 152 096 000 168 112 012 144 088 000 120 080 000 068 012 000 088 048 000 080 040 000 096 068 000 112 064 000 072 024 000 080 040 000 080 012 000 096 032 000 112 036 000 000 000 000 032 000 000 096 068 000 048 000 000 000 000 000 040 000 000 096 024 000 104 056 000 104 040 000 068 012 000 068 012 000 048 000 000 056 000 000 088 032 000 088 040 000 096 040 000 096 032 000 080 048 000 112 064 000 112 072 000 080 000 000 096 032 000 088 024 000 136 068 000 120 048 000 120 056 000 112 036 000 112 036 000 112 048 000 120 064 000 132 052 000 132 052 000 144 088 000 128 088 000 104 048 000 136 088 000 144 096 000 128 072 000 112 056 000 144 096 000 144 096 000 132 108 000 120 088 016 096 068 000 096 056 000 120 072 000 120 072 000 152 104 004 176 136 044 128 088 000 148 116 004 160 120 012 152 104 004 080 032 000 056 024 000 072 024 000 080 024 000 096 032 000 120 080 000 128 064 000 032 000 000 040 000 000 032 000 000 068 012 000 088 032 000 104 080 016 120 072 000 096 048 000 088 000 000 064 000 000 080 024 000 128 080 000 112 056 000 104 048 000 096 040 000 112 036 000 120 064 000 068 012 000 016 000 000 048 040 000 072 024 000 088 048 000 048 000 000 056 012 000 088 032 000 104 032 000 056 024 000 152 084 000 132 052 000 096 032 000 120 072 000 104 032 000 112 056 000 104 032 000 088 032 000 080 000 000 072 000 000 088 040 000 112 064 000 128 080 000 112 072 000 104 048 000 128 088 000 120 088 016 136 088 000 104 048 000 144 096 000 104 056 000 104 056 000 148 112 032 144 104 004 120 088 016 132 108 000 144 104 020 148 116 020 120 100 000 148 116 004 148 128 052 132 108 000 096 068 000 132 108 000 168 112 012 136 088 000 136 088 000 168 100 000 148 112 032 148 112 052 148 112 052 148 116 004 168 132 052 216 164 076 120 100 000 120 100 000 128 080 000 112 072 000 056 000 000 080 040 000 120 088 016 128 088 000 144 096 000 112 072 000 088 032 000 096 040 000 120 088 016 132 108 000 120 072 000 104 056 000 152 104 020 112 080 000 088 040 000 104 040 000 132 052 000 128 064 000 064 024 000 112 080 000 128 036 000 064 000 000 096 008 000 080 000 000 056 000 000 048 000 000 016 000 000 080 012 000 096 056 000 168 128 012 200 132 044 120 088 016 148 116 020 216 164 076 168 136 072 148 116 020 148 116 020 112 056 000 144 104 020 128 112 016 128 112 044 148 112 052 160 120 012 144 104 004 132 108 000 120 100 000 148 128 052 148 112 052 100 080 000 152 104 004 120 100 000 120 088 016 184 152 088 168 112 012 144 104 020 120 100 000 104 072 000 104 096 000 112 072 000 176 136 044 160 104 000 136 068 000 144 104 004 128 112 016 152 124 036 176 136 044 176 136 044 152 104 020 168 120 052 176 140 072 152 124 036 168 120 052 160 112 044 176 140 072 184 136 072 160 128 052 144 104 004 144 104 004 184 152 088 168 132 052 200 136 072 168 112 012 128 112 044 148 116 020 152 104 004 168 128 012 200 132 044 128 088 000 120 100 000 136 096 016 128 112 016 112 072 000 148 116 020 144 104 004 132 108 000 144 104 020 128 112 016 168 112 012 132 108 000 184 152 088 200 132 044 124 096 016 128 096 032 176 128 072 148 096 020 136 088 000 148 096 020 132 088 020 176 112 072 128 112 016 168 120 052 120 088 016 104 072 000 080 048 000 104 096 000 132 108 000 144 096 000 120 048 000 080 048 000 104 072 000 048 040 000 096 048 000 104 040 000 056 024 000 080 048 000 088 040 000 176 120 044 144 104 020 104 096 000 128 112 044 120 100 000 144 104 044 184 152 088 176 140 072 096 068 000 120 100 000 136 096 016 124 096 016 096 056 000 128 080 000 132 108 000 104 096 000 104 096 000 148 116 004 160 096 012 128 072 000 120 100 000 148 116 020 168 112 012 148 116 004 176 128 012 168 120 052 144 104 004 128 072 000 168 136 072 144 096 000 148 112 032 128 112 016 128 112 016 124 096 016 120 100 000 132 108 000 120 100 000 148 116 020 152 124 036 132 108 000 160 112 044 200 136 072 168 104 044 184 152 088 184 152 088 184 152 088 176 140 072 176 140 072 176 140 072 168 132 052 184 132 044 160 112 044 148 116 004 120 088 016 128 072 000 128 080 000 120 100 000 148 096 008 120 100 000 128 080 000 120 080 000 120 088 016 144 104 020 136 088 000 152 104 020 136 096 016 144 104 020 120 100 000 104 056 000 124 096 016 128 096 032 160 128 052 144 104 044 088 048 000 120 100 000 096 068 000 088 048 000 096 048 000 072 000 000 120 080 000 120 088 016 136 068 000 144 080 000 136 068 000 112 056 000 136 088 000 160 096 012 144 096 000 144 088 000 152 084 000 168 100 000 144 096 000 104 100 016 112 080 000 088 048 000 096 068 000 104 072 000 100 080 000 104 096 000 124 096 016 096 048 000 096 056 000 120 088 016 124 096 016 176 128 072 184 136 072 216 164 076 216 164 076 184 152 088 216 164 076 184 152 088 164 136 092 164 136 092 176 136 092 176 140 072 176 112 072 132 096 048 132 096 048 128 072 000 056 024 000 068 012 000 080 024 000 064 024 000 080 024 000 056 000 000 104 040 000 128 064 000 056 012 000 096 068 000 080 032 000 040 000 000 024 008 000 080 048 000 112 072 000 088 048 000 080 040 000 088 024 000 112 072 000 112 072 000 100 080 000 120 080 000 112 064 000 120 080 000 112 072 000 104 056 000 096 068 000 144 080 000 132 052 000 112 064 000 144 088 000 152 096 000 112 056 000 132 052 000 132 052 000 112 072 000 132 088 020 104 072 000 080 032 000 104 072 000 096 068 000 096 068 000 148 112 052 160 120 012 152 124 036 128 112 016 132 108 000 148 112 032 136 096 016 168 120 052 200 136 072 200 136 072 184 152 088 176 140 072 184 152 088 184 152 088 184 152 088 184 152 088 192 136 092 216 164 076 176 140 104 176 112 072 176 140 104 176 112 072 124 096 016 088 040 000 132 096 048 132 088 020 112 056 000 104 056 000 088 024 000 104 040 000 056 012 000 088 032 000 068 012 000 016 000 000 032 000 000 080 040 000 056 012 000 088 040 000 112 080 000 104 048 000 056 000 000 080 012 000 128 072 000 108 080 044 104 064 000 112 036 000 112 036 000 072 000 000 104 040 000 132 052 000 132 052 000 112 048 000 120 048 000 112 036 000 132 052 000 112 036 000 112 048 000 096 056 000 096 056 000 088 024 000 040 000 000 056 032 016 080 040 000 080 048 000 088 048 000 080 048 000 120 080 000 088 040 000 080 040 000 120 088 016 104 064 000 168 128 036 176 140 072 200 132 044 200 132 044 216 164 076 176 140 072 176 140 072 176 136 044 176 136 044 184 152 088 168 136 072 184 136 072 176 140 104 176 140 104 176 112 072 148 112 052 168 104 044 176 136 092 148 120 072 144 084 016 152 104 044 148 096 020 168 100 016 132 088 008 148 096 020 152 104 044 132 088 008 128 072 000 144 104 044 088 040 000 088 048 000 088 048 000 120 072 000 112 036 000 104 032 000 152 104 044 152 104 044 148 096 020 144 088 000 128 072 000 128 064 000 096 040 000 120 056 000 128 036 000 184 084 012 160 096 012 168 100 016 152 084 000 128 080 000 128 072 000 096 048 000 120 072 000 104 048 000 104 080 016 120 080 016 096 056 000 112 072 000 104 080 016 128 096 032 144 104 044 144 104 020 104 080 016 144 104 044 108 080 044 148 128 052 148 128 052 176 136 044 168 128 012 200 132 044 216 164 076 176 140 104 184 152 088 184 152 088 148 128 052 160 128 052 168 132 052 184 152 088 192 136 092 152 124 036 168 132 052 168 100 016 176 128 072 168 112 012 168 100 000 176 112 044 168 120 052 160 104 000 152 084 000 192 136 092 216 168 124 152 104 020 168 136 072 176 128 072 132 088 020 132 088 020 132 096 048 148 096 020 128 072 000 104 048 000 152 104 044 148 116 020 152 104 044 136 096 016 112 036 000 128 072 000 112 036 000 132 052 000 152 036 012 152 084 000 168 100 000 168 100 000 136 068 000 152 084 000 152 104 004 120 088 016 160 112 044 144 104 020 144 104 020 152 104 044 148 116 020 108 080 044 144 112 072 148 128 052 148 112 032 148 128 052 144 104 044 148 112 032 152 124 036 132 108 000 160 120 012 128 112 044 152 124 036 152 124 036 164 136 092 176 140 104 164 136 092 176 140 104 148 112 040 168 120 052 160 120 012 168 132 052 160 128 052 148 116 020 168 132 052 168 100 000 168 112 012 144 104 020 144 096 000 144 084 016 160 104 016 176 120 044 160 112 044 192 136 092 200 136 072 168 112 012 168 112 012 176 140 072 184 132 044 168 120 052 148 112 032 152 096 000 148 112 040 120 088 016 160 112 044 176 128 072 160 112 044 160 120 012 136 088 000 112 036 000 144 080 000 132 052 000 132 052 000 152 036 012 152 036 012 184 084 012 152 036 012 184 084 012 168 100 000 152 104 020 160 112 044 168 120 052 168 120 052 160 128 052 168 112 012 144 104 004 144 104 020 176 140 072 152 124 036 148 112 052 148 112 052 128 112 044 160 112 044 124 096 016 148 112 052 168 136 072 104 096 000 120 100 000 176 140 072 184 152 088 216 164 076 152 136 072 160 128 052 148 112 032 152 124 036 160 128 052 148 112 052 148 112 052 168 112 012 168 112 012 152 084 000 144 104 020 160 112 044 176 120 044 148 096 020 160 120 012 176 112 044 184 132 044 176 128 072 176 140 072 160 112 044 176 136 044 176 140 072 176 140 072 176 140 072 160 128 052 176 128 072 148 096 008 144 084 016 184 132 044 152 084 000 148 116 004 136 088 000 168 112 012 168 112 012 132 052 000 128 036 000 152 084 000 128 012 000 152 084 000 132 052 000 128 036 000 176 112 044 168 136 072 160 104 016 168 132 052 184 132 044 160 128 052 160 112 044 144 088 000 168 120 052 160 128 052 152 124 036 148 112 040 152 124 036 148 112 052 148 116 020 168 136 072 160 120 012 112 080 000 104 100 016 132 088 020 164 160 104 176 140 072 168 136 072 148 128 052 128 112 016 148 116 020 152 124 036 160 112 044 160 128 052 148 112 040 148 096 020 160 120 012 160 096 012 148 116 020 160 112 044 176 120 044 136 068 000 160 112 044 168 120 052 168 120 052 160 104 016 168 112 012 136 068 000 152 084 000 168 120 052 168 120 052 168 120 052 184 132 044 176 128 072 148 112 040 128 072 000 160 104 016 148 096 020 136 080 000 136 068 000 168 112 012 176 104 012 144 080 000 128 036 000 128 036 000 144 036 012 128 036 000 128 036 000 136 068 000 176 104 012 176 120 044 144 088 000 168 120 052 168 128 012 144 096 000 160 112 044 160 112 044 148 096 020 148 116 020 144 096 000 152 104 004 136 096 016 124 096 016 168 120 052 152 084 016 144 088 000 132 096 048 132 108 000 148 112 052 168 120 052 152 136 072 148 112 052 148 112 040 176 140 072 160 128 052 132 108 000 128 112 016 144 104 004 128 088 000 160 104 016 152 104 020 136 068 000 120 072 000 160 112 044 160 104 016 148 096 020 148 116 020 168 112 012 152 104 044 148 096 008 160 120 012 160 104 016 160 104 000 160 096 012 176 112 044 176 120 044 160 104 000 152 104 044 152 104 020 144 080 000 160 104 000 144 104 004 136 080 000 152 084 000 176 104 012 136 068 000 112 048 000 096 008 000 112 012 000 152 084 000 144 080 000 112 012 000 132 052 000 152 036 012 132 052 000 152 096 000 144 104 004 128 088 000 124 096 016 168 120 052 168 120 052 152 084 000 136 080 000 120 088 016 128 088 000 132 088 020 136 068 000 136 080 000 184 132 044 168 100 016 104 080 016 128 112 044 160 128 052 148 128 052 128 096 032 148 128 052 148 096 020 144 104 044 120 088 016 120 088 016 112 080 000 120 100 000 132 108 000 144 096 000 128 088 000 136 088 000 124 096 016 144 104 004 148 112 040 128 088 000 144 096 000 168 120 052 144 096 000 120 088 016 144 096 000 144 096 000 148 096 020 144 080 000 152 084 000 176 112 044 144 096 000 120 088 016 136 080 000 128 036 000 152 084 000 144 096 000 096 048 000 104 012 000 152 036 012 152 036 012 080 000 000 088 000 000 144 036 012 112 012 000 112 036 000 096 024 000 128 012 000 132 052 000 144 096 000 148 096 020 120 100 000 144 088 000 136 088 000 148 096 020 160 096 012 112 048 000 096 040 000 104 056 000 104 072 000 112 064 000 112 036 000 144 096 000 176 104 012 176 120 044 164 136 092 148 132 092 176 112 072 148 120 072 120 096 048 112 080 000 148 096 008 144 104 020 128 096 032 096 068 000 120 088 016 112 072 000 120 088 016 112 080 000 056 000 000 132 052 000 120 056 000 120 100 000 144 104 020 120 088 016 128 088 000 144 104 020 096 048 000 112 056 000 112 064 000 120 100 000 148 096 020 136 068 000 132 052 000 136 068 000 144 096 000 112 048 000 096 032 000 128 012 000 136 080 000 104 064 000 104 064 000 152 084 000 152 036 012 128 012 000 128 080 000 096 008 000 112 036 000 120 048 000 120 064 000 128 072 000 120 048 000 104 040 000 120 064 000 128 088 000 120 088 016 136 080 000 128 064 000 136 088 000 152 096 000 112 012 000 136 068 000 096 068 000 064 024 000 096 056 000 104 040 000 104 040 000 libopengl-perl-0.6704+dfsg.orig/examples/clip.pl0000644000175000017500000000607012334200655021002 0ustar gregoagregoa#!/usr/local/bin/perl # # clip # # This program demonstrates arbitrary clipping planes. # Based on the "clip.c" program in the # OpenGL Programming Guide, Chapter 3, page 108, Listing 3-5. # However this program clips the front part of a rotating cube # with flat shaded faces instead of a wire frame sphere. # # the C synopsis of glClipPlane is # # void glClipPlane(GLenum plane,const GLdouble *equation ) # # For PERL the routine glpClipPlane was added, and the synopsis is: # # void glpClipPlane(GLenum plane,GLdouble a,GLdouble b,GLdouble c,GLdouble d) # # and the 4 double vector (equasion) is packaged by the XSUB. # Or you can still use glClipPlane but then you have to pack() the structure # # note: the statement f(@a) is equivalent to f($a[0],$a[1], ... $a[n]) # i.e. elements of a list are put on the call stack # # The following "BEGIN" line is needed so that "use" is # able to find the built OpenGL module (the one created by doing # a "make" in the above directory). # Comment it out if you are using/testing the "installed" module. # i.e. if you did a "make install" then you dont need to look in ../blib # BEGIN{ unshift(@INC,"../blib"); } BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; sub tacky_cube { local($s) = @_; local(@x,@y,@z,@f); local($i,$j,$k); local(@r,@g,@b); $s = $s/2.0; @x=(-$s,-$s,-$s,-$s,$s,$s,$s,$s); @y=(-$s,-$s,$s,$s,-$s,-$s,$s,$s); @z=(-$s,$s,$s,-$s,-$s,$s,$s,-$s); @f=( 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3, ); @r=(1.0, 0, 0, 1.0, 1.0, 0); @g=(0, 1.0, 0, 1.0, 0, 1.0); @b=(0, 0, 1.0, 0, 1.0, 1.0); for($i=0;$i<6;$i++){ glColor3f($r[$i],$g[$i],$b[$i]); glBegin(GL_POLYGON); for($j=0;$j<4;$j++){ $k=$f[$i*4+$j]; glVertex3d($x[$k],$y[$k],$z[$k]); } glEnd(); } } sub add_clip_plane { # give the plane a slight tilt-away to prove we're not just # clipping against the view volume @eqn = (0.0, -0.3, -1.0, 1.2); glpClipPlane(GL_CLIP_PLANE0, @eqn); glEnable(GL_CLIP_PLANE0); } sub display{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef($spin, 0.0, 1.0, 0.0); tacky_cube(3.0); glPopMatrix(); glFlush(); glXSwapBuffers; } sub myReshape { # glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1.0 , 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity (); } glpOpenWindow(width => 400, height => 400, attributes => [GLX_RGBA,GLX_DOUBLEBUFFER]); glClearColor(0,0,0,1); glShadeModel (GL_FLAT); myReshape(); glDisable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glLoadIdentity (); glTranslatef (0.0, 0.0, -5.0); add_clip_plane; # test glGetClipPlane() ($a,$b,$c,$d)=glpGetClipPlane(GL_CLIP_PLANE0); print "Clipping plane (a,b,c,d) = ($a,$b,$c,$d)\n"; $spin=0; while(1) {$spin += 1.0; display;} libopengl-perl-0.6704+dfsg.orig/examples/depth.pl0000644000175000017500000000171012334200655021153 0ustar gregoagregoa#!/usr/local/bin/perl # # depth # # Simple demo showing effect of Z (depth) buffering. # I saw a similar demo in the MESA distribution. # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; # if you dont ask for a visual with a depth buffer you might not get one glpOpenWindow(attributes=>[GLX_RGBA,GLX_DEPTH_SIZE,1]); # enable the important gl feature glEnable(GL_DEPTH_TEST); glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity; glOrtho(-1.2,1.2,-1.2,1.2,-1,1); # draw intersecting triangles glColor3f(1,0,0); glBegin(GL_POLYGON); glVertex3f(-1,1,0); glVertex3f(-1,-1,0); glVertex3f(0.9,0,0.8); glEnd(); glColor3f(0,1,0); glBegin(GL_POLYGON); glVertex3f(1,-1,0); glVertex3f(1,1,0); glVertex3f(-0.9,0,1); glEnd(); glpFlush(); glpMainLoop; libopengl-perl-0.6704+dfsg.orig/examples/simple.pl0000644000175000017500000000121312334200655021336 0ustar gregoagregoa#!/usr/local/bin/perl # # simple example taken from listing 1-1 (or 1-2) from OpenGL book # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; glpOpenWindow; glClearColor(0,0,1,1); glClear(GL_COLOR_BUFFER_BIT); glOrtho(-1,1,-1,1,-1,1); glColor3f(1,0,0); glBegin(GL_POLYGON); glVertex2f(-0.5,-0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5,-0.5); glEnd(); glpFlush(); print "Program 1-1 Simple, hit Enter in terminal window to quit:\n\n"; glpMainLoop; libopengl-perl-0.6704+dfsg.orig/examples/light.pl0000644000175000017500000000613312334200655021162 0ustar gregoagregoa#!/usr/local/bin/perl # # light # # This program demonstrates the use of the OpenGL lighting model. # A icosahedron is drawn using a grey material characteristic. # A single light source illuminates the object. # Example adapted from light.c. BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; $use_lighting=1; $use_frame=1; sub icosahedron{ # from OpenGL Programming Guide page 56 $x=0.525731112119133606; $z=0.850650808352039932; $v=[ [-$x, 0, $z], [ $x, 0, $z], [-$x, 0, -$z], [ $x, 0, -$z], [ 0, $z, $x], [ 0, $z, -$x], [ 0, -$z, $x], [ 0, -$z, -$x], [ $z, $x, 0], [-$z, $x, 0], [ $z, -$x, 0], [-$z, -$x, 0], ]; $t=[ [0,4,1], [0, 9, 4], [9, 5, 4], [4, 5, 8], [4, 8, 1], [8, 10, 1], [8, 3, 10], [5, 3, 8], [5, 2, 3], [2, 7, 3], [7, 10, 3], [7, 6, 10], [7, 11, 6], [11, 0, 6], [0, 1, 6], [6, 1, 10], [9, 0, 11], [9, 11, 2], [9, 2, 5], [7, 2, 11], ]; for($i=0;$i<20;$i++) { glBegin(GL_POLYGON); for($j=0;$j<3;$j++) { $use_lighting || glColor3f(0,$i/19.0,$j/2.0); glNormal3f( $v->[$t->[$i][$j]][0], $v->[$t->[$i][$j]][1], $v->[$t->[$i][$j]][2]); glVertex3f( $v->[$t->[$i][$j]][0], $v->[$t->[$i][$j]][1], $v->[$t->[$i][$j]][2]); } glEnd(); if( $use_frame){ glPushAttrib(GL_ALL_ATTRIB_BITS); glDisable(GL_LIGHTING); glColor3f(1,0,0); glBegin(GL_LINE_LOOP); for($j=0;$j<3;$j++) { glVertex3f( 1.01 * $v->[$t->[$i][$j]][0], 1.01 * $v->[$t->[$i][$j]][1], 1.01 * $v->[$t->[$i][$j]][2]); } glEnd(); glPopAttrib(); } } } sub myinit{ # Initialize material property, light source, lighting model, # and depth buffer. @mat_specular = ( 1.0, 1.0, 0.0, 1.0 ); @mat_diffuse = ( 0.0, 1.0, 1.0, 1.0 ); @light_position = ( 1.0, 1.0, 1.0, 0.0 ); glMaterialfv(GL_FRONT, GL_DIFFUSE, pack("f4",@mat_diffuse)); glMaterialfv(GL_FRONT, GL_SPECULAR, pack("f4",@mat_specular)); glMaterialf(GL_FRONT, GL_SHININESS, 10); glLightfv(GL_LIGHT0, GL_POSITION, pack("f4",@light_position)); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); } sub display { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(23*sin($spin*3.14/180),1,0,0); glRotatef($spin,0,1,0); icosahedron; glPopMatrix(); glFlush(); glXSwapBuffers(); } sub myReshape { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } glpOpenWindow(width=>300,height=>300, attributes=> [GLX_DOUBLEBUFFER,GLX_RGBA, GLX_DEPTH_SIZE,16, GLX_RED_SIZE,1, GLX_GREEN_SIZE,1, GLX_BLUE_SIZE,1]); $use_lighting && myinit(); myReshape(); glEnable(GL_DEPTH_TEST); glRotatef(0.12,1,0,0); while(1){$spin+=1;display;} libopengl-perl-0.6704+dfsg.orig/examples/spaceship.nff0000644000175000017500000001302312334200655022164 0ustar gregoagregoanff version 2.00 viewpos 0.000000 0.000000 0.000000 viewdir 0.000000 0.000000 1.000000 SPACESHIP 82 -60.000000 50.000004 10.508476 -20.000000 50.000000 -9.830511 -20.000000 60.000000 -9.830509 -60.000000 60.000004 10.508476 -60.000000 50.000004 0.508473 -20.000000 50.000000 -19.830513 -20.000000 60.000000 -19.830509 -60.000000 60.000004 0.508474 20.000000 50.000000 -9.836067 60.000000 50.000004 10.491802 60.000000 60.000004 10.491802 20.000000 60.000000 -9.836065 20.000000 50.000000 -19.836069 60.000000 50.000004 0.491801 60.000000 60.000004 0.491802 20.000000 60.000000 -19.836065 -70.000000 20.000000 10.000005 -60.000000 20.000000 10.000005 -60.000000 120.000000 9.999995 -70.000000 120.000000 9.999995 -70.000000 20.000000 0.000005 -60.000000 20.000000 0.000005 -60.000000 120.000000 -0.000005 -70.000000 120.000000 -0.000005 60.000000 20.000000 10.000005 70.000000 20.000000 10.000005 70.000000 120.000000 9.999995 60.000000 120.000000 9.999995 60.000000 20.000000 0.000005 70.000000 20.000000 0.000005 70.000000 120.000000 -0.000005 60.000000 120.000000 -0.000005 -20.000000 0.000001 -9.999996 20.000000 0.000001 -9.999996 20.000000 90.000000 -10.000004 -20.000000 90.000000 -10.000004 -20.000000 -0.000001 -39.999996 20.000000 -0.000001 -39.999996 20.000000 90.000000 -40.000004 -20.000000 90.000000 -40.000004 0.000000 -50.000000 0.000005 0.000000 -50.000000 10.000005 -15.450733 -2.447136 0.000001 -15.450733 -2.447135 10.000001 -29.389170 -9.549080 0.000001 -29.389170 -9.549080 10.000001 -40.450787 -20.610649 0.000002 -40.450787 -20.610649 10.000002 -47.552795 -34.549053 0.000004 -47.552795 -34.549053 10.000004 -50.000000 -49.999901 0.000005 -50.000000 -49.999901 10.000005 -47.552853 -65.450768 0.000006 -47.552853 -65.450768 10.000006 -40.450897 -79.389198 0.000007 -40.450897 -79.389198 10.000008 -29.389326 -90.450806 0.000008 -29.389326 -90.450806 10.000009 -15.450917 -97.552803 0.000008 -15.450917 -97.552803 10.000009 -0.000065 -100.000000 0.000010 -0.000065 -100.000000 10.000010 15.450794 -97.552841 0.000008 15.450794 -97.552841 10.000009 29.389221 -90.450882 0.000008 29.389221 -90.450882 10.000009 40.450825 -79.389297 0.000007 40.450825 -79.389297 10.000008 47.552814 -65.450890 0.000006 47.552814 -65.450890 10.000006 50.000000 -50.000031 0.000005 50.000000 -50.000031 10.000005 47.552834 -34.549175 0.000004 47.552834 -34.549175 10.000004 40.450863 -20.610752 0.000002 40.450863 -20.610752 10.000002 29.389273 -9.549156 0.000001 29.389273 -9.549156 10.000001 0.000001 0.000000 0.000000 15.450856 -2.447175 0.000001 15.450856 -2.447174 10.000001 0.000001 0.000000 10.000000 140 3 81 80 79 0xf00 both 3 81 79 78 0xf00 both 3 80 77 76 0xf00 both 3 80 76 79 0xf00 both 3 77 75 74 0xf00 both 3 77 74 76 0xf00 both 3 75 73 72 0xf00 both 3 75 72 74 0xf00 both 3 73 71 70 0xf00 both 3 73 70 72 0xf00 both 3 71 69 68 0xf00 both 3 71 68 70 0xf00 both 3 69 67 66 0xf00 both 3 69 66 68 0xf00 both 3 67 65 64 0xf00 both 3 67 64 66 0xf00 both 3 65 63 62 0xf00 both 3 65 62 64 0xf00 both 3 63 61 60 0xf00 both 3 63 60 62 0xf00 both 3 61 59 58 0xf00 both 3 61 58 60 0xf00 both 3 59 57 56 0xf00 both 3 59 56 58 0xf00 both 3 57 55 54 0xf00 both 3 57 54 56 0xf00 both 3 55 53 52 0xf00 both 3 55 52 54 0xf00 both 3 53 51 50 0xf00 both 3 53 50 52 0xf00 both 3 51 49 48 0xf00 both 3 51 48 50 0xf00 both 3 49 47 46 0xf00 both 3 49 46 48 0xf00 both 3 47 45 44 0xf00 both 3 47 44 46 0xf00 both 3 45 43 42 0xf00 both 3 45 42 44 0xf00 both 3 43 81 78 0xf00 both 3 43 78 42 0xf00 both 3 80 81 41 0xf00 both 3 77 80 41 0xf00 both 3 75 77 41 0xf00 both 3 73 75 41 0xf00 both 3 71 73 41 0xf00 both 3 69 71 41 0xf00 both 3 67 69 41 0xf00 both 3 65 67 41 0xf00 both 3 63 65 41 0xf00 both 3 61 63 41 0xf00 both 3 59 61 41 0xf00 both 3 57 59 41 0xf00 both 3 55 57 41 0xf00 both 3 53 55 41 0xf00 both 3 51 53 41 0xf00 both 3 49 51 41 0xf00 both 3 47 49 41 0xf00 both 3 45 47 41 0xf00 both 3 43 45 41 0xf00 both 3 81 43 41 0xf00 both 3 78 79 40 0xf00 both 3 79 76 40 0xf00 both 3 76 74 40 0xf00 both 3 74 72 40 0xf00 both 3 72 70 40 0xf00 both 3 70 68 40 0xf00 both 3 68 66 40 0xf00 both 3 66 64 40 0xf00 both 3 64 62 40 0xf00 both 3 62 60 40 0xf00 both 3 60 58 40 0xf00 both 3 58 56 40 0xf00 both 3 56 54 40 0xf00 both 3 54 52 40 0xf00 both 3 52 50 40 0xf00 both 3 50 48 40 0xf00 both 3 48 46 40 0xf00 both 3 46 44 40 0xf00 both 3 44 42 40 0xf00 both 3 42 78 40 0xf00 both 3 39 38 37 0xff0 both 3 39 37 36 0xff0 both 3 39 35 34 0xff0 both 3 39 34 38 0xff0 both 3 38 34 33 0xff0 both 3 38 33 37 0xff0 both 3 37 33 32 0xff0 both 3 37 32 36 0xff0 both 3 36 32 35 0xff0 both 3 36 35 39 0xff0 both 3 35 32 33 0xff0 both 3 35 33 34 0xff0 both 3 31 30 29 0x0f0 both 3 31 29 28 0x0f0 both 3 31 27 26 0x0f0 both 3 31 26 30 0x0f0 both 3 30 26 25 0x0f0 both 3 30 25 29 0x0f0 both 3 29 25 24 0x0f0 both 3 29 24 28 0x0f0 both 3 28 24 27 0x0f0 both 3 28 27 31 0x0f0 both 3 27 24 25 0x0f0 both 3 27 25 26 0x0f0 both 3 23 22 21 0x0ff both 3 23 21 20 0x0ff both 3 23 19 18 0x0ff both 3 23 18 22 0x0ff both 3 22 18 17 0x0ff both 3 22 17 21 0x0ff both 3 21 17 16 0x0ff both 3 21 16 20 0x0ff both 3 20 16 19 0x0ff both 3 20 19 23 0x0ff both 3 19 16 17 0x0ff both 3 19 17 18 0x0ff both 3 15 14 13 0x00f both 3 15 13 12 0x00f both 3 15 11 10 0x00f both 3 15 10 14 0x00f both 3 14 10 9 0x00f both 3 14 9 13 0x00f both 3 13 9 8 0x00f both 3 13 8 12 0x00f both 3 12 8 11 0x00f both 3 12 11 15 0x00f both 3 11 8 9 0x00f both 3 11 9 10 0x00f both 3 7 6 5 0xf0f both 3 7 5 4 0xf0f both 3 7 3 2 0xf0f both 3 7 2 6 0xf0f both 3 6 2 1 0xf0f both 3 6 1 5 0xf0f both 3 5 1 0 0xf0f both 3 5 0 4 0xf0f both 3 4 0 3 0xf0f both 3 4 3 7 0xf0f both 3 3 0 1 0xf0f both 3 3 1 2 0xf0f both libopengl-perl-0.6704+dfsg.orig/examples/try.pl0000644000175000017500000000111212334200655020661 0ustar gregoagregoa#!/usr/local/bin/perl # # simple example that opens up a window then goes into interpretor mode # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; glpOpenWindow; glClearColor(0,0,1,1); glClear(GL_COLOR_BUFFER_BIT); glpFlush(); print "OpenGL window open, perl interpretor ready!\n"; print "Try entering some GL commands to draw stuff:\n"; while(){ $e=eval; print "EVAL: $e\n"; print "ERROR: $@" if $@; } libopengl-perl-0.6704+dfsg.orig/examples/planets.pl0000644000175000017500000001336512334200655021526 0ustar gregoagregoa#!/usr/bin/perl -w use strict; use Time::HiRes qw(sleep); use OpenGL ':old', ':glutfunctions', ':glutconstants'; my $where = (@ARGV ? 'far away' : 'near Earth'); print "Camera position: $where.\n"; print "Give arguments to position camera far away.\n"; my $field_of_view = (@ARGV ? 20 : 100); # Degrees my $minviewdist = 0.1; my $maxviewdist = 1000; my $mercury = 0; my $venus = 0; my $earth = 0; my $earthMoon = 0; my $earthspin = 0; my $mars = 0; my $jupiter = 230; # Make them visible my $jups1 = 0; my $jups2 = 0; my $jups3 = 0; my $jups4 = 0; my $saturn = 250; # Make them visible sub resizeHandler { # Not auto yet my ($wind_w, $wind_h) = @_; glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( $field_of_view, $wind_w/$wind_h, $minviewdist, $maxviewdist ); glMatrixMode( GL_MODELVIEW ); } sub display { # clear the canvas glClearColor(0,0,0,1); glDrawBuffer(GL_FRONT_AND_BACK); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glDrawBuffer(GL_BACK); glLoadIdentity(); if (@ARGV) { # move the squares back a bit glTranslatef( 0, 0, -500 ); # and add a tilt glRotatef(-70, 1,0,0); } else { # place viewpoint on the surface of the planet glRotatef(30, 1,0,0); glTranslatef( 0, -5, 2 ); glRotatef(-$earthspin, 0,1,0); glTranslatef( 0, 0, -60 ); glRotatef(-90, 1,0,0); glRotatef(90-$earth, 0,0,1); } # Sun light glLightfv(GL_LIGHT0, GL_POSITION, pack "f4", 0, 0, 0, 1); #glLightfv(GL_LIGHT1, GL_DIFFUSE, pack "f4", 1, 1, 1, 1); #glLightfv(GL_LIGHT0, GL_DIFFUSE, pack "f4", 0, 0, 0, 1); # Same for specular? # Moon light glPushMatrix(); # Position the moon glRotatef($earth,0,0,1); glTranslatef( -60, 0, 0 ); glRotatef($earthMoon,0,0,1); glTranslatef( -10, 0, 0 ); glLightfv(GL_LIGHT1, GL_POSITION, pack "f4", 0, 0, 0, 1); my $moon_bright = 0.1*(1 + cos($earthMoon*3.1415926/180)); glLightfv(GL_LIGHT1, GL_AMBIENT, pack "f4", $moon_bright, $moon_bright, $moon_bright, 1); glPopMatrix(); # Sun # glColor3f(1,1,1); glMaterialfv( GL_FRONT, GL_EMISSION, pack 'f4', 1, 1, 0, 1); glutSolidSphere(20,10,10); glMaterialfv( GL_FRONT, GL_EMISSION, pack 'f4', 0, 0, 0, 1); glPushMatrix(); # Position the mercury glRotatef($mercury,0,0,1); glTranslatef( -30, 0, 0 ); glColor3f(0.6, 0.6, 0.6); glutSolidSphere(2,10,10); glPopMatrix(); glPushMatrix(); # Position the venus glRotatef($venus,0,0,1); glTranslatef( -40, 0, 0 ); glColor3f(0,1,0); glutSolidSphere(5,10,10); glPopMatrix(); glPushMatrix(); # Position the earth glRotatef($earth,0,0,1); glTranslatef( -60, 0, 0 ); glColor3f(0,0,1); glPushMatrix(); # Rotate the planet earth glRotatef($earthspin,0,0,1); glEnable( GL_LIGHT1 ); glutSolidSphere(5,10,10); glDisable( GL_LIGHT1 ); glPopMatrix(); # Position the earth's moon glRotatef($earthMoon,0,0,1); glTranslatef( -10, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(1,10,10); glPopMatrix(); glPushMatrix(); # Position the mars glRotatef($mars,0,0,1); glTranslatef( -80, 0, 0 ); glColor3f(1,0,0); glutSolidSphere(4,10,10); glPopMatrix(); glPushMatrix(); # Position the jupiter glRotatef($jupiter,0,0,1); glTranslatef( -120, 0, 0 ); glColor3f(0.6,0.6,0.6); glutSolidSphere(9,10,10); glPushMatrix(); # Position the jup's moon1 glRotatef($jups1,0,0,1); glTranslatef( -6, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(1,10,10); glPopMatrix(); glPushMatrix(); # Position the jup's moon2 glRotatef($jups2,0,0,1); glTranslatef( -8, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(1,10,10); glPopMatrix(); glPushMatrix(); # Position the jup's moon3 glRotatef($jups3,0,0,1); glTranslatef( -10, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(1,10,10); glPopMatrix(); glPushMatrix(); # Position the jup's moon4 glRotatef($jups4,0,0,1); glTranslatef( -12, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(1,10,10); glPopMatrix(); glPopMatrix(); glPushMatrix(); # Position the saturn glRotatef($saturn,0,0,1); glTranslatef( -150, 0, 0 ); glColor3f(0.5,0.5,0.5); glutSolidSphere(8,10,10); glRotatef(-$saturn,0,0,1); glRotatef(14, 0.707, -0.707, 0); # What is the actual tilt? glScalef(1,1,0.2); # Giving smaller values makes it white?! eval {glutSolidTorus(4.5,13,10,10)}; glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } glutInit(); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow('Planets Example'); glutDisplayFunc(\&display); glutReshapeFunc(\&resizeHandler); #glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glEnable( GL_COLOR_MATERIAL ); glLightModelfv( GL_LIGHT_MODEL_AMBIENT, pack 'f4', 0.1, 0.1, 0.1, 1); while ( sleep(0.1) ) { glutMainLoopEvent(); $mercury += 1/0.24; $mercury -= 360 if $mercury >= 360; $venus += 1/0.62; $venus -= 360 if $venus >= 360; $earthMoon += 12.36; # Relative to sun-earth line $earthMoon -= 360 if $earthMoon >= 360; $earthspin += 3.65; # 1/100 of real $earthspin -= 360 if $earthspin >= 360; $earth += 1; $earth -= 360 if $earth >= 360; $venus += 1/0.62; $venus -= 360 if $venus >= 360; $mars += 1/1.88; # Wrong $mars -= 360 if $mars >= 360; $jupiter += 1/11.86; $jupiter -= 360 if $jupiter >= 360; $jups1 += -1/11.86 + 365.2/1.77; $jups1 -= 360 if $jups1 >= 360; $jups2 += -1/11.86 + 365.2/3.55; $jups2 -= 360 if $jups2 >= 360; $jups3 += -1/11.86 + 365.2/7.16; $jups3 -= 360 if $jups3 >= 360; $jups4 += -1/11.86 + 365.2/16.69; $jups4 -= 360 if $jups4 >= 360; $saturn += 1/29.46; $saturn -= 360 if $saturn >= 360; glutPostRedisplay(); } libopengl-perl-0.6704+dfsg.orig/examples/glu_test.pl0000644000175000017500000000273312334200655021703 0ustar gregoagregoa#!/usr/local/bin/perl # # glu_test # # same as cube but uses a glu function to test # that glu stuff is working # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; sub wirecube{ # adapted from libaux local($s) = @_; local(@x,@y,@z,@f); local($i,$j,$k); $s = $s/2.0; @x=(-$s,-$s,-$s,-$s,$s,$s,$s,$s); @y=(-$s,-$s,$s,$s,-$s,-$s,$s,$s); @z=(-$s,$s,$s,-$s,-$s,$s,$s,-$s); @f=( 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3, ); for($i=0;$i<6;$i++){ glBegin(GL_LINE_LOOP); for($j=0;$j<4;$j++){ $k=$f[$i*4+$j]; glVertex3d($x[$k],$y[$k],$z[$k]); } glEnd(); } } sub display{ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glLoadIdentity(); # clear the matrix glTranslatef(0.0, 0.0, -5.0); # viewing transformation glScalef(1.0, 2.0, 1.0); # modeling transformation wirecube(1.0); glpFlush(); } sub myReshape { # glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); # using gluPerspective instead of glFrustum to test glu library #glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); gluPerspective(30.0,1.0,1.0,30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity (); } glpOpenWindow; glShadeModel(GL_FLAT); myReshape(); display(); glpMainLoop; libopengl-perl-0.6704+dfsg.orig/examples/tk_demo.pl0000644000175000017500000000424212334200655021474 0ustar gregoagregoa#!/usr/local/bin/perl # # This is an example of combining the tk module and opengl # You have to have TK installed for this to work. # this program opens a window and when you hit a key in # the window a callback that does some opengl stuff is # executed. # Yes, this is a totally lame program, but its a proof # of concept sort of thing. # We'll get something better next time :-) # use lib ('blib'); use strict; use Tk; use OpenGL; my $top = MainWindow->new(); my $kid; sub CreateKid { my $par = shift; my $id = $par->WindowId; print " window id: $id -> ", (sprintf '%#x', $$id),"\n"; my ($w, $h) = ($par->Width, $par->Height); my ($xbord, $ybord) = (int($w/8), int($h/8)); $kid = glpOpenWindow( x => $xbord, y => $ybord, width=> ($w-2*$xbord), height=> ($h-2*$ybord),parent=>$$id); } sub ResetKid { return unless $kid; my $par = shift; my $w = $par->Width; my $h = $par->Height; my ($xbord, $ybord) = (int($w/8), int($h/8)); $w = $w-2*$xbord; $h = $h-2*$ybord; glpMoveResizeWindow($xbord,$ybord,$w,$h); glViewport(0,0,$w,$h); print "viewport $w x $h, origin $xbord, $ybord\n"; DrawKid(); } my $pending = 0; sub DrawKid { return unless $kid; return if $pending++; $top->DoWhenIdle(\&DrawKid_do); } sub DrawKid_do { return unless $kid; $pending = 0; print "Drawing...\n"; glClearColor(0,0,1,1); glClear(GL_COLOR_BUFFER_BIT); glOrtho(-1,1,-1,1,-1,1); glColor3f(1,0,0); glBegin(GL_POLYGON); glVertex2f(-0.5,-0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5,-0.5); glEnd(); glFlush(); } sub DrawKid1 { return unless $kid; print "Visibility change\n"; DrawKid; } sub DrawKid2 { return unless $kid; print "Expose change\n"; DrawKid; } sub DoKey { my $w = shift; return if $kid; CreateKid $w; DrawKid; } sub DoMouse { shift; my ($b,$p) = (shift,shift); print "mouse-$b $p\n"; } $top->bind("",\&DoKey); $top->bind("",[\&DoMouse, Ev('b'), Ev('@')]); $top->bind("",[$top, 'destroy']); $top->bind("",[$top, 'destroy']); $top->bind("",\&ResetKid); $top->bind("",\&DrawKid1); $top->bind("",\&DrawKid2); Tk::MainLoop(); libopengl-perl-0.6704+dfsg.orig/examples/fun.pl0000644000175000017500000002170012334200655020640 0ustar gregoagregoa#!/usr/local/bin/perl # # object oriented programming example # # Example developed entirely by Stan Melax (stan@arc.ab.ca). # I wanted to try some object-oriented programming in perl, # but I wanted to do something more real than just a "foo-bar" example :-) # # I developed the smooth "chaseing" behavior used by the spaceship # years ago in grad school for a VR assignment. When Randy Pausch # (a VR God from U of Virginia) visited the U of Alberta, he was # impressed and took a copy of the algorithm. # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; sub abs{ (($_[0]>0)?$_[0]:-$_[0]); } $cow=1; $plane=2; $floor=3; $enterprise=4; sub initlists{ glNewList($cow,GL_COMPILE); glColor3f(1.0,0.0,0.0); glBegin(GL_POLYGON); glNormal3f(-1.0, 0.0, 0.0); glVertex3f(-1.0 , -1.0, -1.0); glVertex3f(-1.0 , 1.0, -1.0); glVertex3f(-1.0 , 1.0, 1.0); glVertex3f(-1.0 , -1.0, 1.0); glEnd(); glColor3f(0.0,1.0,0.0); glBegin(GL_POLYGON); glNormal3f( 1.0, 0.0, 0.0); glVertex3f( 1.0 , -1.0, -1.0); glVertex3f( 1.0 , 1.0, -1.0); glVertex3f( 1.0 , 1.0, 1.0); glVertex3f( 1.0 , -1.0, 1.0); glEnd(); glEndList(); glNewList($plane,GL_COMPILE); glColor3f(0,0,0); glBegin(GL_POLYGON); glVertex3f( 1 , 2, 1.0); glVertex3f( 2 , 1, 1.0); glVertex3f( 2 , -1, 1.0); glVertex3f( 1 , -2, 1.0); glVertex3f( -1 , -2, 1.0); glVertex3f( -2 , -1, 1.0); glVertex3f( -2 , 1, 1.0); glVertex3f( -1 , 2, 1.0); glEnd(); glColor3f(1.0,0.0,1.0); glBegin(GL_POLYGON); glVertex3f( 1 , 2, 3.0); glVertex3f( 2 , 1, 3.0); glVertex3f( 2 , -1, 3.0); glVertex3f( 1 , -2, 3.0); glVertex3f( -1 , -2, 3.0); glVertex3f( -2 , -1, 3.0); glVertex3f( -2 , 1, 3.0); glVertex3f( -1 , 2, 3.0); glEnd(); glEndList(); glNewList($floor,GL_COMPILE); for($i=0;$i<10;$i++) { for($j=0;$j<10;$j++) { $b = 1-sqrt(($i-4.5)*($i-4.5)+($j-4.5)*($j-4.5))/6.4; glColor3f($b*0.5,(($i%2) ^ ($j%2) )?0.7*$b : 0 ,0); glBegin(GL_POLYGON); glVertex3f( (0+$i-5)*10 , (0+$j-5) *10, 0.0); glVertex3f( (1+$i-5)*10 , (0+$j-5) *10, 0.0); glVertex3f( (1+$i-5)*10 , (1+$j-5) *10, 0.0); glVertex3f( (0+$i-5)*10 , (1+$j-5) *10, 0.0); glEnd(); } } glEndList(); } sub readnff{ my $file = 'spaceship.nff'; $file = "examples/$file" unless -r $file; open(FILE,"<$file") || die "cant open $file"; $_=""; while(!(/^82\s*$/)){$_=;} $n=82; for($i=0;$i<$n;$i++) { $_=; /(\S+)\s+(\S+)\s+(\S+)\s*$/ || die "couldn't parse file"; ($x[$i],$y[$i],$z[$i])=($1,$2,$3); } $_=; /^140/ || die "couldn't parse file"; $p=140; glNewList($enterprise,GL_COMPILE); glScalef(0.02,0.02,0.02); glRotatef(90.0,0.0,0.0,1.0); glColor3f(0.0,1.0,1.0); for($i=0;$i<$p;$i++) { glBegin(GL_POLYGON); $_=; /3\s+(\d+)\s+(\d+)\s+(\d+)\s/ || die "couldn't parse file"; glVertex3f($x[$1],$y[$1],$z[$1]); glVertex3f($x[$2],$y[$2],$z[$2]); glVertex3f($x[$3],$y[$3],$z[$3]); glEnd(); } close(FILE); glEndList(); $enterprise; } package A; use OpenGL; %defaults = ( 'name' => 'unnamed', 'x' => 0 , 'y' => 0 , 'z' => 0 , 'dl'=> $main::plane, ); sub initialize { my $self=shift; local %v = @_; foreach $k (keys(%v)) { $self->{$k} = $v{$k}; } $self; } sub print{ my $self=shift; print "\tObject '",$self->{'name'},"' is a '",ref($self),"'\n"; foreach $k (sort keys(%$self)) { print("\t\t$k\t$self->{$k}\n") if($k cmp 'name'); } print "\n"; } sub new { my $type = shift; my $self = {}; initialize($self,%defaults); initialize($self,@_); push(@objects,$self); bless $self; } sub move { } sub draw { my $self=shift; glPushMatrix(); glTranslatef($self->{'x'},$self->{'y'},$self->{'z'}); glCallList($self->{'dl'}); glPopMatrix (); } #------------------------------------------ package B; @ISA=qw(A); %defaults = ( 'dx',0, 'dy',0, 'dz',0, ); sub new { my $type = shift; my $self = new A(%defaults,@_); push(@objects,$self); bless $self; } $WORLD_BOUNDARY =(20.0); $WORLD_CEILING =(10.0); $WORLD_FLOOR =(0.0); sub move { my $self = shift; local($x,$y,$z,$dx,$dy,$dz)= (\$self->{'x'}, \$self->{'y'}, \$self->{'z'}, \$self->{'dx'},\$self->{'dy'},\$self->{'dz'}); $$x+=$$dx; $$y+=$$dy; $$z+=$$dz; # Bounce off Walls ($$x> $WORLD_BOUNDARY) && ($$dx= -abs($$dx)); ($$x< -$WORLD_BOUNDARY) && ($$dx= abs($$dx)); ($$y> $WORLD_BOUNDARY) && ($$dy= -abs($$dy)); ($$y< -$WORLD_BOUNDARY) && ($$dy= abs($$dy)); ($$z> $WORLD_CEILING ) && ($$dz= -abs($$dz)); ($$z< $WORLD_FLOOR ) && ($$dz= abs($$dz)); } #------------------------------------------ package T; @ISA=qw(B); %defaults = ( 'name','target', 'wait',0, ); $damping = 0.99; sub new { my $type = shift; my $self = new B(%defaults,@_); push(@objects,$self); bless $self; } sub move { my $self = shift; $self->{'dx'} *= $damping; $self->{'dy'} *= $damping; $self->{'wait'}-- if($self->{'wait'}>0) ; $self->B::move; } sub takeoff { my $self = shift; #print "takeoff\n"; return if($self->{'wait'}>0) ; $self->{'dx'} = rand(2)-1.0; $self->{'dy'} = rand(2)-1.0; $self->{'wait'}=10; } #------------------------------------------ package C; @ISA=qw(B); use OpenGL; %defaults = ( 'target' => 0, 'h' => 0, 'dh' => 0, ); sub new { my $type = shift; my $self = new B(%defaults,@_); push(@objects,$self); bless $self; } $DAMPING = (0.98); $ACCELLERATION = (0.01); $BANK_DAMPING = (0.8); sub move{ my $self = shift; local($x,$y,$z,$dx,$dy,$dz,$h,$dh)= (\$self->{'x'}, \$self->{'y'}, \$self->{'z'}, \$self->{'dx'},\$self->{'dy'},\$self->{'dz'}, \$self->{'h'},\$self->{'dh'}); local $t = $self->{'target'}; ($t) || die "No Target\n"; local ($tx,$ty) = ($t->{'x'},$t->{'y'}); local $theading = atan2($ty-$$y,$tx-$$x); local $speed = sqrt($$dx*$$dx+$$dy*$$dy); $$h = ($$dy==0.0&&$$dx==0.0)? $$h : atan2($$dy,$$dx); $tdheading = $theading-$$h; while($tdheading > 3.14){ $tdheading -= 2*3.14}; while($tdheading <-3.14){ $tdheading += 2*3.14}; $$dh*= $BANK_DAMPING; $$dh += $tdheading* 0.01; $$h += $$dh; if($tdheading <3.14/6 && $tdheading>-3.14/6 ) { $speed += $ACCELLERATION; } elsif ($tdheading <3.14/3 && $tdheading>-3.14/3 ) { $speed += $ACCELLERATION/4; } $$dx = cos($$h)*$speed; $$dy = sin($$h)*$speed; #if( (t%10==0) && tdheading <3.14/6 && tdheading>-3.14/6 ){ # # fire(); #} # damping $$dx *= $DAMPING; $$dy *= $DAMPING; $$dz *= $DAMPING; #$self->B::move; $$x+=$$dx; $$y+=$$dy; $$z+=$$dz; $t->takeoff if($$x > $tx-5 && $$x < $tx+5 && $$y > $ty-5 && $$y < $ty+5 ); } sub draw { my $self=shift; glPushMatrix(); glTranslatef($self->{'x'},$self->{'y'},$self->{'z'}); glRotatef($self->{'h'}*180/3.14, 0.0,0.0,1.0); glRotatef(-60.0 * $self->{'dh'}/(1.0/(1.0-0.8)*0.01*3.14), 1.0, 0.0, 0.0); glCallList($self->{'dl'}); glPopMatrix (); } #------------------------------------------ package main; glpOpenWindow(width=>400,height=>400, mask => StructureNotifyMask|KeyPressMask, attributes=>[GLX_RGBA,GLX_DOUBLEBUFFER]); glShadeModel (GL_FLAT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 500.0); glMatrixMode(GL_MODELVIEW); initlists; glColor3f(1,0,0); glClearColor(0,0,0.3,1); new A('dl'=>$floor,'name'=>'the happy floor'); #$a = new A( 'y' => 0.2, 'name' => 'useless dude'); $b = new T( 'x' => 10, 'dx'=> 0.4, 'name' => 'bad dude'); readnff; $c = new C('z' => 5,'dl'=>$enterprise, 'x' => -10, 'target'=>$b, 'name' => 'killer'); $w=100.0;$t= time;$p= $t-1; $rin=$win=$ein=''; $spf = 1; $spin=0; $cb{&ConfigureNotify} = sub { local($e,$w,$h)=@_;glViewport(0,0,$w,$h); # print "viewport $w,$h\n"; }; $cb{&KeyPress} = sub { # print "@_[1] ",ord(@_[1])," keypress @_\n"; local($ss); &$ss(@_[1]) if ($ss=$kcb{@_[1]}); }; $kcb{'q'} = $kcb{'Q'} = $kcb{"\033"} = sub{ print "Good-Bye\n"; exit 0;}; sub setspeed{$C::ACCELLERATION = $_[0]/100;} foreach $i (0..9){ $kcb{"$i"}=\&setspeed; } $is_pm = OpenGL::_have_glp && ! OpenGL::_have_glx; while(1){ $spf = ($spf*$w + $t-$p) /($w+1.0); $fps = ($spf)?1.0/$spf:0; $p=$t; $t= time; while($p=XPending) { @e=&glpXNextEvent; &$s(@e) if($s=$cb{$e[0]}); } vec($rin,0,1) = 1; if(!$is_pm && select($rout=$rin,undef,undef,0)) { $_=<> || die "End Of File"; eval; } foreach $x (@A::objects) { $x->move; #$x->print; } glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity (); # set the viewpoint glTranslatef (0.0, 0.0, -30.0); glRotatef(-45.0, 1.0,0.0,0.0); $spin += 1; glRotatef($spin, 0.0,0.0,1.0); foreach $x (@A::objects) { $x->draw; } glFlush(); glXSwapBuffers; } __END__ libopengl-perl-0.6704+dfsg.orig/examples/plane.pl0000644000175000017500000000617212334200655021155 0ustar gregoagregoa#!/usr/local/bin/perl # # plane # This program demonstrates the use of local versus # infinite lighting on a flat plane. # Adapted from book "OpenGL Programming Guide" # BEGIN{ unshift(@INC,"../blib"); } # in case OpenGL is built but not installed BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; # Initialize material property, light source, and lighting model. sub myinit{ # mat_specular and mat_shininess are NOT default values # Its important not to make a mistake on the packing # there's no type checking for C pointer arguments $mat_ambient = pack("f4", 0.0, 0.0, 0.0, 1.0 ); $mat_diffuse = pack("f4", 0.4, 0.4, 0.4, 1.0 ); $mat_specular = pack("f4", 1.0, 1.0, 1.0, 1.0 ); $mat_shininess = 15.0 ; $light_ambient = pack("f4", 0.0, 0.0, 0.0, 1.0 ); $light_diffuse = pack("f4", 1.0, 1.0, 1.0, 1.0 ); $light_specular = pack("f4", 1.0, 1.0, 1.0, 1.0 ); $lmodel_ambient = pack("f4", 0.2, 0.2, 0.2, 1.0 ); glMaterialfv(GL_FRONT, GL_AMBIENT, $mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, $mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, $mat_specular); glMaterialf(GL_FRONT, GL_SHININESS, $mat_shininess); glLightfv(GL_LIGHT0, GL_AMBIENT, $light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, $light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, $light_specular); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, $lmodel_ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); } sub drawPlane { glBegin (GL_QUADS); glNormal3f (0.0, 0.0, 1.0); glVertex3f (-1.0, -1.0, 0.0); glVertex3f (0.0, -1.0, 0.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (-1.0, 0.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, -1.0, 0.0); glVertex3f (1.0, -1.0, 0.0); glVertex3f (1.0, 0.0, 0.0); glVertex3f (0.0, 0.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (1.0, 0.0, 0.0); glVertex3f (1.0, 1.0, 0.0); glVertex3f (0.0, 1.0, 0.0); glNormal3f (0.0, 0.0, 1.0); glVertex3f (0.0, 0.0, 0.0); glVertex3f (0.0, 1.0, 0.0); glVertex3f (-1.0, 1.0, 0.0); glVertex3f (-1.0, 0.0, 0.0); glEnd(); } sub display { $infinite_light = pack("f4", 1.0, 1.0, 1.0, 0.0 ); $local_light = pack("f4", 1.0, 1.0, 1.0, 1.0 ); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); glTranslatef (-1.5, 0.0, 0.0); glLightfv (GL_LIGHT0, GL_POSITION, $infinite_light); drawPlane (); glPopMatrix (); glPushMatrix (); glTranslatef (1.5, 0.0, 0.0); glLightfv (GL_LIGHT0, GL_POSITION, $local_light); drawPlane (); glPopMatrix (); glpFlush (); } sub myReshape{ # glViewport (0, 0, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (-3.0, 3.0, -3.0, 3.0, -10.0, 10.0); glMatrixMode (GL_MODELVIEW); } # use optional 3rd argument to glpOpenWindow to indicate # what is needed for the visual just rgb (no double buffer). glpOpenWindow; myinit(); myReshape; display; glpMainLoop; libopengl-perl-0.6704+dfsg.orig/examples/glxgears.pl0000755000175000017500000002033112334200655021666 0ustar gregoagregoa#!/usr/bin/perl # # Ported by: Brian Medley # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # use strict; use warnings; use OpenGL qw/ :all /; use OpenGL::Config; use Math::Trig; my ($gear1, $gear2, $gear3); my $angle = 0; my $view_rotx = 20.0; my $view_roty = 30.0; my $view_rotz = 0.0; # Window and texture IDs, window width and height. my $Window_ID; my $Window_Width = 640; my $Window_Height = 480; use constant PROGRAM_TITLE => "glxgears.pl"; use constant M_PI => 3.14159265; # Inits OpenGL. Calls our own init function, then passes control onto OpenGL. MAIN: { glutInit(); print("CTRL-C to quit\n"); # To see OpenGL drawing, take out the GLUT_DOUBLE request. glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA); # glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA); # skip these MODE checks on win32, they don't work if ($^O ne 'MSWin32' and $OpenGL::Config->{DEFINE} !~ /-DHAVE_W32API/) { if (not glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { warn "glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA) not possible"; warn "...trying without GLUT_ALPHA"; # try without GLUT_ALPHA glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); if (not glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) { warn "glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) not possible, exiting quietly"; exit 0; } } } glutInitWindowSize($Window_Width, $Window_Height); $Window_ID = glutCreateWindow( PROGRAM_TITLE ); # Register the callback function to do the drawing. glutDisplayFunc(\&draw); # If there's nothing to do, draw. glutIdleFunc(\&draw); # It's a good idea to know when our window's resized. glutReshapeFunc(\&reshape); # OK, OpenGL's ready to go. Let's call our own init function. ourInit($Window_Width, $Window_Height); glutMainLoop(); exit(0); } sub ourInit { my ($Width, $Height) = @_; my @pos = ( 5.0, 5.0, 10.0, 0.0 ); my @red = ( 0.8, 0.1, 0.0, 1.0 ); my @green = ( 0.0, 0.8, 0.2, 1.0 ); my @blue = ( 0.2, 0.2, 1.0, 1.0 ); glLightfv_p(GL_LIGHT0, GL_POSITION, @pos); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); $gear1 = glGenLists(1); glNewList($gear1, GL_COMPILE); glMaterialfv_s(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, pack("f4", @red)); gear(1.0, 4.0, 1.0, 20, 0.7); glEndList(); $gear2 = glGenLists(1); glNewList($gear2, GL_COMPILE); glMaterialfv_s(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, pack("f4", @green)); gear(0.5, 2.0, 2.0, 10, 0.7); glEndList(); $gear3 = glGenLists(1); glNewList($gear3, GL_COMPILE); glMaterialfv_s(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, pack("f4", @blue)); gear(1.3, 2.0, 0.5, 10, 0.7); glEndList(); glEnable(GL_NORMALIZE); reshape($Width, $Height); } sub gear { my ($inner_radius, $outer_radius, $width, $teeth, $tooth_depth) = @_; my $i; my ($r0, $r1, $r2); my ($angle, $da); my ($u, $v, $len); $r0 = $inner_radius; $r1 = $outer_radius - $tooth_depth / 2.0; $r2 = $outer_radius + $tooth_depth / 2.0; $da = 2.0 * M_PI / $teeth / 4.0; glShadeModel(GL_FLAT); glNormal3f(0.0, 0.0, 1.0); # /* draw front face */ glBegin(GL_QUAD_STRIP); for ($i = 0; $i <= $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glVertex3f($r0 * cos($angle), $r0 * sin($angle), $width * 0.5); glVertex3f($r1 * cos($angle), $r1 * sin($angle), $width * 0.5); if ($i < $teeth) { glVertex3f($r0 * cos($angle), $r0 * sin($angle), $width * 0.5); glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), $width * 0.5); } } glEnd(); # /* draw front sides of teeth */ glBegin(GL_QUADS); $da = 2.0 * M_PI / $teeth / 4.0; for ($i = 0; $i < $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glVertex3f($r1 * cos($angle), $r1 * sin($angle), $width * 0.5); glVertex3f($r2 * cos($angle + $da), $r2 * sin($angle + $da), $width * 0.5); glVertex3f($r2 * cos($angle + 2 * $da), $r2 * sin($angle + 2 * $da), $width * 0.5); glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), $width * 0.5); } glEnd(); glNormal3f(0.0, 0.0, -1.0); # /* draw back face */ glBegin(GL_QUAD_STRIP); for ($i = 0; $i <= $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glVertex3f($r1 * cos($angle), $r1 * sin($angle), -$width * 0.5); glVertex3f($r0 * cos($angle), $r0 * sin($angle), -$width * 0.5); if ($i < $teeth) { glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), -$width * 0.5); glVertex3f($r0 * cos($angle), $r0 * sin($angle), -$width * 0.5); } } glEnd(); # /* draw back sides of teeth */ glBegin(GL_QUADS); $da = 2.0 * M_PI / $teeth / 4.0; for ($i = 0; $i < $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), -$width * 0.5); glVertex3f($r2 * cos($angle + 2 * $da), $r2 * sin($angle + 2 * $da), -$width * 0.5); glVertex3f($r2 * cos($angle + $da), $r2 * sin($angle + $da), -$width * 0.5); glVertex3f($r1 * cos($angle), $r1 * sin($angle), -$width * 0.5); } glEnd(); # /* draw outward faces of teeth */ glBegin(GL_QUAD_STRIP); for ($i = 0; $i < $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glVertex3f($r1 * cos($angle), $r1 * sin($angle), $width * 0.5); glVertex3f($r1 * cos($angle), $r1 * sin($angle), -$width * 0.5); $u = $r2 * cos($angle + $da) - $r1 * cos($angle); $v = $r2 * sin($angle + $da) - $r1 * sin($angle); $len = sqrt($u * $u + $v * $v); $u /= $len; $v /= $len; glNormal3f($v, -$u, 0.0); glVertex3f($r2 * cos($angle + $da), $r2 * sin($angle + $da), $width * 0.5); glVertex3f($r2 * cos($angle + $da), $r2 * sin($angle + $da), -$width * 0.5); glNormal3f(cos($angle), sin($angle), 0.0); glVertex3f($r2 * cos($angle + 2 * $da), $r2 * sin($angle + 2 * $da), $width * 0.5); glVertex3f($r2 * cos($angle + 2 * $da), $r2 * sin($angle + 2 * $da), -$width * 0.5); $u = $r1 * cos($angle + 3 * $da) - $r2 * cos($angle + 2 * $da); $v = $r1 * sin($angle + 3 * $da) - $r2 * sin($angle + 2 * $da); glNormal3f($v, -$u, 0.0); glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), $width * 0.5); glVertex3f($r1 * cos($angle + 3 * $da), $r1 * sin($angle + 3 * $da), -$width * 0.5); glNormal3f(cos($angle), sin($angle), 0.0); } glVertex3f($r1 * cos(0), $r1 * sin(0), $width * 0.5); glVertex3f($r1 * cos(0), $r1 * sin(0), -$width * 0.5); glEnd(); glShadeModel(GL_SMOOTH); # /* draw inside radius cylinder */ glBegin(GL_QUAD_STRIP); for ($i = 0; $i <= $teeth; $i++) { $angle = $i * 2.0 * M_PI / $teeth; glNormal3f(-cos($angle), -sin($angle), 0.0); glVertex3f($r0 * cos($angle), $r0 * sin($angle), -$width * 0.5); glVertex3f($r0 * cos($angle), $r0 * sin($angle), $width * 0.5); } glEnd(); } sub draw { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); $angle += 2.0; glPushMatrix(); glRotatef($view_rotx, 1.0, 0.0, 0.0); glRotatef($view_roty, 0.0, 1.0, 0.0); glRotatef($view_rotz, 0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(-3.0, -2.0, 0.0); glRotatef($angle, 0.0, 0.0, 1.0); glCallList($gear1); glPopMatrix(); glPushMatrix(); glTranslatef(3.1, -2.0, 0.0); glRotatef(-2.0 * $angle - 9.0, 0.0, 0.0, 1.0); glCallList($gear2); glPopMatrix(); glPushMatrix(); glTranslatef(-3.1, 4.2, 0.0); glRotatef(-2.0 * $angle - 25.0, 0.0, 0.0, 1.0); glCallList($gear3); glPopMatrix(); glPopMatrix(); # Double-buffer and done glutSwapBuffers(); } sub reshape { my ($width, $height) = @_; my $h = $height / $width; glViewport(0, 0, $width, $height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -$h, $h, 5.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -40.0); } libopengl-perl-0.6704+dfsg.orig/examples/quest.pl0000644000175000017500000002035212334200655021213 0ustar gregoagregoa#!/usr/local/bin/perl # simple maze thingy # in case module not "installed" : BEGIN{ unshift(@INC,"./blib"); unshift(@INC,"../blib"); } BEGIN{ unshift(@INC,"../blib/arch"); } # 5.002 gamma needs this BEGIN{ unshift(@INC,"../blib/lib"); } # 5.002 gamma needs this use OpenGL; @walldata = ( "****************", "* * * *", "* * *** * * *", "* * * ** * * *", "* * * * *", "********** *** *", "* * *", "* ***** *** ****", "* * * * *", "* * *** * *", "* * * * * *", "* ***** **** * *", "* * * *", "***** ******** *", "* * * * *", "* *** *** ****", "* * * *", "****************", ); $x_size = scalar(@walldata); $y_size = length($walldata[0]); ($x_size > 3 && $x_size<200) || die "bad data - number of rows $x_size "; ($y_size > 3 && $y_size<200) || die "bad data - number of columns $y_size "; for($x=0;$x<$x_size;$x++) { ($y_size==length($walldata[$x])) || die "line $x of data ",length($walldata[$x]),"/$y_size chars"; $walldata[$x] =~ s/ /0/g; $walldata[$x] =~ s/\*/1/g; my(@ww)=split(//,$walldata[$x]); #print "$wall[$x] - @ww -"; $wall[$x] = \ @ww; #print "@{$wall[$x]}\n"; } $s=1; @cx=(0,0,0,0,$s,$s,$s,$s); @cy=(0,0,$s,$s,0,0,$s,$s); @cz=(0,$s,$s,0,0,$s,$s,0); @cf=( 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 5, 6, 2, 1, 7, 4, 0, 3, ); @r=(0.5, 0, 0, 0.5, 1.0, 0); @g=(0, 0.5, 0, 0.5, 0, 1.0); @b=(0, 0, 0.5, 0, 1.0, 1.0); sub drawwalls { local($x,$y,$dl); glNewList($dl=glGenLists(1),GL_COMPILE); for($x=0;$x<$x_size;$x++) { for($y=0;$y<$y_size;$y++) { if($wall[$x]->[$y]) { for($i=0;$i<6;$i++){ if( $i==4 || $i==5 || ($i==0 && ($x==0 || !($wall[$x-1]->[$y]))) || ($i==1 && ($y==$y_size-1 || !($wall[$x]->[$y+1]))) || ($i==2 && ($x==$x_size-1 || !($wall[$x+1]->[$y]))) || ($i==3 && ($y==0 || !($wall[$x]->[$y-1]))) ) { glColor3f($r[$i],$g[$i],$b[$i]); glBegin(GL_POLYGON); #print " begin poly $x,$y $i\n"; for($j=0;$j<4;$j++){ $k=$cf[$i*4+$j]; glVertex3d($x+$cx[$k],$y+$cy[$k],$cz[$k]); } glEnd(); } } } } } glColor3f(0,1,0); glBegin(GL_POLYGON); glVertex3f(1+0.2,1+0.2,0); glVertex3f(1+0.2,1+0.8,0); glVertex3f(1+0.8,1+0.8,0); glVertex3f(1+0.8,1+0.2,0); glEnd(); glColor3f(1,0,0); glBegin(GL_POLYGON); glVertex3f($x_size-2+0.2,$y_size-2+0.2,0); glVertex3f($x_size-2+0.2,$y_size-2+0.8,0); glVertex3f($x_size-2+0.8,$y_size-2+0.8,0); glVertex3f($x_size-2+0.8,$y_size-2+0.2,0); glEnd(); glEndList(); $dl; } package A; use OpenGL; %defaults = ( 'name' => 'unnamed', 'x' => 0 , 'y' => 0 , 'z' => 0 , 'dx'=> 0, 'dy'=> 0, 'dz'=> 0, 'angle' => 0, 'dl'=> $main::shot, ); sub initialize { my $self=shift; local %v = @_; foreach $k (keys(%v)) { $self->{$k} = $v{$k}; } $self; } sub print{ my $self=shift; print "\tObject '",$self->{'name'},"' is a '",ref($self),"'\n"; foreach $k (sort keys(%$self)) { print("\t\t$k\t$self->{$k}\n") if($k cmp 'name'); } print "\n"; } sub new { my $type = shift; my $self = {}; initialize($self,%defaults); initialize($self,@_); push(@objects,$self); bless $self; } sub move { my $self=shift; local $h; ($self->{'x'},$self->{'y'},$h) = &main::forward($self->{'x'}, $self->{'y'}, $self->{'x'}+$self->{'dx'}, $self->{'y'}+$self->{'dy'},0.01); #print "bullet $self->{'x'},$self->{'y'} $self->{'dx'},$self->{'dy'} $self \n"; if($h) { local($i,$k); $k=-1; for($i=0;$i<=$#objects;$i++) { ($k=$i) if($objects[$i] == $self) ; } $k==-1 and die "hey k= $k\n"; splice(@objects,$k,1); $self->{'dl'} = 4; #print "dead\n"; } } sub draw { my $self=shift; glPushMatrix(); glTranslatef($self->{'x'},$self->{'y'},$self->{'z'}); glRotatef($self->{'angle'},0,0,1); #glCallList($self->{'dl'}); glCallList($self->{'dl'}); #glCallList($main::shot); glPopMatrix (); } package main; sub check_events { while(XPending) { my @e=&glpXNextEvent; my %s; &$s(@e) if($s=$cb{$e[0]}); } } sub intro { # give a cool intro to the thing # spin the maze around on 2 axis then # zoom in to the starting position. local($spin,$p); $spin=360*2; while($spin-=5) { check_events; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPushMatrix(); glTranslatef(0,0,-20); glRotatef($spin, 0.0, 1.0, 1.0); glTranslatef(-$x_size/2,-$y_size/2,0); glCallList($walls); glPopMatrix(); glXSwapBuffers; } for($p=0 ; $p <= 1 ; $p+=0.02) { check_events; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPushMatrix(); glRotatef(-90*$p,1,0,0); glRotatef($b*$p,0,0,1); glTranslatef(-$x*$p + -$x_size/2*(1-$p),-$y*$p+ -$y_size/2*(1-$p),-0.5*$p + -20*(1-$p)); glCallList($walls); glPopMatrix(); glXSwapBuffers; } } $x=1.5 ; $y=1.5 ; $b = 90 ; sub forward { # this routine does wall collision detection # the inputs to this routine are: # - the current location # - the desired location # - the minimum distance to wall allowed # returns # - new coordinates after move # - whether a wall caused change in target position # This is really easy with these walls that lie only on axes. local($x,$y,$px,$py, $bf) = @_; local($h)=(0); if($px>int($x)+1.0-$bf && $wall[$x+1]->[$y]) { $px = int($x)+1.0-$bf; $h++; } if($py>int($y)+1.0-$bf && $wall[$x]->[$y+1]) { $py = int($y)+1.0-$bf; $h++; } if($px[$y]) { $px = int($x)+$bf; $h++; } if($py[$y-1]) { $py = int($y)+$bf; $h++; } ($px,$py,$h); } sub abs { ($_[0] > 0) ? $_[0] : - $_[0]; } sub nav { check_events; # routine for navigating through the maze $t++; ($px,$py,$pm) = glpXQueryPointer; $rot = 0; if ($pm & Button1Mask) { $rot = -1; } if ($pm & Button3Mask) { $rot = 1; } $rot = 2*$px/$width - 1 if !$rot && ($pm & Button2Mask); $b += (( $pm & (ShiftMask)) ?9 :3) * $rot; if ($pm & Button2Mask) { $speed = ( $pm & (ShiftMask)) ?0.15 : 0.05; ($x,$y) = forward($x,$y,$x+$speed*sin($b*3.14/180), $y+$speed*cos($b*3.14/180),0.2); } if( $pm & (ControlMask)) { #print "fire\n"; local($d); $d=$b + abs($t*7%60-30)-15; new A(x=>$x,y=>$y,z=>0.5, dx => 0.08*sin(($d)*3.14/180),dy=>0.08*cos(($d)*3.14/180) , dl=>3,angle=>-($d) ); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glPushMatrix(); glRotatef(-90,1,0,0); glRotatef($b,0,0,1); glTranslatef(-$x,-$y,-0.5); glCallList($walls); # make copy of list since it may get modified during list traversal @objects = @A::objects; foreach $obj (@objects) { $obj->move; $obj->draw; } glPopMatrix(); glXSwapBuffers; } $width = 300; glpOpenWindow(attributes => [GLX_GREEN_SIZE, 1,GLX_RGBA,GLX_DOUBLEBUFFER], mask => StructureNotifyMask|KeyPressMask, width=>$width,height=>300); print < my $tess = gluNewTess(); Returns a reference that can be passed to the remaining tesselation functions. Note: this isn't the c-reference returned by the normal gluNewTess() c function, it is a struct which contains that reference as well as other members allowing callbacks to interface cleanly with the perl code. This means that if you have loaded other c-libraries that use standard opengl tessellation, you will not be able to use this perl reference directly. The POGL implementation of gluNewTess() allows for two additional parameters to be passed. The first is a boolean value indicating that default c callbacks and perl callbacks should be passed rgba color data. The second is a boolean value indicating that xyz normal data should be passed. Eventually one additional flag indicating that texture data should be passed will be added as well. my $tess = gluNewTess(); # gluTessVertex_p should be passed only x,y,z vertex data # as in gluTessVertex_p($tess, $x, $y, $z); my $tess = gluNewTess('do_colors'); # gluTessVertex_p should be passed x,y,z AND r,g,b,a vertex data # as in gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a); my $tess = gluNewTess('do_colors', 'do_normals'); # gluTessVertex_p should be passed x,y,z AND r,g,b,a AND nx,ny,nz vertex data # as in gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz); my $tess = gluNewTess(undef, 'do_normals'); # gluTessVertex_p should be passed x,y,z AND nx,ny,nz vertex data (no colors) # as in gluTessVertex_p($tess, $x, $y, $z, $nx, $ny, $nz); Any true value can be passed in place of 'do_colors' and 'do_normals' though using 'do_colors' and 'do_normals' acts as documentation. Behavior in these modes will be discussed further for functions to which they apply. =item C gluDeleteTess($tess); This deletes the tessellation structure and frees up any remaining associated memory. =item C gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_BEGIN, \&glBegin); gluTessCallback($tess, GLU_TESS_BEGIN, sub { my $enum = shift; glBegin($enum) }); gluTessCallback($tess, GLU_TESS_BEGIN); # unsets current handler Registers handlers for each of the tessellation callback types. Takes a tessellation reference generated by gluNewTess, a type, and a coderef or the word 'DEFAULT'. If the word 'DEFAULT' is passed, a default c-level callback will be installed (which will be discussed for each callback). If no 3rd argument is given, then any handler currently set will be removed. Valid callback types are GLU_TESS_BEGIN GLU_TESS_END GLU_TESS_VERTEX GLU_TESS_COMBINE GLU_TESS_ERROR GLU_TESS_EDGE_FLAG GLU_TESS_BEGIN_DATA GLU_TESS_END_DATA GLU_TESS_VERTEX_DATA GLU_TESS_COMBINE_DATA GLU_TESS_ERROR_DATA GLU_TESS_EDGE_FLAG_DATA These types and their passed parameters will be discussed in the CALLBACKS section. The types ending with "_DATA" are similar to their non-_DATA counterpart, but when called are passed the option $polygon_data that can be set during gluTessBeginPolygon. =item C gluTessBeginPolygon($tess); gluTessBeginPolygon($tess, $polygon_data); Begins the tessellation transaction. It must eventually be ended with a gluTessEndPolygon before the tessellator will normally begin work. An optional second argument can be passed which can be any perl scalar or reference. If a callback is registered using a type ending in _DATA, this perl scalar or reference will be passed as an additional argument to that callback. gluTessCallback($tess, GLU_TESS_END_DATA, sub { my $polygon_data = shift; glEnd(); print "glEnd: (".($polygon_data->[2] eq 8 ? "YES" : "NO").")\n"; }); gluTessBeginPoly($tess, [6,7,8]); # arrayref will be passed to _DATA callbacks A sample Object Oriented tesselation sample listed at the end of this document makes use of this "opaque" polygon data. =item C gluTessEndPolygon($tess); Finishes the tessellation transaction, which normally will immediately fire the necessary callbacks generated by the tessellation process. Once finished, it cleans up any accumulated temporary vertice data. =item C gluTessBeginContour($tess); Starts a new contour of the tessellation of the current polygon. Please read the OpenGL documentation, and red book chapter on tessellation for more help on when to use different contours. Should eventually be followed by a gluTessEndContour call. (At a high level, tessellated polygons may have windows and multiple separate portions. Each inner and outer border of these portions should be represented by a different contour.) =item C gluTessVertex_p($tess, $x, $y, $z); gluTessVertex_p($tess, $x, $y, $z, $vertex_data); Adds a vertex to the current contour of the current polygon being tessellated. If the vertex callback type is set to GLU_TESS_VERTEX, the optional $vertex_data argument will be passed to the vertex callback, and to the combine callback (if GLU_TESS_VERTEX_DATA is used, then the $polygon_data passed to gluTessBeginPolygon will be passed instead). This optional opaque vertex data can be any perl scalar or reference and can be used to pass useful information along during the tessellation process. If the 'do_colors' or 'do_normals' parameters were passed to gluNewTess, then those additional properties MUST be passed as additional arguments. # my $tess = gluNewTess('do_colors'); gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a); gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $vertex_data); # my $tess = gluNewTess('do_colors', 'do_normals'); gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz); gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz, $vertex_data); # my $tess = gluNewTess(undef, 'do_normals'); gluTessVertex_p($tess, $x, $y, $z, $nx, $ny, $nz); gluTessVertex_p($tess, $x, $y, $z, $nx, $ny, $nz, $vertex_data); =back =head1 CALLBACKS All of the callbacks support a 'DEFAULT' handler that can be installed by passing the word 'DEFAULT' in place of the callback code reference. The DEFAULT c implementations are there to avoid needing to round trip out to perl. The defaults employed are described for each of the callback types. With the exception of the COMBINE callback, return values from callbacks are discarded. =over 4 =item C gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_BEGIN, \&glBegin); gluTessCallback($tess, GLU_TESS_BEGIN, sub { my $enum = shift; glBegin($enum); }); The 'DEFAULT' option installs a c-handler that calls the glBegin c function directly without round-tripping out to perl. If $polygon_data was set during gluTessBeginPolygon, it is discarded. =item C Similar to GLU_TESS_BEGIN but will be passed optional $polygon_data set in gluTessBeginPolygon if any. The 'DEFAULT' handler will ignore this data. gluTessCallback($tess, GLU_TESS_BEGIN_DATA, sub { my ($enum, $polygon_data) = @_; glBegin($enum); print "glBegin - and I received polygon_data\n" if $polygon_data; }); =item C gluTessCallback($tess, GLU_TESS_END, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END, \&glEnd); gluTessCallback($tess, GLU_TESS_END, sub { glEnd() }); The 'DEFAULT' option installs a c-handler that calls the glEnd c function directly without round-tripping out to perl. If $polygon_data was set during gluTessBeginPolygon, it is discarded. =item C Similar to GLU_TESS_END but will be passed optional $polygon_data set in gluTessBeginPolygon if any. The 'DEFAULT' handler will ignore this data. gluTessCallback($tess, GLU_TESS_END_DATA, sub { my ($polygon_data) = @_; glEnd(); print "glEnd - and I received polygon_data\n" if $polygon_data; }); =item C The GLU_TESS_VERTEX callback handler has slightly different behavior depending on how gluNewTess was called. The optional behaviors allow for sane default processing of colors and normals without needing to roundtrip out to perl. my $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); # the following will break if vertex_data is passed to gluTessVertex_p gluTessCallback($tess, GLU_TESS_VERTEX, \&glVertex3f); gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z) = @_; glVertex3f($x, $y, $z); }); # you can also pass vertex_data to gluTessVertex_p gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z, $vertex_data) = @_; glVertex3f($x, $y, $z); print "glVertex - and I received vertex_data\n" if $vertex_data; }); The 'DEFAULT' option installs a c-handler that calls the glVertex c function directly without round-tripping out to perl. The DEFAULT handler discards any polygon_data or vertex_data. IF $vertex_data was set during gluTessVertex_p it will be passed as the final argument. If gluNewTess was passed 'do_colors' then the GLU_TESS_VERTEX callback will also be passed the rgba information. The 'DEFAULT' option will pass the color information to glColor4f before calling glVertex3f. my $tess = gluNewTess('do_colors'); gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z, $r, $g, $b, $a, $vertex_data) = @_; glColor4f($r, $g, $b, $a); glVertex3f($x, $y, $z); }); If gluNewTess was passed 'do_normals' then the GLU_TESS_VERTEX callback will also be passed the normal x,y,z information. The 'DEFAULT' option will pass the normal information to glNormal3f before calling glVertex3f. my $tess = gluNewTess('do_colors', 'do_normals'); gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz, $vertex_data) = @_; glColor4f($r, $g, $b, $a); glNormalf($nx, $ny, $nz); glVertex3f($x, $y, $z); }); # OR my $tess = gluNewTess(undef, 'do_normals'); gluTessCallback($tess, GLU_TESS_VERTEX, sub { my ($x, $y, $z, $nx, $ny, $nz, $vertex_data) = @_; glNormalf($nx, $ny, $nz); glVertex3f($x, $y, $z); }); In all cases, any optional vertex_data will be passed as the final argument. =item C Similar to GLU_TESS_VERTEX but will be passed optional $polygon_data set in gluTessBeginPolygon (if any) rather than the optional $vertex_data passed to gluTessVertex_p. The 'DEFAULT' handler will ignore this data. gluTessCallback($tess, GLU_TESS_VERTEX_DATA, sub { my ($x, $y, $z, $vertex_data) = @_; glVertex3f($x, $y, $z); print "glVertex - and I received vertex_data\n" if $vertex_data; }); =item C gluTessCallback($tess, GLU_TESS_COMBINE, 'DEFAULT'); # works with gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); # OR # the following callback is valid for gluNewTess() (no do_colors or do_normals) # using gluTessVertex_p($tess, $x, $y, $z); my $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_COMBINE, sub { my ($x, $y, $z, # new vertex location $v0, $v1, $v2, $v3, # border vertex arrayrefs $w0, $w1, $w2, $w3, # border vertex weights $polygon_data) = @_; # optional data passed to gluTessBeginPolygon return ($x, $y, $z); }); # works with gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); # OR # the following callback is valid for gluNewTess() when vertex data is passed # using gluTessVertex_p($tess, $x, $y, $z, [$r, $g, $b, $a]); # The DEFAULT callback cannot automatically proceess this type of data # but passing data to a custom handler this way could handle any arbitrary data passed to it my $tess = gluNewTess(); use constant _r => 0; use constant _g => 1; use constant _b => 2; use constant _a => 3; gluTessCallback($tess, GLU_TESS_COMBINE, sub { my ($x, $y, $z, # new vertex location $v0, $v1, $v2, $v3, # border vertex arrayrefs $w0, $w1, $w2, $w3, # border vertex weights $polygon_data) = @_; # optional data passed to gluTessBeginPolygon # $v0 will contain [$x, $y, $z, [$r, $g, $b, $a]] my @rgba = map {$_->[3]} $v0, $v1, $v2, $v3; # generate a point with color weighted from the surrounding vertices # then return that color information in the same way we received it (an rgba arrayref) return ( $x, $y, $z, [$w0*$rgba[0]->[_r] + $w1*$rgba[1]->[_r] + $w2*$rgba[2]->[_r] + $w3*$rgba[3]->[_r], $w0*$rgba[0]->[_g] + $w1*$rgba[1]->[_g] + $w2*$rgba[2]->[_g] + $w3*$rgba[3]->[_g], $w0*$rgba[0]->[_b] + $w1*$rgba[1]->[_b] + $w2*$rgba[2]->[_b] + $w3*$rgba[3]->[_b], $w0*$rgba[0]->[_a] + $w1*$rgba[1]->[_a] + $w2*$rgba[2]->[_a] + $w3*$rgba[3]->[_a]], ); }); # works with gluTessCallback($tess, GLU_TESS_VERTEX, sub { # my ($x, $y, $z, $rgba) = @_; # glColor4f(@$rgba); # glVertex3f($x, $y, $z); # }); # OR # the following callback is valid for gluNewTess('do_colors') # using gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a); # the DEFAULT callback COULD automatically proceess this type of data as well if additional vertex data is not passed my $tess = gluNewTess('do_colors'); use constant _r => 3; use constant _g => 4; use constant _b => 5; use constant _a => 6; gluTessCallback($tess, GLU_TESS_COMBINE, sub { my ($x, $y, $z, # new vertex location $v0, $v1, $v2, $v3, # border vertex arrayrefs $w0, $w1, $w2, $w3, # border vertex weights $polygon_data) = @_; # optional data passed to gluTessBeginPolygon # $v0 will contain [$x, $y, $z, $r, $g, $b, $a] return ( # generate a point with color weighted from the surrounding vertices $x, $y, $z, $w0*$v0->[_r] + $w1*$v1->[_r] + $w2*$v2->[_r] + $w3*$v3->[_r], $w0*$v0->[_g] + $w1*$v1->[_g] + $w2*$v2->[_g] + $w3*$v3->[_g], $w0*$v0->[_b] + $w1*$v1->[_b] + $w2*$v2->[_b] + $w3*$v3->[_b], $w0*$v0->[_a] + $w1*$v1->[_a] + $w2*$v2->[_a] + $w3*$v3->[_a], ($v0->[7] || $v1->[7] || $v2->[7] || $v3->[7]), # if we received vertex data - return some for the new vertex ); }); # works with gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); # OR # works with gluTessCallback($tess, GLU_TESS_VERTEX, sub { # my ($x, $y, $z, $r, $g, $b, $a, $vertex_data) = @_; # glColor4f($r, $g, $b, $a); # glVertex3f($x, $y, $z); # }); The combine callback is called if the tessellator decides a new vertex is needed. This will happen with self intersecting polygons. In this case, the COMBINE callback can be used to interpolate appropriate values for normals, and colors, or for any desired information. The combine callback will be passed the following: =over 4 =item C<$x, $y, $z> The x y and z coordinates of the new vertex being created. =item C<$v0, $v1, $v2, $v3> Arrayrefs of vertex information for the vertices bordering this new vertex (the ones that caused the new vertex to be created). By default if gluNewTess() is called, these arrayrefs will be passed: my ($x, $y, $z, $vertex_data) = @$v0; # received from gluTessVertex_p($tess, $x, $y, $z, $vertex_data); If gluNewTess('do_colors') is called, the following will be passed: my ($x, $y, $z, $r, $g, $b, $a, $vertex_data) = @$v0; # received from gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $vertex_data); If gluNewTess('do_colors', 'do_normals') is called, the following will be passed: my ($x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz, $vertex_data) = @$v0; # received from gluTessVertex_p($tess, $x, $y, $z, $r, $g, $b, $a, $nx, $ny, $nz, $vertex_data); If gluNewTess(undef, 'do_normals') is called, the following will be passed: my ($x, $y, $z, $nx, $ny, $nz, $vertex_data) = @$v0; # received from gluTessVertex_p($tess, $x, $y, $z, $nx, $ny, $nz, $vertex_data); In all cases, the data returned by the COMBINE callback should be in the same format that each of the vertices are in when passed into the COMBINE callback. =item C<$w0, $w1, $w2, $w3> Weights of the participating vertices (weight $w0 corresponds to vertex $v0). =item C Any optional data passed to gluTessBeginPolygon. Normally this would only be passed to GLU_TESS_COMBINE_DATA, but GLU_TESS_COMBINE_DATA and GLU_TESS_COMBINE share the same code implementation. =back =item C Identical in function to the GLU_TESS_COMBINE handler. They use the same callback implementation. =item C gluTessCallback($tess, GLU_TESS_ERROR, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR, \&glEdgeFlag); gluTessCallback($tess, GLU_TESS_ERROR, sub { my $errno = shift; my $err = gluErrorString($errno); warn "Received a glu tess error ($errno - $err)\n"; }); The 'DEFAULT' option installs a c-handler that warns with the appropriate gluErrorString. If $polygon_data was set during gluTessBeginPolygon, it is discarded. =item C Similar to GLU_TESS_ERROR but will be passed optional $polygon_data set in gluTessBeginPolygon if any. The 'DEFAULT' handler will ignore this data. gluTessCallback($tess, GLU_TESS_ERROR_DATA, sub { my ($errno, $polygon_data) = @_; my $err = gluErrorString($errno); warn "Received a glu tess error ($errno - $err)\n"; warn "And I received polygon_data\n" if $polygon_data; }); =item C gluTessCallback($tess, GLU_TESS_EDGE_FLAG, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, \&glEdgeFlag); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, sub { my ($flag) = @_; glEdgeFlag($flag); }); The 'DEFAULT' option installs a c-handler that calls the glEdgeFlag c function directly without round-tripping out to perl. If $polygon_data was set during gluTessBeginPolygon, it is discarded. =item C Similar to GLU_TESS_EDGE_FLAG but will be passed $polygon_data set in gluTessBeginPolygon if any. The 'DEFAULT' handler will ignore this data. gluTessCallback($tess, GLU_TESS_EDGE_FLAG_DATA, sub { my ($flag, $polygon_data) = @_; glEdgeFlag($flag); print "glEdgeFlag - and I received polygon_data\n" if $polygon_data; }); =back =head1 Example: Basic Arrowhead use OpenGL qw(:all); glutInit(); glutInitWindowSize(501, 501); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("Tessellation"); glMatrixMode(GL_PROJECTION()); glLoadIdentity(); glOrtho(-250,250,-250,250,-1.0,1.0); glMatrixMode(GL_MODELVIEW); my $view_triangles = 1; # set to zero to show polygon glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) if $view_triangles; glutDisplayFunc(sub { glColor3f(1,1,1); my $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_COMBINE, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, 'DEFAULT') if ! $view_triangles; gluTessBeginPolygon($tess); gluTessBeginContour($tess); gluTessVertex_p($tess, 0, 200, 0); gluTessVertex_p($tess, 150, -200, 0); gluTessVertex_p($tess, 0, -100, 0); gluTessVertex_p($tess, -150, -200, 0); gluTessEndContour($tess); gluTessEndPolygon($tess); gluDeleteTess($tess); glutSwapBuffers(); }); glutMainLoop(); =head1 Example: Multiple contours use OpenGL qw(:all); glutInit(); glutInitWindowSize(501, 501); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("Tessellation"); glMatrixMode(GL_PROJECTION()); glLoadIdentity(); glOrtho(-250,250,-250,250,-1.0,1.0); glMatrixMode(GL_MODELVIEW); my $view_triangles = 1; # set to zero to show polygon glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) if $view_triangles; glutDisplayFunc(sub { glColor3f(1,1,1); my $v = [[[125,0,0], [150,150,0], [0,125,0], [-150,150,0], [-125,0,0], [-150,-150,0], [0,-125,0], [150,-150,0], [125,0,0]], [[75,0,0], [100,100,0], [0,75,0], [-100,100,0], [-75,0,0], [-100,-100,0], [0,-75,0], [100,-100,0], [75,0,0]] ]; my $tess = gluNewTess(); gluTessCallback($tess, GLU_TESS_BEGIN, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_END, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_VERTEX, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_COMBINE, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_ERROR, 'DEFAULT'); gluTessCallback($tess, GLU_TESS_EDGE_FLAG, 'DEFAULT') if ! $view_triangles; gluTessBeginPolygon($tess); foreach (@$v) { gluTessBeginContour($tess); foreach (@$_) { gluTessVertex_p($tess, @$_); } gluTessEndContour($tess); } gluTessEndPolygon($tess); gluDeleteTess($tess); glutSwapBuffers(); }); glutMainLoop(); =head1 Example: Sample OO Tessellation interface using polygon_data use OpenGL qw(:all); glutInit(); glutInitWindowSize(501, 501); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("Tessellation"); glMatrixMode(GL_PROJECTION()); glLoadIdentity(); glOrtho(-250,250,-250,250,-1.0,1.0); glMatrixMode(GL_MODELVIEW); my $view_triangles = 0; glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) if $view_triangles; glutDisplayFunc(sub { glColor3f(1,1,1); my $v = [[[125,0,0], [150,150,0, 0,1,0], [0,125,0], [-150,150,0, 1,0,0], [-125,0,0], [-150,-150,0, 0,0,1], [0,-125,0], [150,-150,0, 1,1,0], [125,0,0]], [[75,0,0], [100,100,0], [0,75,0], [-100,100,0], [-75,0,0], [-100,-100,0], [0,-75,0], [100,-100,0], [75,0,0]] ]; OpenGL::Tess->new(do_colors => 1, no_edge_flag => $view_triangles)->draw_contours(@$v); glutSwapBuffers(); }); glutMainLoop(); ###----------------------------------------------------------------### package OpenGL::Tess; # Sample object oriented Tessellator # OpenGL::Tess->new(do_colors => 1, no_edge_flag => $view_triangles)->draw_contours(@$v); use strict; sub new { my $class = shift; my $self = bless {@_}, $class; my $tess = $self->{'_tess'} = OpenGL::gluNewTess($self->do_colors); for my $cb (qw(begin end vertex combine error edge_flag)) { my $enum = OpenGL->can("GLU_TESS_\U${cb}_DATA") || die "Couldn't find callback for $cb"; my $name = "_$cb"; OpenGL::gluTessCallback($tess, $enum->(), sub { $_[-1]->$name(@_) }); } return $self; } sub DESTROY { my $tess = shift->{'_tess'}; OpenGL::gluDeleteTess($tess) if $tess; } sub tess { my $self = shift; return $self->{'_tess'} || die "Missing tess"; } sub do_colors { shift->{'do_colors'} } sub begin_polygon { my $self = shift; my $tess = $self->tess; # self will be passed as last arg ([-1]) to all callbacks as opaque polygon data return OpenGL::gluTessBeginPolygon($tess, $self); } sub end_polygon { OpenGL::gluTessEndPolygon( shift->tess) } sub begin_contour { OpenGL::gluTessBeginContour(shift->tess) } sub end_contour { OpenGL::gluTessEndContour( shift->tess) } sub draw_contours { my $self = shift; $self->begin_polygon; foreach my $c (@_) { $self->begin_contour; $self->add_vertex(@$_) for @$c; $self->end_contour; } $self->end_polygon; } sub add_vertex { my $self = shift; die 'Usage $self->add_vertex($x,$y,$z)' if @_ < 3; if ($self->do_colors) { push @_, 1 for @_ .. 6; OpenGL::gluTessVertex_p($self->tess, @_[0..6]); } else { OpenGL::gluTessVertex_p($self->tess, @_[0..3]); } } sub _begin { my ($self, $enum) = @_; OpenGL::glBegin($enum); } sub _end { OpenGL::glEnd() } sub _vertex { my ($self, $x, $y, $z, $r, $g, $b, $a) = @_; OpenGL::glColor4f($r, $g, $b, $a) if $self->do_colors; OpenGL::glVertex3f($x, $y, $z); } sub _edge_flag { my ($self, $flag) = @_; return if $self->{'no_edge_flag'}; OpenGL::glEdgeFlag($flag); } sub _error { my ($self, $errno) = @_; warn __PACKAGE__ ." error: ".OpenGL::gluErrorString($errno); } sub _combine { my ($self, $x, $y, $z, $v0, $v1, $v2, $v3, $w0, $w1, $w2, $w3) = @_; return ($x, $y, $z) if !$self->do_colors; return ($x, $y, $z, $w0*$v0->[3] + $w1*$v1->[3] + $w2*$v2->[3] + $w3*$v3->[3], $w0*$v0->[4] + $w1*$v1->[4] + $w2*$v2->[4] + $w3*$v3->[4], $w0*$v0->[5] + $w1*$v1->[5] + $w2*$v2->[5] + $w3*$v3->[5], $w0*$v0->[6] + $w1*$v1->[6] + $w2*$v2->[6] + $w3*$v3->[6]); } 1; =head1 AUTHOR Paul Seamons - paul AT seamons dot com - 2011 =cut libopengl-perl-0.6704+dfsg.orig/glut_const.h0000644000175000017500000001034412334200655020231 0ustar gregoagregoa#ifdef GLUT_API_VERSION if (!strncmp(name, "GLUT_", 5)) { i(GLUT_API_VERSION) #ifdef GLUT_XLIB_IMPLEMENTATION i(GLUT_XLIB_IMPLEMENTATION) #endif i(GLUT_RGB) i(GLUT_RGBA) i(GLUT_INDEX) i(GLUT_SINGLE) i(GLUT_DOUBLE) i(GLUT_ACCUM) i(GLUT_ALPHA) i(GLUT_DEPTH) i(GLUT_STENCIL) #if GLUT_API_VERSION >= 2 i(GLUT_MULTISAMPLE) i(GLUT_STEREO) #endif #if GLUT_API_VERSION >= 3 i(GLUT_LUMINANCE) #endif i(GLUT_LEFT_BUTTON) i(GLUT_MIDDLE_BUTTON) i(GLUT_RIGHT_BUTTON) i(GLUT_DOWN) i(GLUT_UP) #if GLUT_API_VERSION >= 2 i(GLUT_KEY_F1) i(GLUT_KEY_F2) i(GLUT_KEY_F3) i(GLUT_KEY_F4) i(GLUT_KEY_F5) i(GLUT_KEY_F6) i(GLUT_KEY_F7) i(GLUT_KEY_F8) i(GLUT_KEY_F9) i(GLUT_KEY_F10) i(GLUT_KEY_F11) i(GLUT_KEY_F12) i(GLUT_KEY_LEFT) i(GLUT_KEY_UP) i(GLUT_KEY_RIGHT) i(GLUT_KEY_DOWN) i(GLUT_KEY_PAGE_UP) i(GLUT_KEY_PAGE_DOWN) i(GLUT_KEY_HOME) i(GLUT_KEY_END) i(GLUT_KEY_INSERT) #endif i(GLUT_LEFT) i(GLUT_ENTERED) i(GLUT_MENU_NOT_IN_USE) i(GLUT_MENU_IN_USE) i(GLUT_NOT_VISIBLE) i(GLUT_VISIBLE) #if GLUT_API_VERSION >= 4 i(GLUT_HIDDEN) i(GLUT_FULLY_RETAINED) i(GLUT_PARTIALLY_RETAINED) i(GLUT_FULLY_COVERED) #endif i(GLUT_RED) i(GLUT_GREEN) i(GLUT_BLUE) #if GLUT_API_VERSION >= 3 i(GLUT_NORMAL) i(GLUT_OVERLAY) #endif p(GLUT_STROKE_ROMAN) p(GLUT_STROKE_MONO_ROMAN) p(GLUT_BITMAP_9_BY_15) p(GLUT_BITMAP_8_BY_13) p(GLUT_BITMAP_TIMES_ROMAN_10) p(GLUT_BITMAP_TIMES_ROMAN_24) #if GLUT_API_VERSION >= 3 p(GLUT_BITMAP_HELVETICA_10) p(GLUT_BITMAP_HELVETICA_12) p(GLUT_BITMAP_HELVETICA_18) #endif i(GLUT_WINDOW_X) i(GLUT_WINDOW_Y) i(GLUT_WINDOW_WIDTH) i(GLUT_WINDOW_HEIGHT) i(GLUT_WINDOW_BUFFER_SIZE) i(GLUT_WINDOW_STENCIL_SIZE) i(GLUT_WINDOW_DEPTH_SIZE) i(GLUT_WINDOW_RED_SIZE) i(GLUT_WINDOW_GREEN_SIZE) i(GLUT_WINDOW_BLUE_SIZE) i(GLUT_WINDOW_ALPHA_SIZE) i(GLUT_WINDOW_ACCUM_RED_SIZE) i(GLUT_WINDOW_ACCUM_GREEN_SIZE) i(GLUT_WINDOW_ACCUM_BLUE_SIZE) i(GLUT_WINDOW_ACCUM_ALPHA_SIZE) i(GLUT_WINDOW_DOUBLEBUFFER) i(GLUT_WINDOW_RGBA) i(GLUT_WINDOW_PARENT) i(GLUT_WINDOW_NUM_CHILDREN) i(GLUT_WINDOW_COLORMAP_SIZE) #if GLUT_API_VERSION >= 2 i(GLUT_WINDOW_NUM_SAMPLES) i(GLUT_WINDOW_STEREO) #endif #if GLUT_API_VERSION >= 3 i(GLUT_WINDOW_CURSOR) #endif i(GLUT_SCREEN_WIDTH) i(GLUT_SCREEN_HEIGHT) i(GLUT_SCREEN_WIDTH_MM) i(GLUT_SCREEN_HEIGHT_MM) i(GLUT_MENU_NUM_ITEMS) i(GLUT_DISPLAY_MODE_POSSIBLE) i(GLUT_INIT_WINDOW_X) i(GLUT_INIT_WINDOW_Y) i(GLUT_INIT_WINDOW_WIDTH) i(GLUT_INIT_WINDOW_HEIGHT) i(GLUT_INIT_DISPLAY_MODE) #if GLUT_API_VERSION >= 2 i(GLUT_ELAPSED_TIME) #endif #if GLUT_API_VERSION >= 2 i(GLUT_HAS_KEYBOARD) i(GLUT_HAS_MOUSE) i(GLUT_HAS_SPACEBALL) i(GLUT_HAS_DIAL_AND_BUTTON_BOX) i(GLUT_HAS_TABLET) i(GLUT_NUM_MOUSE_BUTTONS) i(GLUT_NUM_SPACEBALL_BUTTONS) i(GLUT_NUM_BUTTON_BOX_BUTTONS) i(GLUT_NUM_DIALS) i(GLUT_NUM_TABLET_BUTTONS) #endif #if GLUT_API_VERSION >= 3 i(GLUT_OVERLAY_POSSIBLE) i(GLUT_LAYER_IN_USE) i(GLUT_HAS_OVERLAY) i(GLUT_TRANSPARENT_INDEX) i(GLUT_NORMAL_DAMAGED) i(GLUT_OVERLAY_DAMAGED) #endif /* OS/2 PM implementation does not have these constants... */ #if !defined(GLUT_MIDDLE_BUTTON) || defined(GLUT_NORMAL) i(GLUT_NORMAL) i(GLUT_OVERLAY) i(GLUT_ACTIVE_SHIFT) i(GLUT_ACTIVE_CTRL) i(GLUT_ACTIVE_ALT) i(GLUT_CURSOR_RIGHT_ARROW) i(GLUT_CURSOR_LEFT_ARROW) i(GLUT_CURSOR_INFO) i(GLUT_CURSOR_DESTROY) i(GLUT_CURSOR_HELP) i(GLUT_CURSOR_CYCLE) i(GLUT_CURSOR_SPRAY) i(GLUT_CURSOR_WAIT) i(GLUT_CURSOR_TEXT) i(GLUT_CURSOR_CROSSHAIR) i(GLUT_CURSOR_UP_DOWN) i(GLUT_CURSOR_LEFT_RIGHT) i(GLUT_CURSOR_TOP_SIDE) i(GLUT_CURSOR_BOTTOM_SIDE) i(GLUT_CURSOR_LEFT_SIDE) i(GLUT_CURSOR_RIGHT_SIDE) i(GLUT_CURSOR_TOP_LEFT_CORNER) i(GLUT_CURSOR_TOP_RIGHT_CORNER) i(GLUT_CURSOR_BOTTOM_RIGHT_CORNER) i(GLUT_CURSOR_BOTTOM_LEFT_CORNER) i(GLUT_CURSOR_INHERIT) i(GLUT_CURSOR_NONE) i(GLUT_CURSOR_FULL_CROSSHAIR) #endif #if GLUT_API_VERSION >= 4 i(GLUT_GAME_MODE_ACTIVE) i(GLUT_GAME_MODE_POSSIBLE) i(GLUT_GAME_MODE_WIDTH) i(GLUT_GAME_MODE_HEIGHT) i(GLUT_GAME_MODE_PIXEL_DEPTH) i(GLUT_GAME_MODE_REFRESH_RATE) i(GLUT_GAME_MODE_DISPLAY_CHANGED) #endif #ifdef HAVE_FREEGLUT /* FreeGLUT Constants */ i(GLUT_INIT_STATE) i(GLUT_WINDOW_FORMAT_ID) i(GLUT_ACTION_EXIT) i(GLUT_ACTION_GLUTMAINLOOP_RETURNS) i(GLUT_ACTION_CONTINUE_EXECUTION) i(GLUT_ACTION_ON_WINDOW_CLOSE) #endif } else #endif /* def GTK_API_VERSION */ libopengl-perl-0.6704+dfsg.orig/SUPPORTS0000644000175000017500000001050512334200655017120 0ustar gregoagregoa 0.66 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.9 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.65 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.9 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.64 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.7 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.63 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.7 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.62 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.5 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.61 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.5 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.60 This file is still not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. Used by PDL-2.4.5 to implement 3D graphics and plots. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.59 This file is not up to date with the current code. POGL builds "out of the box" on more system types than ever, including: Linux, MSWin32, and Mac OS X. TBD: generate a more complete/specific list ---------------------------------------------------------- 0.58 This file is not up to date with the current code. TBD: rewrite to reflect actual status ---------------------------------------------------------- 0.55 has been tested on Windows, Ubuntu and Fedora, using various nVidia boards. Previous releases havce been tested with Mesa 3.0. It is intended that it supports: OpenGL 1.0, 1.1, 1.2 (some? most?). (And various extensions). GLU (unknown version). Several (important to nurbs) functions are not supported yet. GLUT, with full support up to API version 3. GLX is only supported to the degree that Stan's original module supported it. Without an entire X binding it is of limited use, and I recommend using glut or Gtk::GLArea instead. Most functions that have no pointer arguments are called identically in Perl as in C, and the same name is used. Functions that use array arguments and have been changed in "the obvious way" -- to take a variable number of arguments and/or to return an array -- have the the same names as their C counterparts, but with a _p suffix. All functions that take pointers are available with their original calling syntax and a _c suffix. These are most useful when combined with the OpenGL::Array module, which lets you allocate C arrays from Perl. A third variant, _s, exists for most pointer functions, and takes a string argument for each pointer. The underlying OpenGL function will be passed a pointer to that string. If these variants are passed a reference to a string, they treat the string contents as the buffer being pointed to. libopengl-perl-0.6704+dfsg.orig/OpenGL.xs0000644000175000017500000000571112334200655017401 0ustar gregoagregoa/* Last saved: Sun 06 Sep 2009 02:09:23 PM*/ /* Copyright (c) 1998 Kenneth Albanowski. All rights reserved. * Copyright (c) 2007 Bob Free. All rights reserved. * Copyright (c) 2009 Chris Marshall. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. */ /* This ends up being OpenGL.pm */ #define IN_POGL_MAIN_XS #include #include "pgopogl.h" #ifdef IN_POGL_MAIN_XS =head2 Miscellaneous Various BOOT utilities defined in OpenGL.xs =over =item PGOPOGL_CALL_BOOT(name) call the boot code of a module by symbol rather than by name. in a perl extension which uses several xs files but only one pm, you need to bootstrap the other xs files in order to get their functions exported to perl. if the file has MODULE = Foo::Bar, the boot symbol would be boot_Foo__Bar. =item void _pgopogl_call_XS (pTHX_ void (*subaddr) (pTHX_ CV *), CV * cv, SV ** mark); never use this function directly. see C. for the curious, this calls a perl sub by function pointer rather than by name; call_sv requires that the xsub already be registered, but we need this to call a function which will register xsubs. this is an evil hack and should not be used outside of the PGOPOGL_CALL_BOOT macro. it's implemented as a function to avoid code size bloat, and exported so that extension modules can pull the same trick. =back =cut void _pgopogl_call_XS (pTHX_ void (*subaddr) (pTHX_ CV *), CV * cv, SV ** mark) { dSP; PUSHMARK (mark); (*subaddr) (aTHX_ cv); PUTBACK; /* forget return values */ } #endif /* End IN_POGL_MAIN_XS */ #ifdef HAVE_GL #include "gl_util.h" #endif #ifdef HAVE_GLX #include "glx_util.h" #endif #ifdef HAVE_GLU #include "glu_util.h" #endif #if defined(HAVE_GLUT) || defined(HAVE_FREEGLUT) #ifndef GLUT_API_VERSION #define GLUT_API_VERSION 4 #endif #include "glut_util.h" #endif /* This does not seem to be used */ #if 0 static char *SWIZZLE[4] = {"x","y","z","w"}; */ #endif /* This does not seem to be used */ #if 0 static int not_here(s) char *s; { croak("%s not implemented on this architecture", s); return -1; } #endif MODULE = OpenGL PACKAGE = OpenGL ##################### GLU ######################### ############################## GLUT ######################### # /* This is assigned to GLX for now. The glp*() functions should be split out */ BOOT: PGOPOGL_CALL_BOOT(boot_OpenGL__RPN); PGOPOGL_CALL_BOOT(boot_OpenGL__Const); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__Top); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__AccuGetM); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__GetPPass); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__MultProg); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__PixeVer2); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__ProgClam); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__Tex2Draw); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__Ver3Tex1); PGOPOGL_CALL_BOOT(boot_OpenGL__GL__VertMulti); PGOPOGL_CALL_BOOT(boot_OpenGL__GLU); PGOPOGL_CALL_BOOT(boot_OpenGL__GLUT); libopengl-perl-0.6704+dfsg.orig/pgopogl.h0000644000175000017500000000346512334200655017525 0ustar gregoagregoa/* * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public * License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. * */ #ifndef _PGOPOGL_H_ #define _PGOPOGL_H_ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" /* * miscellaneous */ /* never use this function directly. use PGOPOGL_CALL_BOOT. */ void _pgopogl_call_XS (pTHX_ void (*subaddr) (pTHX_ CV *), CV * cv, SV ** mark); /* * call the boot code of a module by symbol rather than by name. * * in a perl extension which uses several xs files but only one pm, you * need to bootstrap the other xs files in order to get their functions * exported to perl. if the file has MODULE = Foo::Bar, the boot symbol * would be boot_Foo__Bar. */ #define PGOPOGL_CALL_BOOT(name) \ { \ extern XS(name); \ _pgopogl_call_XS (aTHX_ name, cv, mark); \ } #define PackCallbackST(av,first) \ if (SvROK(ST(first)) && (SvTYPE(SvRV(ST(first))) == SVt_PVAV)){ \ int i; \ AV * x = (AV*)SvRV(ST(first)); \ for(i=0;i<=av_len(x);i++) { \ av_push(av, newSVsv(*av_fetch(x, i, 0))); \ } \ } else { \ int i; \ for(i=first;i