Ignore:
Timestamp:
May 23, 2000, 10:41:28 PM (25 years ago)
Author:
jeroen
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/mesa/vbcull.c

    r2962 r3598  
    1 /* $Id: vbcull.c,v 1.2 2000-03-01 18:49:39 jeroen Exp $ */
     1/* $Id: vbcull.c,v 1.3 2000-05-23 20:41:01 jeroen Exp $ */
    22
    33/*
    44 * Mesa 3-D graphics library
    5  * Version:  3.1
     5 * Version:  3.3
    66 *
    77 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
     
    3333#include "all.h"
    3434#else
    35 #ifndef XFree86Server
    36 #include <stdio.h>
    37 #else
    38 #include "GL/xf86glx.h"
    39 #endif
     35#include "glheader.h"
    4036#include "types.h"
    4137#include "context.h"
     
    4541#include "vbrender.h"
    4642#include "xform.h"
     43#include "mem.h"
    4744#endif
    4845
     
    8380
    8481static GLuint gl_cull_points( struct vertex_buffer *VB,
    85                               GLuint start,
    86                               GLuint count,
    87                               GLuint parity,
    88                               CONST GLfloat (*proj)[4])
     82                              GLuint start,
     83                              GLuint count,
     84                              GLuint parity,
     85                              CONST GLfloat (*proj)[4])
    8986{
    9087   const GLubyte *clipmask = VB->ClipMask;
     
    9996   for (i=start+1;i<count;i++) {
    10097      if (clipmask[i] == 0)
    101         cullmask[i] = VERT_FACE_FRONT | PRIM_FACE_FRONT;
     98        cullmask[i] = VERT_FACE_FRONT | PRIM_FACE_FRONT;
    10299      else {
    103         cullcount++;
     100        cullcount++;
    104101      }
    105102   }
     
    112109 */
    113110static GLuint gl_cull_points_neither( struct vertex_buffer *VB,
    114                                       GLuint start,
    115                                       GLuint count,
    116                                       GLuint parity,
    117                                       CONST GLfloat (*proj)[4])
     111                                      GLuint start,
     112                                      GLuint count,
     113                                      GLuint parity,
     114                                      CONST GLfloat (*proj)[4])
    118115{
    119116   GLubyte unculled_prim = VERT_FACE_FRONT|PRIM_FACE_FRONT;
     
    126123
    127124
    128 #define CULL_LINE( i1, i, nr )                                          \
    129 do {                                                                    \
    130    GLubyte ClipOr = VB->ClipMask[i1] | VB->ClipMask[i];                  \
    131                                                                         \
    132    if (ClipOr) {                                                        \
    133       if (VB->ClipMask[i1] & VB->ClipMask[i] & CLIP_ALL_BITS) {          \
    134          cullcount+=nr;                                                  \
    135       }                                                                  \
    136       else {                                                            \
    137          cullmask[i1] |= VERT_FACE_FRONT;                                \
    138         cullmask[i] |= VERT_FACE_FRONT | PRIM_FACE_FRONT | PRIM_CLIPPED; \
    139       }                                                                  \
    140    } else {                                                              \
    141       cullmask[i1] |= VERT_FACE_FRONT;                                  \
    142       cullmask[i] |= VERT_FACE_FRONT | PRIM_FACE_FRONT;                  \
    143    }                                                                    \
     125#define CULL_LINE( i1, i, nr )                                          \
     126do {                                                                    \
     127   GLubyte ClipOr = VB->ClipMask[i1] | VB->ClipMask[i];                  \
     128                                                                        \
     129   if (ClipOr) {                                                        \
     130      if (VB->ClipMask[i1] & VB->ClipMask[i] & CLIP_ALL_BITS) {          \
     131         cullcount+=nr;                                                  \
     132      }                                                                  \
     133      else {                                                            \
     134         cullmask[i1] |= VERT_FACE_FRONT;                                \
     135        cullmask[i] |= VERT_FACE_FRONT | PRIM_FACE_FRONT | PRIM_CLIPPED; \
     136      }                                                                  \
     137   } else {                                                              \
     138      cullmask[i1] |= VERT_FACE_FRONT;                                  \
     139      cullmask[i] |= VERT_FACE_FRONT | PRIM_FACE_FRONT;                  \
     140   }                                                                    \
    144141} while (0)
    145142
     
    147144
    148145static GLuint gl_cull_lines( struct vertex_buffer *VB,
    149                              GLuint start,
    150                              GLuint count,
    151                              GLuint parity,
    152                              CONST GLfloat (*proj)[4])
     146                             GLuint start,
     147                             GLuint count,
     148                             GLuint parity,
     149                             CONST GLfloat (*proj)[4])
    153150{
    154151   GLubyte *cullmask = VB->CullMask;
     
    172169
    173170static GLuint gl_cull_line_strip( struct vertex_buffer *VB,
    174                                   GLuint start,
    175                                   GLuint count,
    176                                   GLuint parity,
    177                                   CONST GLfloat (*proj)[4])
     171                                  GLuint start,
     172                                  GLuint count,
     173                                  GLuint parity,
     174                                  CONST GLfloat (*proj)[4])
    178175{
    179176   GLubyte *cullmask = VB->CullMask;
     
    198195
    199196static GLuint gl_cull_line_loop( struct vertex_buffer *VB,
    200                                 GLuint start,
    201                                 GLuint count,
    202                                 GLuint parity,
    203                                 CONST GLfloat (*proj)[4])
     197                                GLuint start,
     198                                GLuint count,
     199                                GLuint parity,
     200                                CONST GLfloat (*proj)[4])
    204201{
    205202   GLuint cullcount = 0;
     
    221218
    222219
    223 #define CULL_TRI( do_clip, do_area, i2, i1, i0, parity, nr )            \
    224 do {                                                                    \
    225    GLubyte ClipOr = 0;                                                  \
    226    if (do_clip) {                                                       \
    227       ClipOr = (VB->ClipMask[i2] |                                      \
    228                 VB->ClipMask[i1] |                                      \
    229                 VB->ClipMask[i0]);                                      \
    230    }                                                                    \
    231                                                                         \
    232    if (do_clip && (ClipOr&CLIP_ALL_BITS))                               \
    233    {                                                                    \
    234       if (VB->ClipMask[i2] & VB->ClipMask[i1] & VB->ClipMask[i0] &      \
    235           CLIP_ALL_BITS)                                                \
    236       {                                                                 \
    237          cullcount+=nr;                                                 \
    238       }                                                                 \
    239       else                                                              \
    240       {                                                                 \
    241          cullmask[i0]   = cull_faces | PRIM_CLIPPED;                    \
    242          cullmask[i1] |= cull_faces;                                    \
    243          cullmask[i2] |= cull_faces;                                    \
    244       }                                                                 \
    245    }                                                                    \
    246    else                                                                 \
    247    {                                                                    \
    248       GLfloat area;                                                     \
    249       GLubyte face_flags;                                               \
    250                                                                         \
    251       if (do_area) {                                                    \
    252          area = ((proj[i2][0] - proj[i0][0]) *                          \
    253                  (proj[i1][1] - proj[i0][1]) -                          \
    254                  (proj[i2][1] - proj[i0][1]) *                          \
    255                  (proj[i1][0] - proj[i0][0]));                          \
    256                                                                         \
    257          face_flags = (((area<0.0F) ^ parity) + 1) & cull_faces;        \
    258       } else {                                                          \
    259          face_flags = cull_faces;                                       \
    260       }                                                                 \
    261                                                                         \
    262       if (!do_area || face_flags)                                       \
    263       {                                                                 \
    264          cullmask[i0]  = face_flags | (face_flags << PRIM_FLAG_SHIFT);  \
    265          cullmask[i1] |= face_flags;                                    \
    266          cullmask[i2] |= face_flags;                                    \
    267          if (do_clip && ClipOr) cullmask[i0] |= PRIM_CLIPPED;           \
    268       }                                                                 \
    269       else                                                              \
    270       {                                                                 \
    271          cullcount+=nr;                                                 \
    272       }                                                                 \
    273    }                                                                    \
     220#define CULL_TRI( do_clip, do_area, i2, i1, i0, parity, nr )            \
     221do {                                                                    \
     222   GLubyte ClipOr = 0;                                                  \
     223   if (do_clip) {                                                       \
     224      ClipOr = (VB->ClipMask[i2] |                                      \
     225                VB->ClipMask[i1] |                                      \
     226                VB->ClipMask[i0]);                                      \
     227   }                                                                    \
     228                                                                        \
     229   if (do_clip && (ClipOr&CLIP_ALL_BITS))                               \
     230   {                                                                    \
     231      if (VB->ClipMask[i2] & VB->ClipMask[i1] & VB->ClipMask[i0] &      \
     232          CLIP_ALL_BITS)                                                \
     233      {                                                                 \
     234         cullcount+=nr;                                                 \
     235      }                                                                 \
     236      else                                                              \
     237      {                                                                 \
     238         cullmask[i0]   = cull_faces | PRIM_CLIPPED;                    \
     239         cullmask[i1] |= cull_faces;                                    \
     240         cullmask[i2] |= cull_faces;                                    \
     241      }                                                                 \
     242   }                                                                    \
     243   else                                                                 \
     244   {                                                                    \
     245      GLfloat area;                                                     \
     246      GLubyte face_flags;                                               \
     247                                                                        \
     248      if (do_area) {                                                    \
     249         area = ((proj[i2][0] - proj[i0][0]) *                          \
     250                 (proj[i1][1] - proj[i0][1]) -                          \
     251                 (proj[i2][1] - proj[i0][1]) *                          \
     252                 (proj[i1][0] - proj[i0][0]));                          \
     253                                                                        \
     254         face_flags = (((area<0.0F) ^ parity) + 1) & cull_faces;        \
     255      } else {                                                          \
     256         face_flags = cull_faces;                                       \
     257      }                                                                 \
     258                                                                        \
     259      if (!do_area || face_flags)                                       \
     260      {                                                                 \
     261         cullmask[i0]  = face_flags | (face_flags << PRIM_FLAG_SHIFT);  \
     262         cullmask[i1] |= face_flags;                                    \
     263         cullmask[i2] |= face_flags;                                    \
     264         if (do_clip && ClipOr) cullmask[i0] |= PRIM_CLIPPED;           \
     265      }                                                                 \
     266      else                                                              \
     267      {                                                                 \
     268         cullcount+=nr;                                                 \
     269      }                                                                 \
     270   }                                                                    \
    274271} while (0)
    275272
     
    278275
    279276
    280 #define CULL_QUAD( do_clip, do_area, i3, i2, i1, i, nr )                \
    281 do {                                                                    \
    282    GLubyte ClipOr = 0;                                                  \
    283                                                                         \
    284    if (do_clip) {                                                       \
    285       ClipOr = (VB->ClipMask[i3] |                                      \
    286                 VB->ClipMask[i2] |                                      \
    287                 VB->ClipMask[i1] |                                      \
    288                 VB->ClipMask[i]);                                       \
    289    }                                                                    \
    290                                                                         \
    291    if (do_clip && (ClipOr&CLIP_ALL_BITS))                               \
    292    {                                                                    \
    293       if (VB->ClipMask[i3] & VB->ClipMask[i2] &                         \
    294           VB->ClipMask[i1] & VB->ClipMask[i] &                          \
    295           CLIP_ALL_BITS)                                                \
    296       {                                                                 \
    297          cullcount+=nr;                                                 \
    298       }                                                                 \
    299       else                                                              \
    300       {                                                                 \
    301          cullmask[i] = cull_faces | PRIM_CLIPPED;                       \
    302          cullmask[i1] = cull_faces | PRIM_CLIPPED;                      \
    303          cullmask[i2] |= cull_faces;                    \
    304          cullmask[i3] |= cull_faces;                                    \
    305       }                                                                 \
    306    }                                                                    \
    307    else                                                                 \
    308    {                                                                    \
    309       GLfloat area;                                                     \
    310       GLubyte face_flags;                                               \
    311                                                                         \
    312       if (do_area) {                                                    \
    313          area = ((proj[i1][0] - proj[i3][0]) * /* ex */                 \
    314                  (proj[i ][1] - proj[i2][1]) - /* fy */                 \
    315                  (proj[i1][1] - proj[i3][1]) * /* ey */                 \
    316                  (proj[i ][0] - proj[i2][0])); /* fx */                 \
    317                                                                         \
    318          face_flags = (((area<0.0F) ^ face_bit) + 1) & cull_faces;      \
    319       } else {                                                          \
    320          face_flags = cull_faces;                                       \
    321       }                                                                 \
    322                                                                         \
    323       if (do_area && !face_flags)                                       \
    324       {                                                                 \
    325          cullcount+=nr;                                                 \
    326       }                                                                 \
    327       else                                                              \
    328       {                                                                 \
    329          cullmask[i]  = face_flags | (face_flags<<PRIM_FLAG_SHIFT);     \
    330          cullmask[i1] = face_flags | (face_flags<<PRIM_FLAG_SHIFT);     \
    331          cullmask[i2] |= face_flags;                                    \
    332          cullmask[i3] |= face_flags;                                    \
    333          if (ClipOr)                                                    \
    334             cullmask[i] |= PRIM_CLIPPED;                                \
    335       }                                                                 \
    336    }                                                                    \
     277#define CULL_QUAD( do_clip, do_area, i3, i2, i1, i, nr )                \
     278do {                                                                    \
     279   GLubyte ClipOr = 0;                                                  \
     280                                                                        \
     281   if (do_clip) {                                                       \
     282      ClipOr = (VB->ClipMask[i3] |                                      \
     283                VB->ClipMask[i2] |                                      \
     284                VB->ClipMask[i1] |                                      \
     285                VB->ClipMask[i]);                                       \
     286   }                                                                    \
     287                                                                        \
     288   if (do_clip && (ClipOr&CLIP_ALL_BITS))                               \
     289   {                                                                    \
     290      if (VB->ClipMask[i3] & VB->ClipMask[i2] &                         \
     291          VB->ClipMask[i1] & VB->ClipMask[i] &                          \
     292          CLIP_ALL_BITS)                                                \
     293      {                                                                 \
     294         cullcount+=nr;                                                 \
     295      }                                                                 \
     296      else                                                              \
     297      {                                                                 \
     298         cullmask[i] = cull_faces | PRIM_CLIPPED;                       \
     299         cullmask[i1] = cull_faces | PRIM_CLIPPED;                      \
     300         cullmask[i2] |= cull_faces;                    \
     301         cullmask[i3] |= cull_faces;                                    \
     302      }                                                                 \
     303   }                                                                    \
     304   else                                                                 \
     305   {                                                                    \
     306      GLfloat area;                                                     \
     307      GLubyte face_flags;                                               \
     308                                                                        \
     309      if (do_area) {                                                    \
     310         area = ((proj[i1][0] - proj[i3][0]) * /* ex */                 \
     311                 (proj[i ][1] - proj[i2][1]) - /* fy */                 \
     312                 (proj[i1][1] - proj[i3][1]) * /* ey */                 \
     313                 (proj[i ][0] - proj[i2][0])); /* fx */                 \
     314                                                                        \
     315         face_flags = (((area<0.0F) ^ face_bit) + 1) & cull_faces;      \
     316      } else {                                                          \
     317         face_flags = cull_faces;                                       \
     318      }                                                                 \
     319                                                                        \
     320      if (do_area && !face_flags)                                       \
     321      {                                                                 \
     322         cullcount+=nr;                                                 \
     323      }                                                                 \
     324      else                                                              \
     325      {                                                                 \
     326         cullmask[i]  = face_flags | (face_flags<<PRIM_FLAG_SHIFT);     \
     327         cullmask[i1] = face_flags | (face_flags<<PRIM_FLAG_SHIFT);     \
     328         cullmask[i2] |= face_flags;                                    \
     329         cullmask[i3] |= face_flags;                                    \
     330         if (ClipOr)                                                    \
     331            cullmask[i] |= PRIM_CLIPPED;                                \
     332      }                                                                 \
     333   }                                                                    \
    337334} while(0)
    338335
     
    357354
    358355static GLuint gl_cull_dummy_prim( struct vertex_buffer *VB,
    359                                   GLuint start,
    360                                   GLuint count,
    361                                   GLuint parity,
    362                                   CONST GLfloat (*proj)[4])
     356                                  GLuint start,
     357                                  GLuint count,
     358                                  GLuint parity,
     359                                  CONST GLfloat (*proj)[4])
    363360{
    364361   (void) VB;
     
    380377 */
    381378static GLuint gl_copy_last_cull( struct vertex_buffer *VB,
    382                                 GLuint start, GLuint count,
    383                                 GLuint ovf, CONST GLfloat (*proj)[4])
     379                                GLuint start, GLuint count,
     380                                GLuint ovf, CONST GLfloat (*proj)[4])
    384381{
    385382   const GLcontext *ctx = VB->ctx;
     
    399396
    400397static GLuint gl_copy_first_and_last_cull( struct vertex_buffer *VB,
    401                                            GLuint start,
    402                                            GLuint count, GLuint ovf,
    403                                            CONST GLfloat (*proj)[4] )
     398                                           GLuint start,
     399                                           GLuint count, GLuint ovf,
     400                                           CONST GLfloat (*proj)[4] )
    404401{
    405402   const GLcontext *ctx = VB->ctx;
     
    427424 */
    428425static GLuint gl_copy_last_two_cull( struct vertex_buffer *VB,
    429                                      GLuint start,
    430                                      GLuint count, GLuint ovf,
    431                                      CONST GLfloat (*proj)[4] )
     426                                     GLuint start,
     427                                     GLuint count, GLuint ovf,
     428                                     CONST GLfloat (*proj)[4] )
    432429{
    433430   const GLcontext *ctx = VB->ctx;
     
    452449   if (ovf == 1) {
    453450      if (cullmask[count-3] == 0) {
    454         rv++;
    455         cullmask[count-3] = ctx->Polygon.CullBits;
     451        rv++;
     452        cullmask[count-3] = ctx->Polygon.CullBits;
    456453      }
    457454      VB->CopyCount = 3;
     
    467464 */
    468465static GLuint gl_copy_overflow_cull( struct vertex_buffer *VB,
    469                                      GLuint start, GLuint count,
    470                                      GLuint ovf, CONST GLfloat (*proj)[4] )
     466                                     GLuint start, GLuint count,
     467                                     GLuint ovf, CONST GLfloat (*proj)[4] )
    471468{
    472469   const GLcontext *ctx = VB->ctx;
     
    487484
    488485static GLuint gl_copy_last( struct vertex_buffer *VB,
    489                             GLuint start, GLuint count,
    490                             GLuint ovf, CONST GLfloat (*proj)[4])
     486                            GLuint start, GLuint count,
     487                            GLuint ovf, CONST GLfloat (*proj)[4])
    491488{
    492489   (void) start;
     
    499496
    500497static GLuint gl_copy_first_and_last( struct vertex_buffer *VB,
    501                                       GLuint start,
    502                                       GLuint count,
    503                                       GLuint ovf, CONST GLfloat (*proj)[4])
     498                                      GLuint start,
     499                                      GLuint count,
     500                                      GLuint ovf, CONST GLfloat (*proj)[4])
    504501{
    505502   (void) ovf;
     
    513510
    514511static GLuint gl_copy_last_two( struct vertex_buffer *VB,
    515                                 GLuint start, GLuint count,
    516                                 GLuint ovf, CONST GLfloat (*proj)[4])
     512                                GLuint start, GLuint count,
     513                                GLuint ovf, CONST GLfloat (*proj)[4])
    517514{
    518515   (void) start;
     
    533530
    534531static GLuint gl_copy_overflow( struct vertex_buffer *VB,
    535                                 GLuint start,
    536                                 GLuint count,
    537                                 GLuint ovf,
    538                                 CONST GLfloat (*proj)[4] )
     532                                GLuint start,
     533                                GLuint count,
     534                                GLuint ovf,
     535                                CONST GLfloat (*proj)[4] )
    539536{
    540537   GLuint src_offset = count - ovf;
     
    557554
    558555static void gl_fast_copy_noop( struct vertex_buffer *VB,
    559                                GLuint start, GLuint count,
    560                                GLuint ovf)
     556                               GLuint start, GLuint count,
     557                               GLuint ovf)
    561558{
    562559   (void) start;
     
    567564
    568565static void gl_fast_copy_last( struct vertex_buffer *VB,
    569                                GLuint start, GLuint count,
    570                                GLuint ovf)
     566                               GLuint start, GLuint count,
     567                               GLuint ovf)
    571568{
    572569   (void) start;
     
    577574
    578575static void gl_fast_copy_first_and_last( struct vertex_buffer *VB,
    579                                         GLuint start,
    580                                         GLuint count,
    581                                         GLuint ovf)
     576                                        GLuint start,
     577                                        GLuint count,
     578                                        GLuint ovf)
    582579{
    583580   (void) ovf;
     
    588585
    589586static void gl_fast_copy_last_two( struct vertex_buffer *VB,
    590                                    GLuint start, GLuint count,
    591                                    GLuint ovf )
     587                                   GLuint start, GLuint count,
     588                                   GLuint ovf )
    592589{
    593590   (void) start;
     
    603600
    604601static void gl_fast_copy_overflow( struct vertex_buffer *VB,
    605                                    GLuint start,
    606                                    GLuint count,
    607                                    GLuint ovf )
     602                                   GLuint start,
     603                                   GLuint count,
     604                                   GLuint ovf )
    608605{
    609606   GLuint src_offset = count - ovf;
     
    618615
    619616typedef void (*fast_copy_func)( struct vertex_buffer *VB,
    620                                 GLuint start,
    621                                 GLuint count,
    622                                 GLuint ovf );
     617                                GLuint start,
     618                                GLuint count,
     619                                GLuint ovf );
    623620
    624621
     
    626623
    627624typedef GLuint (*cull_func)( struct vertex_buffer *VB,
    628                              GLuint start,
    629                              GLuint count,
    630                              GLuint parity,
    631                              CONST GLfloat (*proj)[4]);
     625                             GLuint start,
     626                             GLuint count,
     627                             GLuint parity,
     628                             CONST GLfloat (*proj)[4]);
    632629
    633630
    634631typedef GLuint (*copy_func)( struct vertex_buffer *VB,
    635                              GLuint start,
    636                              GLuint end,
    637                              GLuint ovf,
    638                              CONST GLfloat (*proj)[4] );
     632                             GLuint start,
     633                             GLuint end,
     634                             GLuint ovf,
     635                             CONST GLfloat (*proj)[4] );
    639636
    640637
     
    775772
    776773      for ( i = start ; i < next ; i++) {
    777         if (~(flags[i] & purge)) {
    778             indirect[j] = i;
    779             cullmask[i] = PRIM_CLIPPED; /* nonzero */
    780             j++;
    781         }
    782        
     774        if (~(flags[i] & purge)) {
     775            indirect[j] = i;
     776            cullmask[i] = PRIM_CLIPPED; /* nonzero */
     777            j++;
     778        }
     779
    783780      }
    784781
     
    794791
    795792static void build_clip_vert_bits( GLubyte *clipmask, const GLubyte *cullmask,
    796                                   GLuint count )
     793                                  GLuint count )
    797794{
    798795   GLuint i = 0;
    799796   for (;;)
    800797      if (cullmask[++i]==0) {
    801         clipmask[i] |= CLIP_CULLED_BIT;
    802         if (&cullmask[i] == &cullmask[count]) return;
     798        clipmask[i] |= CLIP_CULLED_BIT;
     799        if (&cullmask[i] == &cullmask[count]) return;
    803800      }
    804801}
     
    845842
    846843      if (n == next - i)
    847         out_prim[i] = GL_POLYGON+1;
     844        out_prim[i] = GL_POLYGON+1;
    848845      else
    849         out_prim[i] = prim;
     846        out_prim[i] = prim;
    850847
    851848      cullcount += n;
     
    855852   if (VB->LastPrimitive <  VB->Count) {
    856853      if (copy_tab_cull[lastprim])
    857         cullcount -= copy_tab_cull[prim]( VB,
    858                                            first,
    859                                            VB->Count,
    860                                            VB->Ovf,
    861                                            (const GLfloat (*)[4])proj );
     854        cullcount -= copy_tab_cull[prim]( VB,
     855                                           first,
     856                                           VB->Count,
     857                                           VB->Ovf,
     858                                           (const GLfloat (*)[4])proj );
    862859   }
    863860
     
    871868
    872869      if (cullcount < VB->Count)
    873         build_clip_vert_bits( VB->ClipMask, VB->CullMask, VB->Count );
     870        build_clip_vert_bits( VB->ClipMask, VB->CullMask, VB->Count );
    874871
    875872   }
     
    906903
    907904      if (first == VB_START)
    908         first = VB->Start;
     905        first = VB->Start;
    909906
    910907      if (copy_tab_no_cull[prim])
    911         copy_tab_no_cull[prim]( VB,
    912                                 first,
    913                                 VB->Count,
    914                                 VB->Ovf,
    915                                 (const GLfloat (*)[4])proj );
     908        copy_tab_no_cull[prim]( VB,
     909                                first,
     910                                VB->Count,
     911                                VB->Ovf,
     912                                (const GLfloat (*)[4])proj );
    916913   }
    917914
     
    929926
    930927      if (first == VB_START)
    931         first = VB->Start;
     928        first = VB->Start;
    932929
    933930      fast_copy_tab[prim]( VB, first, VB->Count, VB->Ovf );
     
    952949
    953950      if (VB->CullMode & CULL_MASK_ACTIVE) {
    954         GLubyte *lastnorm = VB->NormCullStart;
    955 
    956         for (i = VB->Start ;;) {
    957             *lastnorm |= VB->CullMask[i];
    958             if (VB->Flag[++i] & (VERT_NORM|VERT_END_VB)) {
    959                lastnorm = &VB->NormCullMask[i];
    960                if (VB->Flag[i] & VERT_END_VB) return;
    961             }
    962         }
     951        GLubyte *lastnorm = VB->NormCullStart;
     952
     953        for (i = VB->Start ;;) {
     954            *lastnorm |= VB->CullMask[i];
     955            if (VB->Flag[++i] & (VERT_NORM|VERT_END_VB)) {
     956               lastnorm = &VB->NormCullMask[i];
     957               if (VB->Flag[i] & VERT_END_VB) return;
     958            }
     959        }
    963960      } else {
    964         VB->NormCullMask[VB->Start] = ~0;
    965         for (i = VB->Start ;; )
    966             if (VB->Flag[++i] & (VERT_NORM|VERT_END_VB)) {
    967                VB->NormCullMask[i] = ~0;
    968                if (VB->Flag[i] & VERT_END_VB) return;
    969             }
     961        VB->NormCullMask[VB->Start] = ~0;
     962        for (i = VB->Start ;; )
     963            if (VB->Flag[++i] & (VERT_NORM|VERT_END_VB)) {
     964               VB->NormCullMask[i] = ~0;
     965               if (VB->Flag[i] & VERT_END_VB) return;
     966            }
    970967      }
    971968   } else  {
Note: See TracChangeset for help on using the changeset viewer.