GLint __glGetMap_size(GLenum target, GLenum query) { GLint k, order=0, majorMinor[2]; /* ** Assume target and query are both valid. */ switch (target) { case GL_MAP1_COLOR_4: case GL_MAP1_NORMAL: case GL_MAP1_INDEX: 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: switch (query) { case GL_COEFF: k = __glMap1d_size(target); glGetMapiv(target, GL_ORDER, &order); /* ** The query above might fail, but then order will be zero anyway. */ return (order * k); case GL_DOMAIN: return 2; case GL_ORDER: return 1; } break; case GL_MAP2_COLOR_4: case GL_MAP2_NORMAL: case GL_MAP2_INDEX: 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: switch (query) { case GL_COEFF: k = __glMap2d_size(target); majorMinor[0] = majorMinor[1] = 0; glGetMapiv(target, GL_ORDER, majorMinor); /* ** The query above might fail, but then majorMinor will be zeroes */ return (majorMinor[0] * majorMinor[1] * k); case GL_DOMAIN: return 4; case GL_ORDER: return 2; } break; } return -1; }
int __glXMap1dReqSize(GLbyte *pc, Bool swap ) { GLenum target; GLint order, k; target = *(GLenum*) (pc + 16); order = *(GLint*) (pc + 20); if (swap) { target = SWAPL( target ); order = SWAPL( order ); } k = __glMap1d_size( target ); return 8 * Map1Size( k, order ); }
int __glXMap1dReqSize(const GLbyte * pc, Bool swap, int reqlen) { GLenum target; GLint order; target = *(GLenum *) (pc + 16); order = *(GLint *) (pc + 20); if (swap) { target = SWAPL(target); order = SWAPL(order); } if (order < 1) return -1; return safe_mul(8, safe_mul(__glMap1d_size(target), order)); }
void __glXDispSwap_Map1d(GLbyte * pc) { GLint order, k, compsize; GLenum target; GLdouble u1, u2, *points; __GLX_DECLARE_SWAP_VARIABLES; __GLX_DECLARE_SWAP_ARRAY_VARIABLES; __GLX_SWAP_DOUBLE(pc + 0); __GLX_SWAP_DOUBLE(pc + 8); __GLX_SWAP_INT(pc + 16); __GLX_SWAP_INT(pc + 20); target = *(GLenum *) (pc + 16); order = *(GLint *) (pc + 20); k = __glMap1d_size(target); if (order <= 0 || k < 0) { /* Erroneous command. */ compsize = 0; } else { compsize = order * k; } __GLX_GET_DOUBLE(u1, pc); __GLX_GET_DOUBLE(u2, pc + 8); __GLX_SWAP_DOUBLE_ARRAY(pc + 24, compsize); pc += 24; #ifdef __GLX_ALIGN64 if (((unsigned long) pc) & 7) { /* ** Copy the doubles up 4 bytes, trashing the command but aligning ** the data in the process */ __GLX_MEM_COPY(pc - 4, pc, compsize * 8); points = (GLdouble *) (pc - 4); } else { points = (GLdouble *) pc; } #else points = (GLdouble *) pc; #endif glMap1d(target, u1, u2, k, order, points); }
void __glXDisp_Map1d(GLbyte * pc) { GLint order, k; #ifdef __GLX_ALIGN64 GLint compsize; #endif GLenum target; GLdouble u1, u2, *points; target = *(GLenum *) (pc + 16); order = *(GLint *) (pc + 20); k = __glMap1d_size(target); #ifdef __GLX_ALIGN64 if (order < 0 || k < 0) { compsize = 0; } else { compsize = order * k; } #endif __GLX_GET_DOUBLE(u1, pc); __GLX_GET_DOUBLE(u2, pc + 8); pc += 24; #ifdef __GLX_ALIGN64 if (((unsigned long) pc) & 7) { /* ** Copy the doubles up 4 bytes, trashing the command but aligning ** the data in the process */ __GLX_MEM_COPY(pc - 4, pc, compsize * 8); points = (GLdouble *) (pc - 4); } else { points = (GLdouble *) pc; } #else points = (GLdouble *) pc; #endif glMap1d(target, u1, u2, k, order, points); }
void __indirect_glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * pnts) { __GLX_DECLARE_VARIABLES(); GLint k; __GLX_LOAD_VARIABLES(); k = __glMap1d_size(target); if (k == 0) { __glXSetError(gc, GL_INVALID_ENUM); return; } else if (stride < k || order <= 0) { __glXSetError(gc, GL_INVALID_VALUE); return; } compsize = k * order * __GLX_SIZE_FLOAT64; cmdlen = 28 + compsize; if (!gc->currentDpy) return; if (cmdlen <= gc->maxSmallRenderCommandSize) { /* Use GLXRender protocol to send small command */ __GLX_BEGIN_VARIABLE(X_GLrop_Map1d, cmdlen); __GLX_PUT_DOUBLE(4, u1); __GLX_PUT_DOUBLE(12, u2); __GLX_PUT_LONG(20, target); __GLX_PUT_LONG(24, order); /* ** NOTE: the doubles that follow are not aligned because of 3 ** longs preceeding */ __glFillMap1d(k, order, stride, pnts, (pc + 28)); __GLX_END(cmdlen); } else { /* Use GLXRenderLarge protocol to send command */ __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_Map1d, cmdlen + 4); __GLX_PUT_DOUBLE(8, u1); __GLX_PUT_DOUBLE(16, u2); __GLX_PUT_LONG(24, target); __GLX_PUT_LONG(28, order); /* ** NOTE: the doubles that follow are not aligned because of 3 ** longs preceeding */ if (stride != k) { GLubyte *buf; buf = (GLubyte *) Xmalloc(compsize); if (!buf) { __glXSetError(gc, GL_OUT_OF_MEMORY); return; } __glFillMap1d(k, order, stride, pnts, buf); __glXSendLargeCommand(gc, pc, 32, buf, compsize); Xfree((char *) buf); } else { /* Data is already packed. Just send it out */ __glXSendLargeCommand(gc, pc, 32, pnts, compsize); } } }