
/*
 * Macros used in this file:
 * NAME(x) 	Name of the function
 * TYPE 	Type to use
 * TYPEIDX 	Type constant (FLAG_BYTE, FLAG_UBYTE, etc)
 */

#define thisvertex context->VertexBuffer[context->VertexBufferPointer]

static void NAME(normal_element_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit)
{
	TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i);

	context->current.CurrentNormal.x = (GLfloat)cur[0];
	context->current.CurrentNormal.y = (GLfloat)cur[1];
	context->current.CurrentNormal.z = (GLfloat)cur[2];
};

static void NAME(normal_fetch_3)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit)
{
	TYPE *cur = (TYPE *)pos;
	
	thisvertex.Normal.x = (GLfloat)cur[0];
	thisvertex.Normal.y = (GLfloat)cur[1];
	thisvertex.Normal.z = (GLfloat)cur[2];
}



static void NAME(normal_fetch_idx_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit)
{
	TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i);
	
	thisvertex.Normal.x = (GLfloat)cur[0];
	thisvertex.Normal.y = (GLfloat)cur[1];
	thisvertex.Normal.z = (GLfloat)cur[2];
}

static void NAME(normal_init)(void)
{
	normal_fetchElement[TYPEIDX] = NAME(normal_element_3);
	normal_fetch[TYPEIDX] = NAME(normal_fetch_3);
	normal_fetchIdx[TYPEIDX] = NAME(normal_fetch_idx_3);
}


#undef NAME
#undef TYPE
#undef TYPEIDX
#undef thisvertex
