All pastes #10471 Raw Edit

this is easier

public cpp v1 · immutable
#10471 ·published 2005-04-27 23:56 UTC
rendered paste body
void Object::renderstencilshadow_glvertex ( int slot, Light *l, bool reverse ) {  unsigned short *ind = outlines->indices[slot];  int nind = outlines->nindices[slot];  if ( !nind ) return;  int i;  int mask = 1<<slot;  StartCounter ("10stencil render");        // varhandle assumed to be valid from regular rendering  	m.Gl (glm);	glMatrixMode (GL_MODELVIEW); // is assumed to be set to camera matrix			glPushMatrix ();		glMultMatrixf (glm);  Vector osl = l->pos * mi;  glCullFace ( GL_BACK );    if ( !reverse )  glStencilOp ( GL_KEEP, GL_KEEP, GL_INCR_WRAP_EXT );  else glStencilOp ( GL_KEEP, GL_INCR_WRAP_EXT, GL_KEEP );      // draw twice once for frontfacing, once for backfacing  for ( int side=0; side<2; side++ ) {    // extrusion    glBegin ( GL_QUADS );    for ( i=0; i<nind-1; i+=2 ) {      glVertex3fv ( v[ind[i]].os.longvec );            glVertex3fv ( v[ind[i+1]].os.longvec );        glVertex4f  ( v[ind[i+1]].os.x - osl.x, v[ind[i+1]].os.y - osl.y, v[ind[i+1]].os.z - osl.z, 0 );                        glVertex4f  ( v[ind[i]].os.x - osl.x, v[ind[i]].os.y - osl.y, v[ind[i]].os.z - osl.z, 0 );                         }    glEnd ();        if ( !reverse ) {      // only cap front      glBegin ( GL_TRIANGLES );      for ( i=0; i<nf; i++ ) {        if ( (f[i].flags&mask)==0 ) continue;        glVertex3fv ( v[f[i].v[0]].os.longvec );        glVertex3fv ( v[f[i].v[1]].os.longvec );        glVertex3fv ( v[f[i].v[2]].os.longvec );      }      glEnd ();    } else {      glBegin ( GL_TRIANGLES );      for ( i=0; i<nf; i++ ) {        if ( (f[i].flags&mask)==0 ) {          glVertex4f ( v[f[i].v[0]].os.x - osl.x, v[f[i].v[0]].os.y - osl.y, v[f[i].v[0]].os.z - osl.z, 0 );          glVertex4f ( v[f[i].v[1]].os.x - osl.x, v[f[i].v[1]].os.y - osl.y, v[f[i].v[1]].os.z - osl.z, 0 );          glVertex4f ( v[f[i].v[2]].os.x - osl.x, v[f[i].v[2]].os.y - osl.y, v[f[i].v[2]].os.z - osl.z, 0 );        } else {          glVertex3fv ( v[f[i].v[0]].os.longvec );          glVertex3fv ( v[f[i].v[1]].os.longvec );          glVertex3fv ( v[f[i].v[2]].os.longvec );        }      }      glEnd ();    }    glCullFace ( GL_FRONT );    if ( !reverse ) glStencilOp ( GL_KEEP, GL_KEEP, GL_DECR_WRAP_EXT );    else glStencilOp ( GL_KEEP, GL_DECR_WRAP_EXT, GL_KEEP );      }        glMatrixMode (GL_MODELVIEW);	glPopMatrix ();  StopCounter ("10stencil render");      }