ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

static GLuint depth_test_span16 ( GLcontext *  ctx,
GLuint  n,
GLushort  zbuffer[],
const GLuint  z[],
GLubyte  mask[] 
) [static]

Do depth test for a horizontal span of fragments. Input: zbuffer - array of z values in the zbuffer z - array of fragment z values Return: number of fragments which pass the test.

Definition at line 44 of file s_depth.c.

Referenced by depth_test_pixels(), and depth_test_span().

{
   GLuint passed = 0;

   /* switch cases ordered from most frequent to less frequent */
   switch (ctx->Depth.Func) {
      case GL_LESS:
         if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0; i<n; i++) {
           if (mask[i]) {
          if (z[i] < zbuffer[i]) {
             /* pass */
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             /* fail */
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0; i<n; i++) {
           if (mask[i]) {
          if (z[i] < zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_LEQUAL:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] <= zbuffer[i]) {
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] <= zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_GEQUAL:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] >= zbuffer[i]) {
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] >= zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_GREATER:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] > zbuffer[i]) {
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] > zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_NOTEQUAL:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] != zbuffer[i]) {
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] != zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_EQUAL:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] == zbuffer[i]) {
             zbuffer[i] = z[i];
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     else {
        /* Don't update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          if (z[i] == zbuffer[i]) {
             /* pass */
             passed++;
          }
          else {
             mask[i] = 0;
          }
           }
        }
     }
     break;
      case GL_ALWAYS:
     if (ctx->Depth.Mask) {
        /* Update Z buffer */
            GLuint i;
        for (i=0;i<n;i++) {
           if (mask[i]) {
          zbuffer[i] = z[i];
          passed++;
           }
        }
     }
     else {
        /* Don't update Z buffer or mask */
        passed = n;
     }
     break;
      case GL_NEVER:
         _mesa_bzero(mask, n * sizeof(GLubyte));
     break;
      default:
         _mesa_problem(ctx, "Bad depth func in depth_test_span16");
   }

   return passed;
}

Generated on Sun May 27 2012 04:59:43 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.