summaryrefslogtreecommitdiffstats
path: root/src/mesa/tnl/t_vb_texgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/tnl/t_vb_texgen.c')
-rw-r--r--src/mesa/tnl/t_vb_texgen.c150
1 files changed, 74 insertions, 76 deletions
diff --git a/src/mesa/tnl/t_vb_texgen.c b/src/mesa/tnl/t_vb_texgen.c
index daded260d32..cbc7778ea9e 100644
--- a/src/mesa/tnl/t_vb_texgen.c
+++ b/src/mesa/tnl/t_vb_texgen.c
@@ -1,10 +1,10 @@
-/* $Id: t_vb_texgen.c,v 1.5 2001/03/07 05:06:13 brianp Exp $ */
+/* $Id: t_vb_texgen.c,v 1.6 2001/03/12 00:48:44 gareth Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.5
*
- * Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2001 Brian Paul 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"),
@@ -89,10 +89,10 @@ static GLuint all_bits[5] = {
#define VEC_SIZE_FLAGS (VEC_SIZE_1|VEC_SIZE_2|VEC_SIZE_3|VEC_SIZE_4)
-/*
+/*
*/
static void build_m3(GLfloat f[][3], GLfloat m[],
- const GLvector3f *normal,
+ const GLvector3f *normal,
const GLvector4f *eye )
{
GLuint stride = eye->stride;
@@ -104,11 +104,11 @@ static void build_m3(GLfloat f[][3], GLfloat m[],
/* KW: Had to rearrange this loop to avoid a compiler bug with gcc
* 2.7.3.1 at -O3 optimization. Using -fno-strength-reduce
- * also fixed the bug - is this generally necessary?
+ * also fixed the bug - is this generally necessary?
*/
for (i=0;i<count;i++,STRIDE_F(coord,stride)) {
GLfloat u[3], two_nu, fx, fy, fz;
- COPY_3V( u, coord );
+ COPY_3V( u, coord );
NORMALIZE_3FV( u );
two_nu = 2.0F * DOT3(norm,u);
fx = f[i][0] = u[0] - norm[0] * two_nu;
@@ -126,7 +126,7 @@ static void build_m3(GLfloat f[][3], GLfloat m[],
static void build_m2(GLfloat f[][3], GLfloat m[],
- const GLvector3f *normal,
+ const GLvector3f *normal,
const GLvector4f *eye )
{
GLuint stride = eye->stride;
@@ -139,7 +139,7 @@ static void build_m2(GLfloat f[][3], GLfloat m[],
for (i=0;i<count;i++,STRIDE_F(coord,stride)) {
GLfloat u[3], two_nu, fx, fy, fz;
- COPY_2V( u, coord );
+ COPY_2V( u, coord );
u[2] = 0;
NORMALIZE_3FV( u );
two_nu = 2.0F * DOT3(norm,u);
@@ -175,9 +175,9 @@ static build_m_func build_m_tab[5] = {
/* This is unusual in that we respect the stride of the output vector
* (f). This allows us to pass in either a texcoord vector4f, or a
- * temporary vector3f.
+ * temporary vector3f.
*/
-static void build_f3( GLfloat *f,
+static void build_f3( GLfloat *f,
GLuint fstride,
const GLvector3f *normal,
const GLvector4f *eye )
@@ -191,20 +191,20 @@ static void build_f3( GLfloat *f,
for (i=0;i<count;i++) {
GLfloat u[3], two_nu;
- COPY_3V( u, coord );
+ COPY_3V( u, coord );
NORMALIZE_3FV( u );
two_nu = 2.0F * DOT3(norm,u);
f[0] = u[0] - norm[0] * two_nu;
f[1] = u[1] - norm[1] * two_nu;
f[2] = u[2] - norm[2] * two_nu;
STRIDE_F(coord,stride);
- STRIDE_F(f,fstride);
+ STRIDE_F(f,fstride);
STRIDE_F(norm, normal->stride);
}
}
-static void build_f2( GLfloat *f,
+static void build_f2( GLfloat *f,
GLuint fstride,
const GLvector3f *normal,
const GLvector4f *eye )
@@ -218,7 +218,7 @@ static void build_f2( GLfloat *f,
for (i=0;i<count;i++) {
GLfloat u[3], two_nu;
- COPY_2V( u, coord );
+ COPY_2V( u, coord );
u[2] = 0;
NORMALIZE_3FV( u );
two_nu = 2.0F * DOT3(norm,u);
@@ -239,14 +239,14 @@ typedef void (*build_f_func)( GLfloat *f,
-/* Just treat 4-vectors as 3-vectors.
+/* Just treat 4-vectors as 3-vectors.
*/
static build_f_func build_f_tab[5] = {
0,
0,
build_f2,
build_f3,
- build_f3
+ build_f3
};
@@ -262,22 +262,22 @@ static void texgen_reflection_map_nv( GLcontext *ctx,
build_f_tab[VB->EyePtr->size]( out->start,
out->stride,
- VB->NormalPtr,
- VB->EyePtr );
-
+ VB->NormalPtr,
+ VB->EyePtr );
+
if (in) {
out->flags |= (in->flags & VEC_SIZE_FLAGS) | VEC_SIZE_3;
out->count = in->count;
out->size = MAX2(in->size, 3);
- if (in->size == 4)
+ if (in->size == 4)
_mesa_copy_tab[0][0x8](out, in, 0);
- }
+ }
else {
out->flags |= VEC_SIZE_3;
out->size = 3;
out->count = in->count;
}
-
+
}
@@ -289,7 +289,7 @@ static void texgen_normal_map_nv( GLcontext *ctx,
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
GLvector4f *in = VB->TexCoordPtr[unit];
GLvector4f *out = &store->texcoord[unit];
- GLvector3f *normal = VB->NormalPtr;
+ GLvector3f *normal = VB->NormalPtr;
GLfloat (*texcoord)[4] = (GLfloat (*)[4])out->start;
GLuint count = VB->Count;
GLuint i;
@@ -306,9 +306,9 @@ static void texgen_normal_map_nv( GLcontext *ctx,
out->flags |= (in->flags & VEC_SIZE_FLAGS) | VEC_SIZE_3;
out->count = in->count;
out->size = MAX2(in->size, 3);
- if (in->size == 4)
+ if (in->size == 4)
_mesa_copy_tab[0][0x8](out, in, 0);
- }
+ }
else {
out->flags |= VEC_SIZE_3;
out->size = 3;
@@ -330,10 +330,10 @@ static void texgen_sphere_map( GLcontext *ctx,
GLfloat (*f)[3] = store->tmp_f;
GLfloat *m = store->tmp_m;
- (build_m_tab[VB->EyePtr->size])( store->tmp_f,
- store->tmp_m,
- VB->NormalPtr,
- VB->EyePtr );
+ (build_m_tab[VB->EyePtr->size])( store->tmp_f,
+ store->tmp_m,
+ VB->NormalPtr,
+ VB->EyePtr );
for (i=0;i<count;i++) {
texcoord[i][0] = f[i][0] * m[i] + 0.5F;
@@ -344,7 +344,7 @@ static void texgen_sphere_map( GLcontext *ctx,
out->size = MAX2(in->size,2);
out->count = in->count;
out->flags |= (in->flags & VEC_SIZE_FLAGS) | VEC_SIZE_2;
- if (in->size > 2)
+ if (in->size > 2)
_mesa_copy_tab[0][all_bits[in->size] & ~0x3](out, in, 0);
} else {
out->size = 2;
@@ -355,7 +355,7 @@ static void texgen_sphere_map( GLcontext *ctx,
-static void texgen( GLcontext *ctx,
+static void texgen( GLcontext *ctx,
struct texgen_stage_data *store,
GLuint unit )
{
@@ -376,9 +376,9 @@ static void texgen( GLcontext *ctx,
if (texUnit->_GenFlags & TEXGEN_NEED_M) {
- build_m_tab[in->size]( store->tmp_f, store->tmp_m, normal, eye );
+ build_m_tab[in->size]( store->tmp_f, store->tmp_m, normal, eye );
} else if (texUnit->_GenFlags & TEXGEN_NEED_F) {
- build_f_tab[in->size]( (GLfloat *)store->tmp_f, 3, normal, eye );
+ build_f_tab[in->size]( (GLfloat *)store->tmp_f, 3, normal, eye );
}
if (!in) {
@@ -399,7 +399,7 @@ static void texgen( GLcontext *ctx,
out->size = MAX2(in->size, store->TexgenSize[unit]);
out->flags |= (in->flags & VEC_SIZE_FLAGS) | texUnit->TexGenEnabled;
out->count = in->count;
-
+
holes = ~all_bits[in->size] & store->TexgenHoles[unit];
}
@@ -414,20 +414,20 @@ static void texgen( GLcontext *ctx,
switch (texUnit->GenModeS) {
case GL_OBJECT_LINEAR:
(_mesa_dotprod_tab[0][obj->size])((GLfloat *)out->data,
- sizeof(out->data[0]), obj,
+ sizeof(out->data[0]), obj,
texUnit->ObjectPlaneS, 0);
break;
case GL_EYE_LINEAR:
- (_mesa_dotprod_tab[0][eye->size])((GLfloat *)out->data,
+ (_mesa_dotprod_tab[0][eye->size])((GLfloat *)out->data,
sizeof(out->data[0]), eye,
texUnit->EyePlaneS, 0);
break;
- case GL_SPHERE_MAP:
+ case GL_SPHERE_MAP:
for (indata=in->start,i=0 ; i<count ;i++, STRIDE_F(indata,in->stride))
texcoord[i][0] = indata[0] * m[i] + 0.5F;
break;
- case GL_REFLECTION_MAP_NV:
- for (i=0;i<count;i++)
+ case GL_REFLECTION_MAP_NV:
+ for (i=0;i<count;i++)
texcoord[i][0] = f[i][0];
break;
case GL_NORMAL_MAP_NV: {
@@ -440,27 +440,27 @@ static void texgen( GLcontext *ctx,
default:
_mesa_problem(ctx, "Bad S texgen");
}
- }
+ }
if (texUnit->TexGenEnabled & T_BIT) {
GLuint i;
switch (texUnit->GenModeT) {
case GL_OBJECT_LINEAR:
- (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][1]),
- sizeof(out->data[0]), obj,
+ (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][1]),
+ sizeof(out->data[0]), obj,
texUnit->ObjectPlaneT, 0);
break;
case GL_EYE_LINEAR:
- (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][1]),
- sizeof(out->data[0]), eye,
+ (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][1]),
+ sizeof(out->data[0]), eye,
texUnit->EyePlaneT, 0);
- break;
- case GL_SPHERE_MAP:
- for (indata=in->start,i=0; i<count ;i++,STRIDE_F(indata,in->stride))
+ break;
+ case GL_SPHERE_MAP:
+ for (indata=in->start,i=0; i<count ;i++,STRIDE_F(indata,in->stride))
texcoord[i][1] = indata[1] * m[i] + 0.5F;
- break;
- case GL_REFLECTION_MAP_NV:
- for (i=0;i<count;i++)
+ break;
+ case GL_REFLECTION_MAP_NV:
+ for (i=0;i<count;i++)
texcoord[i][0] = f[i][0];
break;
case GL_NORMAL_MAP_NV: {
@@ -479,17 +479,17 @@ static void texgen( GLcontext *ctx,
GLuint i;
switch (texUnit->GenModeR) {
case GL_OBJECT_LINEAR:
- (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][2]),
- sizeof(out->data[0]), obj,
+ (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][2]),
+ sizeof(out->data[0]), obj,
texUnit->ObjectPlaneR, 0);
break;
case GL_EYE_LINEAR:
- (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][2]),
+ (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][2]),
sizeof(out->data[0]), eye,
texUnit->EyePlaneR, 0);
break;
- case GL_REFLECTION_MAP_NV:
- for (i=0;i<count;i++)
+ case GL_REFLECTION_MAP_NV:
+ for (i=0;i<count;i++)
texcoord[i][2] = f[i][2];
break;
case GL_NORMAL_MAP_NV: {
@@ -507,12 +507,12 @@ static void texgen( GLcontext *ctx,
if (texUnit->TexGenEnabled & Q_BIT) {
switch (texUnit->GenModeQ) {
case GL_OBJECT_LINEAR:
- (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][3]),
- sizeof(out->data[0]), obj,
+ (_mesa_dotprod_tab[0][obj->size])(&(out->data[0][3]),
+ sizeof(out->data[0]), obj,
texUnit->ObjectPlaneQ, 0);
break;
case GL_EYE_LINEAR:
- (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][3]),
+ (_mesa_dotprod_tab[0][eye->size])(&(out->data[0][3]),
sizeof(out->data[0]), eye,
texUnit->EyePlaneQ, 0);
break;
@@ -524,14 +524,14 @@ static void texgen( GLcontext *ctx,
-static GLboolean run_texgen_stage( GLcontext *ctx,
+static GLboolean run_texgen_stage( GLcontext *ctx,
struct gl_pipeline_stage *stage )
{
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+ struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
struct texgen_stage_data *store = TEXGEN_STAGE_DATA( stage );
GLuint i;
- for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
+ for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
if (ctx->_Enabled & ENABLE_TEXGEN(i)) {
if (stage->changed_inputs & (VERT_EYE | VERT_NORM | VERT_TEX(i)))
store->TexgenFunc[i]( ctx, store, i );
@@ -545,7 +545,7 @@ static GLboolean run_texgen_stage( GLcontext *ctx,
-static GLboolean run_validate_texgen_stage( GLcontext *ctx,
+static GLboolean run_validate_texgen_stage( GLcontext *ctx,
struct gl_pipeline_stage *stage )
{
struct texgen_stage_data *store = TEXGEN_STAGE_DATA(stage);
@@ -565,11 +565,11 @@ static GLboolean run_validate_texgen_stage( GLcontext *ctx,
sz = 2;
else
sz = 1;
-
+
store->TexgenSize[i] = sz;
store->TexgenHoles[i] = (all_bits[sz] & ~texUnit->TexGenEnabled);
store->TexgenFunc[i] = texgen;
-
+
if (texUnit->TexGenEnabled == (S_BIT|T_BIT|R_BIT)) {
if (texUnit->_GenFlags == TEXGEN_REFLECTION_MAP_NV) {
store->TexgenFunc[i] = texgen_reflection_map_nv;
@@ -605,8 +605,8 @@ static void check_texgen( GLcontext *ctx, struct gl_pipeline_stage *stage )
if (ctx->Texture._GenFlags & TEXGEN_NEED_NORMALS)
inputs |= VERT_NORM;
- for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
- if (ctx->_Enabled & ENABLE_TEXGEN(i))
+ for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++)
+ if (ctx->_Enabled & ENABLE_TEXGEN(i))
{
outputs |= VERT_TEX(i);
@@ -627,16 +627,16 @@ static void check_texgen( GLcontext *ctx, struct gl_pipeline_stage *stage )
stage->outputs = outputs;
}
}
-
+
/* Called the first time stage->run() is invoked.
*/
-static GLboolean alloc_texgen_data( GLcontext *ctx,
+static GLboolean alloc_texgen_data( GLcontext *ctx,
struct gl_pipeline_stage *stage )
{
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+ struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
struct texgen_stage_data *store;
GLuint i;
@@ -666,10 +666,10 @@ static void free_texgen_data( struct gl_pipeline_stage *stage )
if (store) {
for (i = 0 ; i < MAX_TEXTURE_UNITS ; i++)
- if (store->texcoord[i].data)
+ if (store->texcoord[i].data)
_mesa_vector4f_free( &store->texcoord[i] );
-
+
if (store->tmp_f) FREE( store->tmp_f );
if (store->tmp_m) FREE( store->tmp_m );
FREE( store );
@@ -678,9 +678,9 @@ static void free_texgen_data( struct gl_pipeline_stage *stage )
}
-
-const struct gl_pipeline_stage _tnl_texgen_stage =
-{
+
+const struct gl_pipeline_stage _tnl_texgen_stage =
+{
"texgen",
_NEW_TEXTURE, /* when to call check() */
_NEW_TEXTURE, /* when to invalidate stored data */
@@ -690,5 +690,3 @@ const struct gl_pipeline_stage _tnl_texgen_stage =
check_texgen, /* check */
alloc_texgen_data /* run -- initially set to alloc data */
};
-
-