Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 43 of file m_clip_tmp.h.
Referenced by init_c_cliptest().
{ const GLuint stride = clip_vec->stride; const GLfloat *from = (GLfloat *)clip_vec->start; const GLuint count = clip_vec->count; GLuint c = 0; GLfloat (*vProj)[4] = (GLfloat (*)[4])proj_vec->start; GLubyte tmpAndMask = *andMask; GLubyte tmpOrMask = *orMask; GLuint i; STRIDE_LOOP { const GLfloat cx = from[0]; const GLfloat cy = from[1]; const GLfloat cz = from[2]; const GLfloat cw = from[3]; #if defined(macintosh) || defined(__powerpc__) /* on powerpc cliptest is 17% faster in this way. */ GLuint mask; mask = (((cw < cx) << CLIP_RIGHT_SHIFT)); mask |= (((cw < -cx) << CLIP_LEFT_SHIFT)); mask |= (((cw < cy) << CLIP_TOP_SHIFT)); mask |= (((cw < -cy) << CLIP_BOTTOM_SHIFT)); mask |= (((cw < cz) << CLIP_FAR_SHIFT)); mask |= (((cw < -cz) << CLIP_NEAR_SHIFT)); #else /* !defined(macintosh)) */ GLubyte mask = 0; if (-cx + cw < 0) mask |= CLIP_RIGHT_BIT; if ( cx + cw < 0) mask |= CLIP_LEFT_BIT; if (-cy + cw < 0) mask |= CLIP_TOP_BIT; if ( cy + cw < 0) mask |= CLIP_BOTTOM_BIT; if (-cz + cw < 0) mask |= CLIP_FAR_BIT; if ( cz + cw < 0) mask |= CLIP_NEAR_BIT; #endif /* defined(macintosh) */ clipMask[i] = mask; if (mask) { c++; tmpAndMask &= mask; tmpOrMask |= mask; vProj[i][0] = 0; vProj[i][1] = 0; vProj[i][2] = 0; vProj[i][3] = 1; } else { GLfloat oow = 1.0F / cw; vProj[i][0] = cx * oow; vProj[i][1] = cy * oow; vProj[i][2] = cz * oow; vProj[i][3] = oow; } } *orMask = tmpOrMask; *andMask = (GLubyte) (c < count ? 0 : tmpAndMask); proj_vec->flags |= VEC_SIZE_4; proj_vec->size = 4; proj_vec->count = clip_vec->count; return proj_vec; }