-/* $Id: dlist.c,v 1.10 1999/10/16 11:31:50 brianp Exp $ */
+/* $Id: dlist.c,v 1.11 1999/10/19 18:37:03 keithw Exp $ */
/*
* Mesa 3-D graphics library
InstSize[OPCODE_WINDOW_POS] = 5;
InstSize[OPCODE_CONTINUE] = 2;
InstSize[OPCODE_ERROR] = 3;
- InstSize[OPCODE_VERTEX_CASSETTE] = 2;
+ InstSize[OPCODE_VERTEX_CASSETTE] = 9;
InstSize[OPCODE_END_OF_LIST] = 1;
/* GL_ARB_multitexture */
InstSize[OPCODE_ACTIVE_TEXTURE] = 2;
void gl_compile_cassette( GLcontext *ctx )
{
- Node *n = alloc_instruction( ctx, OPCODE_VERTEX_CASSETTE, 1 );
- struct immediate *new_im = gl_immediate_alloc(ctx);
- struct immediate *im = ctx->input;
-
- if (!n || !new_im) {
- if (n)
- FREE(n);
- if (new_im)
- gl_immediate_free(new_im);
+ Node *n = alloc_instruction( ctx, OPCODE_VERTEX_CASSETTE, 8 );
+ struct immediate *im = ctx->input;
+
+ if (!n)
return;
- }
+
/* Do some easy optimizations of the cassette.
*/
- if (im->v.Obj.size < 4 && im->Count > 15) {
+#if 0
+ if (0 && im->v.Obj.size < 4 && im->Count > 15) {
im->Bounds = (GLfloat (*)[3]) MALLOC(6 * sizeof(GLfloat));
(gl_calc_bound_tab[im->v.Obj.size])( im->Bounds, &im->v.Obj );
}
+#endif
n[1].data = (void *)im;
- SET_IMMEDIATE( ctx, new_im );
+ n[2].ui = im->Start;
+ n[3].ui = im->Count;
+ n[4].ui = im->BeginState;
+ n[5].ui = im->OrFlag;
+ n[6].ui = im->AndFlag;
+ n[7].ui = im->LastData;
+ n[8].ui = im->LastPrimitive;
+
+ if (im->Count > VB_MAX - 4) {
+
+ struct immediate *new_im = gl_immediate_alloc(ctx);
+ if (!new_im) return;
+ SET_IMMEDIATE( ctx, new_im );
+ gl_reset_input( ctx );
+
+ } else {
+ im->Count++;;
+ im->Start = im->Count; /* don't clear anything in reset_input */
+ im->ref_count++;
+
+ im->Primitive[im->Start] = ctx->Current.Primitive;
+ im->LastPrimitive = im->Start;
+ im->BeginState = VERT_BEGIN_0;
+ im->OrFlag = 0;
+ im->AndFlag = ~0;
+
+ if (0)
+ fprintf(stderr, "in compile_cassette, BeginState is %x\n",
+ im->BeginState);
+ }
}
/* KW: Compile commands
case OPCODE_ERROR:
gl_error( ctx, n[1].e, (const char *) n[2].data );
break;
- case OPCODE_VERTEX_CASSETTE:
+ case OPCODE_VERTEX_CASSETTE: {
+ struct immediate *IM;
+
if (ctx->NewState)
gl_update_state(ctx);
if (ctx->CompileCVAFlag) {
if (!ctx->CVA.elt.pipeline_valid)
gl_build_immediate_pipeline( ctx );
+
+ IM = (struct immediate *) n[1].data;
+ IM->Start = n[2].ui;
+ IM->Count = n[3].ui;
+ IM->BeginState = n[4].ui;
+ IM->OrFlag = n[5].ui;
+ IM->AndFlag = n[6].ui;
+ IM->LastData = n[7].ui;
+ IM->LastPrimitive = n[8].ui;
+
if ((MESA_VERBOSE & VERBOSE_DISPLAY_LIST) &&
(MESA_VERBOSE & VERBOSE_IMMEDIATE))
gl_print_cassette( (struct immediate *) n[1].data, 0, ~0 );
+ if (0)
+ fprintf(stderr, "Run cassette %d, rows %d..%d, beginstate %x\n",
+ IM->id,
+ IM->Start, IM->Count, IM->BeginState);
+
gl_fixup_cassette( ctx, (struct immediate *) n[1].data );
gl_execute_cassette( ctx, (struct immediate *) n[1].data );
break;
+ }
case OPCODE_ACCUM:
gl_Accum( ctx, n[1].e, n[2].f );
break;
/* KW: Put back the old input pointer.
*/
- FREE( ctx->input );
+ if (--ctx->input->ref_count == 0)
+ gl_immediate_free( ctx->input );
+
SET_IMMEDIATE( ctx, ctx->VB->IM );
gl_reset_input( ctx );
case OPCODE_TRANSLATE:
fprintf(f,"Translate %g %g %g\n", n[1].f, n[2].f, n[3].f );
break;
+ case OPCODE_BIND_TEXTURE:
+ fprintf(f,"BindTexture %s %d\n", gl_lookup_enum_by_nr(n[1].ui),
+ n[2].ui);
+ break;
+ case OPCODE_SHADE_MODEL:
+ fprintf(f,"ShadeModel %s\n", gl_lookup_enum_by_nr(n[1].ui));
+ break;
/*
* meta opcodes/commands
fprintf(f,"Error: %s %s\n", enum_string(n[1].e), (const char *)n[2].data );
break;
case OPCODE_VERTEX_CASSETTE:
- fprintf(f,"VERTEX-CASSETTE, id %u, %u elements\n",
+ fprintf(f,"VERTEX-CASSETTE, id %u, rows %u..%u\n",
((struct immediate *) n[1].data)->id,
- ((struct immediate *) n[1].data)->Count - VB_START );
+ n[2].ui,
+ n[3].ui);
+/* gl_print_cassette( (struct immediate *) n[1].data, */
+/* 0, ~0 ); */
break;
case OPCODE_CONTINUE:
fprintf(f,"DISPLAY-LIST-CONTINUE\n");
void mesa_print_display_list( GLuint list )
{
GET_CONTEXT;
- print_list( CC, stdout, list );
+ print_list( CC, stderr, list );
}
-/* $Id: eval.c,v 1.4 1999/10/13 18:42:50 brianp Exp $ */
+/* $Id: eval.c,v 1.5 1999/10/19 18:37:03 keithw Exp $ */
/*
* Mesa 3-D graphics library
static void eval_points1( GLfloat outcoord[][4],
- GLfloat coord[][4],
- const GLuint *flags,
- GLfloat du, GLfloat u1 )
+ GLfloat coord[][4],
+ const GLuint *flags,
+ GLuint start,
+ GLfloat du, GLfloat u1 )
{
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & VERT_EVAL_P1)
outcoord[i][0] = coord[i][0] * du + u1;
else if (flags[i] & VERT_EVAL_ANY) {
}
static void eval_points2( GLfloat outcoord[][4],
- GLfloat coord[][4],
- const GLuint *flags,
- GLfloat du, GLfloat u1,
- GLfloat dv, GLfloat v1 )
+ GLfloat coord[][4],
+ const GLuint *flags,
+ GLuint start,
+ GLfloat du, GLfloat u1,
+ GLfloat dv, GLfloat v1 )
{
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & VERT_EVAL_P2) {
outcoord[i][0] = coord[i][0] * du + u1;
outcoord[i][1] = coord[i][1] * dv + v1;
static GLvector4f *eval1_4f( GLvector4f *dest,
GLfloat coord[][4],
- const GLuint *flags,
+ const GLuint *flags,
+ GLuint start,
GLuint dimension,
struct gl_1d_map *map )
{
GLfloat (*to)[4] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
GLfloat u = (coord[i][0] - u1) * du;
ASSIGN_4V(to[i], 0,0,0,1);
}
dest->count = i;
+ dest->start = VEC_ELT(dest, GLfloat, start);
dest->size = MAX2(dest->size, dimension);
dest->flags |= dirty_flags[dimension];
return dest;
static GLvector1ui *eval1_1ui( GLvector1ui *dest,
GLfloat coord[][4],
- const GLuint *flags,
+ const GLuint *flags,
+ GLuint start,
struct gl_1d_map *map )
{
const GLfloat u1 = map->u1;
GLuint *to = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat tmp;
to[i] = (GLuint) (GLint) tmp;
}
+ dest->start = VEC_ELT(dest, GLuint, start);
dest->count = i;
return dest;
}
static GLvector3f *eval1_norm( GLvector3f *dest,
- GLfloat coord[][4],
- GLuint *flags, /* not const */
- struct gl_1d_map *map )
+ GLfloat coord[][4],
+ GLuint *flags, /* not const */
+ GLuint start,
+ struct gl_1d_map *map )
{
const GLfloat u1 = map->u1;
const GLfloat du = map->du;
GLfloat (*to)[3] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
GLfloat u = (coord[i][0] - u1) * du;
horner_bezier_curve(map->Points, to[i], u, 3, map->Order);
flags[i+1] |= VERT_NORM; /* reset */
}
+ dest->start = VEC_ELT(dest, GLfloat, start);
dest->count = i;
return dest;
}
static GLvector4ub *eval1_color( GLvector4ub *dest,
- GLfloat coord[][4],
- GLuint *flags, /* not const */
- struct gl_1d_map *map )
+ GLfloat coord[][4],
+ GLuint *flags, /* not const */
+ GLuint start,
+ struct gl_1d_map *map )
{
const GLfloat u1 = map->u1;
const GLfloat du = map->du;
GLubyte (*to)[4] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat fcolor[4];
flags[i+1] |= VERT_RGBA; /* reset */
}
+ dest->start = VEC_ELT(dest, GLubyte, start);
dest->count = i;
return dest;
}
GLvector3f *norm_ptr,
GLfloat coord[][4],
GLuint *flags,
+ GLuint start,
GLuint dimension,
struct gl_2d_map *map )
{
GLfloat (*normal)[3] = norm_ptr->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat v = (coord[i][1] - v1) * dv;
flags[i+1] |= VERT_NORM;
}
+ obj_ptr->start = VEC_ELT(obj_ptr, GLfloat, start);
obj_ptr->count = i;
obj_ptr->size = MAX2(obj_ptr->size, dimension);
obj_ptr->flags |= dirty_flags[dimension];
static GLvector4f *eval2_4f( GLvector4f *dest,
GLfloat coord[][4],
- const GLuint *flags,
+ const GLuint *flags,
+ GLuint start,
GLuint dimension,
struct gl_2d_map *map )
{
GLfloat (*to)[4] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat v = (coord[i][1] - v1) * dv;
map->Uorder, map->Vorder);
}
+ dest->start = VEC_ELT(dest, GLfloat, start);
dest->count = i;
dest->size = MAX2(dest->size, dimension);
dest->flags |= dirty_flags[dimension];
static GLvector3f *eval2_norm( GLvector3f *dest,
GLfloat coord[][4],
GLuint *flags,
+ GLuint start,
struct gl_2d_map *map )
{
const GLfloat u1 = map->u1;
GLfloat (*to)[3] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat v = (coord[i][1] - v1) * dv;
flags[i+1] |= VERT_NORM; /* reset */
}
+ dest->start = VEC_ELT(dest, GLfloat, start);
dest->count = i;
return dest;
}
static GLvector1ui *eval2_1ui( GLvector1ui *dest,
GLfloat coord[][4],
- const GLuint *flags,
+ const GLuint *flags,
+ GLuint start,
struct gl_2d_map *map )
{
const GLfloat u1 = map->u1;
GLuint *to = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat v = (coord[i][1] - v1) * dv;
to[i] = (GLuint) (GLint) tmp;
}
+ dest->start = VEC_ELT(dest, GLuint, start);
dest->count = i;
return dest;
}
static GLvector4ub *eval2_color( GLvector4ub *dest,
GLfloat coord[][4],
GLuint *flags,
+ GLuint start,
struct gl_2d_map *map )
{
const GLfloat u1 = map->u1;
GLubyte (*to)[4] = dest->data;
GLuint i;
- for (i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for (i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
GLfloat u = (coord[i][0] - u1) * du;
GLfloat v = (coord[i][1] - v1) * dv;
flags[i+1] |= VERT_RGBA; /* reset */
}
+ dest->start = VEC_ELT(dest, GLubyte, start);
dest->count = i;
return dest;
}
static GLvector4f *copy_4f( GLvector4f *out, CONST GLvector4f *in,
- const GLuint *flags)
+ const GLuint *flags,
+ GLuint start )
{
GLfloat (*to)[4] = out->data;
GLfloat (*from)[4] = in->data;
GLuint i;
- for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for ( i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (!(flags[i] & VERT_EVAL_ANY))
COPY_4FV( to[i], from[i] );
+ out->start = VEC_ELT(out, GLfloat, start);
return out;
}
static GLvector3f *copy_3f( GLvector3f *out, CONST GLvector3f *in,
- const GLuint *flags)
+ const GLuint *flags,
+ GLuint start )
{
GLfloat (*to)[3] = out->data;
GLfloat (*from)[3] = in->data;
GLuint i;
- for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for ( i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (!(flags[i] & VERT_EVAL_ANY))
COPY_3V( to[i], from[i] );
+ out->start = VEC_ELT(out, GLfloat, start);
return out;
}
-static GLvector4ub *copy_4ub( GLvector4ub *out, CONST GLvector4ub *in,
- const GLuint *flags )
+static GLvector4ub *copy_4ub( GLvector4ub *out,
+ CONST GLvector4ub *in,
+ const GLuint *flags,
+ GLuint start )
{
GLubyte (*to)[4] = out->data;
GLubyte (*from)[4] = in->data;
GLuint i;
- for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for ( i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (!(flags[i] & VERT_EVAL_ANY))
COPY_4UBV( to[i], from[i] );
+ out->start = VEC_ELT(out, GLubyte, start);
return out;
}
-static GLvector1ui *copy_1ui( GLvector1ui *out, CONST GLvector1ui *in,
- const GLuint *flags )
+static GLvector1ui *copy_1ui( GLvector1ui *out,
+ CONST GLvector1ui *in,
+ const GLuint *flags,
+ GLuint start )
{
GLuint *to = out->data;
CONST GLuint *from = in->data;
GLuint i;
- for ( i = VB_START ; !(flags[i] & VERT_END_VB) ; i++)
+ for ( i = start ; !(flags[i] & VERT_END_VB) ; i++)
if (!(flags[i] & VERT_EVAL_ANY))
to[i] = from[i];
+ out->start = VEC_ELT(out, GLuint, start);
return out;
}
GLuint any_eval1 = VB->OrFlag & (VERT_EVAL_C1|VERT_EVAL_P1);
GLuint any_eval2 = VB->OrFlag & (VERT_EVAL_C2|VERT_EVAL_P2);
- GLuint all_eval = VB->AndFlag & VERT_EVAL_ANY;
+ GLuint all_eval = IM->AndFlag & VERT_EVAL_ANY;
/* Handle the degenerate cases.
*/
* work on useful changes.
*/
if (VB->PurgeFlags) {
- if (!any_eval1 && !any_eval2 && all_eval) VB->Count = VB_START;
+ if (!any_eval1 && !any_eval2 && all_eval) VB->Count = VB->Start;
gl_purge_vertices( VB );
if (!any_eval1 && !any_eval2) return;
} else
*/
if (any_eval1 && (VB->OrFlag & VERT_EVAL_P1))
{
- eval_points1( IM->Obj, coord, flags,
+ eval_points1( IM->Obj, coord, flags, IM->Start,
ctx->Eval.MapGrid1du,
ctx->Eval.MapGrid1u1);
if (any_eval2 && (VB->OrFlag & VERT_EVAL_P2))
{
- eval_points2( IM->Obj, coord, flags,
+ eval_points2( IM->Obj, coord, flags, IM->Start,
ctx->Eval.MapGrid2du,
ctx->Eval.MapGrid2u1,
ctx->Eval.MapGrid2dv,
GLvector1ui *out_index = &IM->v.Index;
if (ctx->Eval.Map1Index && any_eval1)
- VB->IndexPtr = eval1_1ui( out_index, coord, flags,
+ VB->IndexPtr = eval1_1ui( out_index, coord, flags, IM->Start,
&ctx->EvalMap.Map1Index );
if (ctx->Eval.Map2Index && any_eval2)
- VB->IndexPtr = eval2_1ui( out_index, coord, flags,
+ VB->IndexPtr = eval2_1ui( out_index, coord, flags, IM->Start,
&ctx->EvalMap.Map2Index );
if (VB->IndexPtr != in_index) {
new_flags |= VERT_INDEX;
if (!all_eval)
- VB->IndexPtr = copy_1ui( out_index, in_index, flags );
+ VB->IndexPtr = copy_1ui( out_index, in_index, flags, IM->Start );
}
}
GLvector4ub *out_color = &IM->v.Color;
if (ctx->Eval.Map1Color4 && any_eval1)
- VB->ColorPtr = eval1_color( out_color, coord, flags,
+ VB->ColorPtr = eval1_color( out_color, coord, flags, IM->Start,
&ctx->EvalMap.Map1Color4 );
if (ctx->Eval.Map2Color4 && any_eval2)
- VB->ColorPtr = eval2_color( out_color, coord, flags,
+ VB->ColorPtr = eval2_color( out_color, coord, flags, IM->Start,
&ctx->EvalMap.Map2Color4 );
if (VB->ColorPtr != in_color) {
new_flags |= VERT_RGBA;
if (!all_eval)
- VB->ColorPtr = copy_4ub( out_color, in_color, flags );
+ VB->ColorPtr = copy_4ub( out_color, in_color, flags, IM->Start );
}
VB->Color[0] = VB->Color[1] = VB->ColorPtr;
GLvector3f *out_normal = &IM->v.Normal;
if (ctx->Eval.Map1Normal && any_eval1)
- VB->NormalPtr = eval1_norm( out_normal, coord, flags,
+ VB->NormalPtr = eval1_norm( out_normal, coord, flags, IM->Start,
&ctx->EvalMap.Map1Normal );
if (ctx->Eval.Map2Normal && any_eval2)
- VB->NormalPtr = eval2_norm( out_normal, coord, flags,
+ VB->NormalPtr = eval2_norm( out_normal, coord, flags, IM->Start,
&ctx->EvalMap.Map2Normal );
if (VB->NormalPtr != in_normal) {
new_flags |= VERT_NORM;
if (!all_eval)
- VB->NormalPtr = copy_3f( out_normal, in_normal, flags );
+ VB->NormalPtr = copy_3f( out_normal, in_normal, flags, IM->Start );
}
}
if (any_eval1) {
if (ctx->Eval.Map1TextureCoord4)
- tc = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Texture4);
+ tc = eval1_4f( out, coord, flags, IM->Start,
+ 4, &ctx->EvalMap.Map1Texture4);
else if (ctx->Eval.Map1TextureCoord3)
- tc = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Texture3);
+ tc = eval1_4f( out, coord, flags, IM->Start, 3,
+ &ctx->EvalMap.Map1Texture3);
else if (ctx->Eval.Map1TextureCoord2)
- tc = eval1_4f( out, coord, flags, 2, &ctx->EvalMap.Map1Texture2);
+ tc = eval1_4f( out, coord, flags, IM->Start, 2,
+ &ctx->EvalMap.Map1Texture2);
else if (ctx->Eval.Map1TextureCoord1)
- tc = eval1_4f( out, coord, flags, 1, &ctx->EvalMap.Map1Texture1);
+ tc = eval1_4f( out, coord, flags, IM->Start, 1,
+ &ctx->EvalMap.Map1Texture1);
}
if (any_eval2) {
if (ctx->Eval.Map2TextureCoord4)
- tc = eval2_4f( out, coord, flags, 4, &ctx->EvalMap.Map2Texture4);
+ tc = eval2_4f( out, coord, flags, IM->Start,
+ 4, &ctx->EvalMap.Map2Texture4);
else if (ctx->Eval.Map2TextureCoord3)
- tc = eval2_4f( out, coord, flags, 3, &ctx->EvalMap.Map2Texture3);
+ tc = eval2_4f( out, coord, flags, IM->Start,
+ 3, &ctx->EvalMap.Map2Texture3);
else if (ctx->Eval.Map2TextureCoord2)
- tc = eval2_4f( out, coord, flags, 2, &ctx->EvalMap.Map2Texture2);
+ tc = eval2_4f( out, coord, flags, IM->Start,
+ 2, &ctx->EvalMap.Map2Texture2);
else if (ctx->Eval.Map2TextureCoord1)
- tc = eval2_4f( out, coord, flags, 1, &ctx->EvalMap.Map2Texture1);
+ tc = eval2_4f( out, coord, flags, IM->Start,
+ 1, &ctx->EvalMap.Map2Texture1);
}
if (tc != in) {
new_flags |= VERT_TEX_ANY(0); /* fix for sizes.. */
if (!all_eval)
- tc = copy_4f( out, in, flags );
+ tc = copy_4f( out, in, flags, IM->Start );
}
VB->TexCoordPtr[0] = tc;
if (any_eval1) {
if (ctx->Eval.Map1Vertex4)
- obj = eval1_4f( out, coord, flags, 4, &ctx->EvalMap.Map1Vertex4);
+ obj = eval1_4f( out, coord, flags, IM->Start,
+ 4, &ctx->EvalMap.Map1Vertex4);
else
- obj = eval1_4f( out, coord, flags, 3, &ctx->EvalMap.Map1Vertex3);
+ obj = eval1_4f( out, coord, flags, IM->Start,
+ 3, &ctx->EvalMap.Map1Vertex3);
}
if (any_eval2) {
if (ctx->Eval.Map2Vertex4)
{
if (ctx->Eval.AutoNormal && (req & VERT_NORM))
- obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 4,
- &ctx->EvalMap.Map2Vertex4 );
+ obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start,
+ 4, &ctx->EvalMap.Map2Vertex4 );
else
- obj = eval2_4f( out, coord, flags, 4,
- &ctx->EvalMap.Map2Vertex4);
+ obj = eval2_4f( out, coord, flags, IM->Start,
+ 4, &ctx->EvalMap.Map2Vertex4);
}
else if (ctx->Eval.Map2Vertex3)
{
if (ctx->Eval.AutoNormal && (req & VERT_NORM))
- obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, 3,
- &ctx->EvalMap.Map2Vertex3 );
+ obj = eval2_obj_norm( out, VB->NormalPtr, coord, flags, IM->Start,
+ 3, &ctx->EvalMap.Map2Vertex3 );
else
- obj = eval2_4f( out, coord, flags, 3,
- &ctx->EvalMap.Map2Vertex3 );
+ obj = eval2_4f( out, coord, flags, IM->Start,
+ 3, &ctx->EvalMap.Map2Vertex3 );
}
}
if (obj != in && !all_eval)
- obj = copy_4f( out, in, flags );
+ obj = copy_4f( out, in, flags, IM->Start );
VB->ObjPtr = obj;
}
if (all_eval) {
for (i = 0 ; i < count ; i++)
flags[i] = oldflags[i] | new_flags;
- VB->AndFlag |= new_flags;
} else {
GLuint andflag = ~0;
for (i = 0 ; i < count ; i++) {
flags[i] = oldflags[i] | new_flags;
andflag &= flags[i];
}
- VB->AndFlag = andflag;
}
}
}