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; }
static void hugsprim_glGetMapiv_6(HugsStackPtr hugs_root) { HsWord32 arg1; HsWord32 arg2; HsPtr arg3; arg1 = hugs->getWord32(); arg2 = hugs->getWord32(); arg3 = hugs->getPtr(); glGetMapiv(arg1, arg2, arg3); hugs->returnIO(hugs_root,0); }
int __glXDisp_GetMapiv(__GLXclientState *cl, GLbyte *pc) { GLenum target; GLenum query; GLint compsize; __GLXcontext *cx; ClientPtr client = cl->client; int error; GLint answerBuffer[200]; char *answer; cx = __glXForceCurrent(cl, __GLX_GET_SINGLE_CONTEXT_TAG(pc), &error); if (!cx) { return error; } pc += __GLX_SINGLE_HDR_SIZE; target = *(GLenum *)(pc + 0); query = *(GLenum *)(pc + 4); compsize = __glGetMapiv_size(target,query); if (compsize < 0) compsize = 0; __GLX_GET_ANSWER_BUFFER(answer,cl,compsize*4,4); __glXClearErrorOccured(); glGetMapiv( *(GLenum *)(pc + 0), *(GLenum *)(pc + 4), (GLint *) answer ); if (__glXErrorOccured()) { __GLX_BEGIN_REPLY(0); __GLX_PUT_SIZE(0); __GLX_SEND_HEADER(); } else if (compsize == 1) { __GLX_BEGIN_REPLY(0); __GLX_PUT_SIZE(1); __GLX_PUT_INT(); __GLX_SEND_HEADER(); } else { __GLX_BEGIN_REPLY(compsize*4); __GLX_PUT_SIZE(compsize); __GLX_SEND_HEADER(); __GLX_SEND_INT_ARRAY(compsize); } return Success; }
M(void, glGetMapiv, jint target, jint query, jobject v) { glGetMapiv(target, query, BUFF(GLint, v)); }