/* * 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(color_element_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; context->current.CurrentColor.r = (GLfloat)cur[0] * oneoverdiv; context->current.CurrentColor.g = (GLfloat)cur[1] * oneoverdiv; context->current.CurrentColor.b = (GLfloat)cur[2] * oneoverdiv; context->current.CurrentColor.a = 1.0; #else context->current.CurrentColor.r = (GLfloat)cur[0]; context->current.CurrentColor.g = (GLfloat)cur[1]; context->current.CurrentColor.b = (GLfloat)cur[2]; context->current.CurrentColor.a = 1.0; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterial(context); #endif }; static void NAME(color_element_4)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; context->current.CurrentColor.r = (GLfloat)cur[0] * oneoverdiv; context->current.CurrentColor.g = (GLfloat)cur[1] * oneoverdiv; context->current.CurrentColor.b = (GLfloat)cur[2] * oneoverdiv; context->current.CurrentColor.a = (GLfloat)cur[3] * oneoverdiv; #else context->current.CurrentColor.r = (GLfloat)cur[0]; context->current.CurrentColor.g = (GLfloat)cur[1]; context->current.CurrentColor.b = (GLfloat)cur[2]; context->current.CurrentColor.a = (GLfloat)cur[3]; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterial(context); #endif }; static void NAME(color_fetch_3)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; thisvertex.r = (GLfloat)cur[0] * oneoverdiv; thisvertex.g = (GLfloat)cur[1] * oneoverdiv; thisvertex.b = (GLfloat)cur[2] * oneoverdiv; thisvertex.a = 1.0; #else thisvertex.r = (GLfloat)cur[0]; thisvertex.g = (GLfloat)cur[1]; thisvertex.b = (GLfloat)cur[2]; thisvertex.a = 1.0; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterialVertex(context); #endif } static void NAME(color_fetch_4)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; thisvertex.r = (GLfloat)cur[0] * oneoverdiv; thisvertex.g = (GLfloat)cur[1] * oneoverdiv; thisvertex.b = (GLfloat)cur[2] * oneoverdiv; thisvertex.a = (GLfloat)cur[3] * oneoverdiv; #else thisvertex.r = (GLfloat)cur[0]; thisvertex.g = (GLfloat)cur[1]; thisvertex.b = (GLfloat)cur[2]; thisvertex.a = (GLfloat)cur[3]; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterialVertex(context); #endif } static void NAME(color_fetch_idx_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; thisvertex.r = (GLfloat)cur[0] * oneoverdiv; thisvertex.g = (GLfloat)cur[1] * oneoverdiv; thisvertex.b = (GLfloat)cur[2] * oneoverdiv; thisvertex.a = 1.0; #else thisvertex.r = (GLfloat)cur[0]; thisvertex.g = (GLfloat)cur[1]; thisvertex.b = (GLfloat)cur[2]; thisvertex.a = 1.0; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterialVertex(context); #endif } static void NAME(color_fetch_idx_4)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); #ifdef DIVIDE float oneoverdiv = 1.0/DIVIDE; thisvertex.r = (GLfloat)cur[0] * oneoverdiv; thisvertex.g = (GLfloat)cur[1] * oneoverdiv; thisvertex.b = (GLfloat)cur[2] * oneoverdiv; thisvertex.a = (GLfloat)cur[3] * oneoverdiv; #else thisvertex.r = (GLfloat)cur[0]; thisvertex.g = (GLfloat)cur[1]; thisvertex.b = (GLfloat)cur[2]; thisvertex.a = (GLfloat)cur[3]; #endif #ifdef MGL_USE_LIGHTING if (context->enable.ColorMaterial) light_UpdateColorMaterialVertex(context); #endif } static void NAME(color_init)(void) { color_fetchElement[TYPEIDX|FLAG_3] = NAME(color_element_3); color_fetchElement[TYPEIDX|FLAG_4] = NAME(color_element_4); color_fetch[TYPEIDX|FLAG_3] = NAME(color_fetch_3); color_fetch[TYPEIDX|FLAG_4] = NAME(color_fetch_4); color_fetchIdx[TYPEIDX|FLAG_3] = NAME(color_fetch_idx_3); color_fetchIdx[TYPEIDX|FLAG_4] = NAME(color_fetch_idx_4); } #undef NAME #undef TYPE #undef TYPEIDX #undef thisvertex #undef DIVIDE