mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
332 lines
7.6 KiB
C
332 lines
7.6 KiB
C
/**************************************************************************
|
|
|
|
Copyright 2002 Tungsten Graphics Inc., Cedar Park, Texas.
|
|
Copyright 2011 Dave Airlie (ARB_vertex_type_2_10_10_10_rev support)
|
|
All Rights Reserved.
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
copy of this software and associated documentation files (the "Software"),
|
|
to deal in the Software without restriction, including without limitation
|
|
on the rights to use, copy, modify, merge, publish, distribute, sub
|
|
license, and/or sell copies of the Software, and to permit persons to whom
|
|
the Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice (including the next
|
|
paragraph) shall be included in all copies or substantial portions of the
|
|
Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
|
TUNGSTEN GRAPHICS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
|
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
**************************************************************************/
|
|
|
|
/* float */
|
|
#define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )
|
|
#define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
|
#define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
|
#define ATTR4FV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
|
|
|
|
#define ATTR1F( A, X ) ATTR( A, 1, X, 0, 0, 1 )
|
|
#define ATTR2F( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
|
|
#define ATTR3F( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
|
#define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
|
|
|
/* int */
|
|
#define ATTR2IV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
|
#define ATTR3IV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
|
#define ATTR4IV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
|
|
|
|
#define ATTR1I( A, X ) ATTR( A, 1, X, 0, 0, 1 )
|
|
#define ATTR2I( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
|
|
#define ATTR3I( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
|
#define ATTR4I( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
|
|
|
|
|
/* uint */
|
|
#define ATTR2UIV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )
|
|
#define ATTR3UIV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 )
|
|
#define ATTR4UIV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] )
|
|
|
|
#define ATTR1UI( A, X ) ATTR( A, 1, X, 0, 0, 1 )
|
|
#define ATTR2UI( A, X, Y ) ATTR( A, 2, X, Y, 0, 1 )
|
|
#define ATTR3UI( A, X, Y, Z ) ATTR( A, 3, X, Y, Z, 1 )
|
|
#define ATTR4UI( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W )
|
|
|
|
#define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] )
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex2f)(GLfloat x, GLfloat y)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR2F(VBO_ATTRIB_POS, x, y);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex2fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR2FV(VBO_ATTRIB_POS, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex3f)(GLfloat x, GLfloat y, GLfloat z)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3F(VBO_ATTRIB_POS, x, y, z);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex3fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3FV(VBO_ATTRIB_POS, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4F(VBO_ATTRIB_POS, x, y, z, w);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Vertex4fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4FV(VBO_ATTRIB_POS, v);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord1f)(GLfloat x)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1F(VBO_ATTRIB_TEX, x);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord1fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1FV(VBO_ATTRIB_TEX, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord2f)(GLfloat x, GLfloat y)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR2F(VBO_ATTRIB_TEX, x, y);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord2fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR2FV(VBO_ATTRIB_TEX, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord3f)(GLfloat x, GLfloat y, GLfloat z)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3F(VBO_ATTRIB_TEX, x, y, z);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord3fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3FV(VBO_ATTRIB_TEX, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4F(VBO_ATTRIB_TEX, x, y, z, w);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(TexCoord4fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4FV(VBO_ATTRIB_TEX, v);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Normal3f)(GLfloat x, GLfloat y, GLfloat z)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3F(VBO_ATTRIB_NORMAL, x, y, z);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Normal3fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3FV(VBO_ATTRIB_NORMAL, v);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(FogCoordfEXT)(GLfloat x)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1F(VBO_ATTRIB_FOG, x);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(FogCoordfvEXT)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1FV(VBO_ATTRIB_FOG, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Color3f)(GLfloat x, GLfloat y, GLfloat z)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3F(VBO_ATTRIB_COLOR, x, y, z);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Color3fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR3FV(VBO_ATTRIB_COLOR, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Color4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4F(VBO_ATTRIB_COLOR, x, y, z, w);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Color4fv)(const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR4FV(VBO_ATTRIB_COLOR, v);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(EdgeFlag)(GLboolean b)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1F(VBO_ATTRIB_EDGEFLAG, (GLfloat) b);
|
|
}
|
|
|
|
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Indexf)(GLfloat f)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1F(VBO_ATTRIB_INDEX, f);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(Indexfv)(const GLfloat * f)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
ATTR1FV(VBO_ATTRIB_INDEX, f);
|
|
}
|
|
|
|
|
|
|
|
/* In addition to supporting NV_vertex_program, these entrypoints are
|
|
* used by the display list and other code specifically because of
|
|
* their property of aliasing with other attributes. (See
|
|
* vbo_save_loopback.c)
|
|
*/
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib1fNV)(GLuint index, GLfloat x)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR1F(index, x);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib1fvNV)(GLuint index, const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR1FV(index, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR2F(index, x, y);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib2fvNV)(GLuint index, const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR2FV(index, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR3F(index, x, y, z);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib3fvNV)(GLuint index,
|
|
const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR3FV(index, v);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR4F(index, x, y, z, w);
|
|
}
|
|
|
|
static void GLAPIENTRY
|
|
TAG(VertexAttrib4fvNV)(GLuint index, const GLfloat * v)
|
|
{
|
|
GET_CURRENT_CONTEXT(ctx);
|
|
if (index < VBO_ATTRIB_MAX)
|
|
ATTR4FV(index, v);
|
|
}
|
|
|
|
|
|
#undef ATTR1FV
|
|
#undef ATTR2FV
|
|
#undef ATTR3FV
|
|
#undef ATTR4FV
|
|
|
|
#undef ATTR1F
|
|
#undef ATTR2F
|
|
#undef ATTR3F
|
|
#undef ATTR4F
|
|
|
|
#undef MAT
|