/* * Macros used in this file: * NAME(x) Name of the function * TYPE Type to use * TYPEIDX Type constant (FLAG_BYTE, FLAG_UBYTE, etc) */ static void NAME(texture_element_1)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); context->current.CurTexS[unit] = (GLfloat)cur[0]; context->current.CurTexT[unit] = 0.0; context->current.CurTexQ[unit] = 1.0; context->current.CurTexQValid[unit] = GL_FALSE; }; static void NAME(texture_element_2)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); context->current.CurTexS[unit] = (GLfloat)cur[0]; context->current.CurTexT[unit] = (GLfloat)cur[1]; context->current.CurTexQ[unit] = 1.0; context->current.CurTexQValid[unit] = GL_FALSE; }; static void NAME(texture_element_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); /* r coordinate is ignored */ context->current.CurTexS[unit] = (GLfloat)cur[0]; context->current.CurTexT[unit] = (GLfloat)cur[1]; context->current.CurTexQ[unit] = 1.0; context->current.CurTexQValid[unit] = GL_FALSE; }; static void NAME(texture_element_4)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); /* r coordinate is ignored */ context->current.CurTexS[unit] = (GLfloat)cur[0]; context->current.CurTexT[unit] = (GLfloat)cur[1]; context->current.CurTexQ[unit] = (GLfloat)cur[3]; context->current.CurTexQValid[unit] = GL_TRUE; }; static void NAME(texture_fetch_1)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = 0.0; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_2)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_3)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_4)(GLcontext context, struct GLarray_t *array, GLvoid *pos, GLuint unit) { TYPE *cur = (TYPE *)pos; if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]/(GLfloat)cur[3]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]/(GLfloat)cur[3]; THIS_VERTEX.uvw[unit].w = (GLfloat)cur[3]; THIS_VERTEX.rhw_valid[unit] = GL_TRUE; } } static void NAME(texture_fetch_idx_1)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = 0.0; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_idx_2)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_idx_3)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]; THIS_VERTEX.uvw[unit].w = 1.0; THIS_VERTEX.rhw_valid[unit] = GL_FALSE; } } static void NAME(texture_fetch_idx_4)(GLcontext context, struct GLarray_t *array, GLuint i, GLuint unit) { TYPE *cur = (TYPE *)((uint8 *)array->pointer + array->stride * i); if (context->enable.Texture2D[unit] == GL_TRUE || context->enable.Texture1D[unit] == GL_TRUE ) { THIS_VERTEX.uvw[unit].u = (GLfloat)cur[0]/(GLfloat)cur[3]; THIS_VERTEX.uvw[unit].v = (GLfloat)cur[1]/(GLfloat)cur[3]; THIS_VERTEX.uvw[unit].w = (GLfloat)cur[3]; THIS_VERTEX.rhw_valid[unit] = GL_TRUE; } } static void NAME(texture_init)(void) { texture_fetchElement[TYPEIDX|FLAG_1] = NAME(texture_element_1); texture_fetchElement[TYPEIDX|FLAG_2] = NAME(texture_element_2); texture_fetchElement[TYPEIDX|FLAG_3] = NAME(texture_element_3); texture_fetchElement[TYPEIDX|FLAG_4] = NAME(texture_element_4); texture_fetch[TYPEIDX|FLAG_1] = NAME(texture_fetch_1); texture_fetch[TYPEIDX|FLAG_2] = NAME(texture_fetch_2); texture_fetch[TYPEIDX|FLAG_3] = NAME(texture_fetch_3); texture_fetch[TYPEIDX|FLAG_4] = NAME(texture_fetch_4); texture_fetchIdx[TYPEIDX|FLAG_1] = NAME(texture_fetch_idx_1); texture_fetchIdx[TYPEIDX|FLAG_2] = NAME(texture_fetch_idx_2); texture_fetchIdx[TYPEIDX|FLAG_3] = NAME(texture_fetch_idx_3); texture_fetchIdx[TYPEIDX|FLAG_4] = NAME(texture_fetch_idx_4); } #undef NAME #undef TYPE #undef TYPEIDX