140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick/* 240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * (C) Copyright IBM Corporation 2005 340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * All Rights Reserved. 440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * 540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * Permission is hereby granted, free of charge, to any person obtaining a 640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * copy of this software and associated documentation files (the "Software"), 740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * to deal in the Software without restriction, including without limitation 840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * the rights to use, copy, modify, merge, publish, distribute, sub license, 940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * and/or sell copies of the Software, and to permit persons to whom the 1040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * Software is furnished to do so, subject to the following conditions: 1140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * 1240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * The above copyright notice and this permission notice (including the next 1340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * paragraph) shall be included in all copies or substantial portions of the 1440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * Software. 1540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * 1640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 1940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * IBM, 2040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 2140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 2240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 2340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * SOFTWARE. 2440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick */ 2540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 2640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include <inttypes.h> 2740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include <GL/gl.h> 2840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include "indirect.h" 2940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include "glxclient.h" 3040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include "indirect_vertex_array.h" 3140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick#include <GL/glxproto.h> 3240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 33016fc30839f0fb67bb37d4a7353a7e38749deab5Ian Romanick#if !defined(__GNUC__) 34707c017af68df24441e86b8a69831633a4106ca3Alan Coopersmith# define __builtin_expect(x, y) x 35707c017af68df24441e86b8a69831633a4106ca3Alan Coopersmith#endif 36707c017af68df24441e86b8a69831633a4106ca3Alan Coopersmith 37d2fb24a6714ca4eacaf50e8741fd9b012f7a3560Brian Paulstatic void 38ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófdo_vertex_attrib_enable(GLuint index, GLboolean val) 3940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 40c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *gc = __glXGetCurrentContext(); 41ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __GLXattribute *state = (__GLXattribute *) (gc->client_state_private); 4240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 43ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (!__glXSetArrayEnable(state, GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB, 44ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf index, val)) { 45ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __glXSetError(gc, GL_INVALID_ENUM); 46ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 4740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 4840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 4940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 50ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 511a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glEnableVertexAttribArray(GLuint index) 5240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 53ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf do_vertex_attrib_enable(index, GL_TRUE); 5440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 5540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 5640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 57ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 581a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glDisableVertexAttribArray(GLuint index) 5940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 60ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf do_vertex_attrib_enable(index, GL_FALSE); 6140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 6240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 6340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 6440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanickstatic void 65ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófget_parameter(unsigned opcode, unsigned size, GLenum target, GLuint index, 66ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf void *params) 6740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 68c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *const gc = __glXGetCurrentContext(); 69ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf Display *const dpy = gc->currentDpy; 70ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf const GLuint cmdlen = 12; 71ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 72ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (__builtin_expect(dpy != NULL, 1)) { 73ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLubyte const *pc = __glXSetupVendorRequest(gc, 74ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf X_GLXVendorPrivateWithReply, 75ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf opcode, cmdlen); 76ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 77ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *((GLenum *) (pc + 0)) = target; 78ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *((GLuint *) (pc + 4)) = index; 79ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *((GLuint *) (pc + 8)) = 0; 80ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 81ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf (void) __glXReadReply(dpy, size, params, GL_FALSE); 82ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf UnlockDisplay(dpy); 83ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf SyncHandle(); 84ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 85ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf return; 8640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 8740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 8840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 89ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 90ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf__indirect_glGetProgramEnvParameterfvARB(GLenum target, GLuint index, 91ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLfloat * params) 9240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 93ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_parameter(1296, 4, target, index, params); 9440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 9540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 9640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 97ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 98ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf__indirect_glGetProgramEnvParameterdvARB(GLenum target, GLuint index, 99ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLdouble * params) 10040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 101ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_parameter(1297, 8, target, index, params); 10240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 10340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 10440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 105ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 106ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf__indirect_glGetProgramLocalParameterfvARB(GLenum target, GLuint index, 107ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLfloat * params) 10840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 109ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_parameter(1305, 4, target, index, params); 11040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 11140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 11240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 113ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 114ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf__indirect_glGetProgramLocalParameterdvARB(GLenum target, GLuint index, 115ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLdouble * params) 11640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 117ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_parameter(1306, 8, target, index, params); 11840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 11940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 12040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 121ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 1221a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glGetVertexAttribPointerv(GLuint index, GLenum pname, 123ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLvoid ** pointer) 12440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 125c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *const gc = __glXGetCurrentContext(); 126ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __GLXattribute *state = (__GLXattribute *) (gc->client_state_private); 127ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 128ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB) { 129ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __glXSetError(gc, GL_INVALID_ENUM); 130ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 131ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 132ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (!__glXGetArrayPointer(state, GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB, 133ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf index, pointer)) { 134ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __glXSetError(gc, GL_INVALID_VALUE); 135ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 13640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 13740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 13840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 13940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick/** 14040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * Get the selected attribute from the vertex array state vector. 14140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * 14240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * \returns 14340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick * On success \c GL_TRUE is returned. Otherwise, \c GL_FALSE is returned. 14440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick */ 14540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanickstatic GLboolean 146ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófget_attrib_array_data(__GLXattribute * state, GLuint index, GLenum cap, 147ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLintptr * data) 14840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 149ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLboolean retval = GL_FALSE; 150ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf const GLenum attrib = GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB; 151ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 152ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf switch (cap) { 153ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf case GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: 154ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf retval = __glXGetArrayEnable(state, attrib, index, data); 155ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf break; 15640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 157ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf case GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB: 158ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf retval = __glXGetArraySize(state, attrib, index, data); 159ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf break; 16040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 161ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf case GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB: 162ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf retval = __glXGetArrayStride(state, attrib, index, data); 163ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf break; 16440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 165ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf case GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB: 166ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf retval = __glXGetArrayType(state, attrib, index, data); 167ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf break; 16840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 169ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: 170ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf retval = __glXGetArrayNormalized(state, attrib, index, data); 171ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf break; 172ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 17340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 17440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 175ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf return retval; 17640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 17740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 17840af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 179ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófstatic void 180c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsbergget_vertex_attrib(struct glx_context * gc, unsigned vop, 181ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLuint index, GLenum pname, xReply * reply) 18240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 183ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf Display *const dpy = gc->currentDpy; 184ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLubyte *const pc = __glXSetupVendorRequest(gc, 185ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf X_GLXVendorPrivateWithReply, 186ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf vop, 8); 187ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 188ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *((uint32_t *) (pc + 0)) = index; 189ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *((uint32_t *) (pc + 4)) = pname; 190ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf 191ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf (void) _XReply(dpy, reply, 0, False); 19240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 19340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 19440af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 195ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 1961a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) 19740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 198c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *const gc = __glXGetCurrentContext(); 199ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf Display *const dpy = gc->currentDpy; 200ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __GLXattribute *state = (__GLXattribute *) (gc->client_state_private); 201ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf xGLXSingleReply reply; 20240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 20340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 204ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_vertex_attrib(gc, 1303, index, pname, (xReply *) & reply); 20540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 206ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size != 0) { 207ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLintptr data; 208811d8b86eb43b140de86e2674d50b19223d74c5eGuillaume Melquiond 209811d8b86eb43b140de86e2674d50b19223d74c5eGuillaume Melquiond 210ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (get_attrib_array_data(state, index, pname, &data)) { 211ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *params = (GLint) data; 212ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 213ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 214ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size == 1) { 215ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *params = (GLint) reply.pad3; 216ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 217ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 218ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf _XRead(dpy, (void *) params, 4 * reply.size); 219ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 220ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 221ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 22240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 223ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf UnlockDisplay(dpy); 224ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf SyncHandle(); 22540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 22640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 22740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 228ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 2291a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glGetVertexAttribfv(GLuint index, GLenum pname, 230ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLfloat * params) 23140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 232c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *const gc = __glXGetCurrentContext(); 233ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf Display *const dpy = gc->currentDpy; 234ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __GLXattribute *state = (__GLXattribute *) (gc->client_state_private); 235ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf xGLXSingleReply reply; 23640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 23740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 238ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_vertex_attrib(gc, 1302, index, pname, (xReply *) & reply); 23940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 240ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size != 0) { 241ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLintptr data; 24240af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 24340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 244ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (get_attrib_array_data(state, index, pname, &data)) { 245ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *params = (GLfloat) data; 246ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 247ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 248ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size == 1) { 249ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf (void) memcpy(params, &reply.pad3, sizeof(GLfloat)); 250ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 251ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 252ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf _XRead(dpy, (void *) params, 4 * reply.size); 253ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 254ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 255ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 25640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 257ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf UnlockDisplay(dpy); 258ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf SyncHandle(); 25940af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 26040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 26140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 262ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristófvoid 2631a1db1746db82efc7f0643508886dfc78a15eb71Paul Berry__indirect_glGetVertexAttribdv(GLuint index, GLenum pname, 264ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLdouble * params) 26540af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick{ 266c356f5867f2c1fad7155df538b9affa8dbdcf869Kristian Høgsberg struct glx_context *const gc = __glXGetCurrentContext(); 267ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf Display *const dpy = gc->currentDpy; 268ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf __GLXattribute *state = (__GLXattribute *) (gc->client_state_private); 269ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf xGLXSingleReply reply; 27040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 27140af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 272ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf get_vertex_attrib(gc, 1301, index, pname, (xReply *) & reply); 27340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 274ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size != 0) { 275ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf GLintptr data; 27640af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 27740af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 278ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (get_attrib_array_data(state, index, pname, &data)) { 279ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf *params = (GLdouble) data; 280ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 281ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 282ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf if (reply.size == 1) { 283ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf (void) memcpy(params, &reply.pad3, sizeof(GLdouble)); 284ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 285ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf else { 286ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf _XRead(dpy, (void *) params, 8 * reply.size); 287ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 288ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 289ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf } 29040af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick 291ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf UnlockDisplay(dpy); 292ccc03b427aabb35035be530055dd10f38dfd7c59RALOVICH, Kristóf SyncHandle(); 29340af76bbaa9e8909d63d8eeab4689ed2dfe1e19cIan Romanick} 294