+
+static void GLAPIENTRY
+TAG(VertexAttribL1d)(GLuint index, GLdouble x)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR1D(0, x);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR1D(VBO_ATTRIB_GENERIC0 + index, x);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL1dv)(GLuint index, const GLdouble * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR1DV(0, v);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR1DV(VBO_ATTRIB_GENERIC0 + index, v);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL2d)(GLuint index, GLdouble x, GLdouble y)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR2D(0, x, y);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR2D(VBO_ATTRIB_GENERIC0 + index, x, y);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL2dv)(GLuint index, const GLdouble * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR2DV(0, v);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR2DV(VBO_ATTRIB_GENERIC0 + index, v);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR3D(0, x, y, z);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR3D(VBO_ATTRIB_GENERIC0 + index, x, y, z);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL3dv)(GLuint index, const GLdouble * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR3DV(0, v);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR3DV(VBO_ATTRIB_GENERIC0 + index, v);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR4D(0, x, y, z, w);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR4D(VBO_ATTRIB_GENERIC0 + index, x, y, z, w);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL4dv)(GLuint index, const GLdouble * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR4DV(0, v);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR4DV(VBO_ATTRIB_GENERIC0 + index, v);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL1ui64ARB)(GLuint index, GLuint64EXT x)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR1UI64(0, x);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR1UI64(VBO_ATTRIB_GENERIC0 + index, x);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+static void GLAPIENTRY
+TAG(VertexAttribL1ui64vARB)(GLuint index, const GLuint64EXT *v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (is_vertex_position(ctx, index))
+ ATTR1UIV64(0, v);
+ else if (index < MAX_VERTEX_GENERIC_ATTRIBS)
+ ATTR1UIV64(VBO_ATTRIB_GENERIC0 + index, v);
+ else
+ ERROR(GL_INVALID_VALUE);
+}
+
+/* GL_NV_half_float */
+static void GLAPIENTRY
+TAG(Vertex2hNV)(GLhalfNV x, GLhalfNV y)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR2H(VBO_ATTRIB_POS, x, y);
+}
+
+static void GLAPIENTRY
+TAG(Vertex2hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR2HV(VBO_ATTRIB_POS, v);
+}
+
+static void GLAPIENTRY
+TAG(Vertex3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3H(VBO_ATTRIB_POS, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(Vertex3hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3HV(VBO_ATTRIB_POS, v);
+}
+
+static void GLAPIENTRY
+TAG(Vertex4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4H(VBO_ATTRIB_POS, x, y, z, w);
+}
+
+static void GLAPIENTRY
+TAG(Vertex4hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4HV(VBO_ATTRIB_POS, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(Normal3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3H(VBO_ATTRIB_NORMAL, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(Normal3hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3HV(VBO_ATTRIB_NORMAL, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(Color3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3H(VBO_ATTRIB_COLOR0, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(Color3hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3HV(VBO_ATTRIB_COLOR0, v);
+}
+
+static void GLAPIENTRY
+TAG(Color4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4H(VBO_ATTRIB_COLOR0, x, y, z, w);
+}
+
+static void GLAPIENTRY
+TAG(Color4hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4HV(VBO_ATTRIB_COLOR0, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(TexCoord1hNV)(GLhalfNV x)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR1H(VBO_ATTRIB_TEX0, x);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord1hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR1HV(VBO_ATTRIB_TEX0, v);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord2hNV)(GLhalfNV x, GLhalfNV y)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR2H(VBO_ATTRIB_TEX0, x, y);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord2hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR2HV(VBO_ATTRIB_TEX0, v);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3H(VBO_ATTRIB_TEX0, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord3hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3HV(VBO_ATTRIB_TEX0, v);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4H(VBO_ATTRIB_TEX0, x, y, z, w);
+}
+
+static void GLAPIENTRY
+TAG(TexCoord4hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR4HV(VBO_ATTRIB_TEX0, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(MultiTexCoord1hNV)(GLenum target, GLhalfNV x)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR1H(attr, x);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord1hvNV)(GLenum target, const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR1HV(attr, v);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord2hNV)(GLenum target, GLhalfNV x, GLhalfNV y)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR2H(attr, x, y);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord2hvNV)(GLenum target, const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR2HV(attr, v);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord3hNV)(GLenum target, GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR3H(attr, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord3hvNV)(GLenum target, const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR3HV(attr, v);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord4hNV)(GLenum target, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR4H(attr, x, y, z, w);
+}
+
+static void GLAPIENTRY
+TAG(MultiTexCoord4hvNV)(GLenum target, const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLuint attr = (target & 0x7) + VBO_ATTRIB_TEX0;
+ ATTR4HV(attr, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(FogCoordhNV)(GLhalf x)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR1H(VBO_ATTRIB_FOG, x);
+}
+
+static void GLAPIENTRY
+TAG(FogCoordhvNV)(const GLhalf * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR1HV(VBO_ATTRIB_FOG, v);
+}
+
+
+
+static void GLAPIENTRY
+TAG(SecondaryColor3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3H(VBO_ATTRIB_COLOR1, x, y, z);
+}
+
+static void GLAPIENTRY
+TAG(SecondaryColor3hvNV)(const GLhalfNV * v)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ATTR3HV(VBO_ATTRIB_COLOR1, v);
+}
+