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

patchlist.cc
Go to the documentation of this file.
00001 /*
00002 ** License Applicability. Except to the extent portions of this file are
00003 ** made subject to an alternative license as permitted in the SGI Free
00004 ** Software License B, Version 1.1 (the "License"), the contents of this
00005 ** file are subject only to the provisions of the License. You may not use
00006 ** this file except in compliance with the License. You may obtain a copy
00007 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
00008 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
00009 **
00010 ** http://oss.sgi.com/projects/FreeB
00011 **
00012 ** Note that, as provided in the License, the Software is distributed on an
00013 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
00014 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
00015 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
00016 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
00017 **
00018 ** Original Code. The Original Code is: OpenGL Sample Implementation,
00019 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
00020 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
00021 ** Copyright in any portions created by third parties is as indicated
00022 ** elsewhere herein. All Rights Reserved.
00023 **
00024 ** Additional Notice Provisions: The application programming interfaces
00025 ** established by SGI in conjunction with the Original Code are The
00026 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
00027 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
00028 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
00029 ** Window System(R) (Version 1.3), released October 19, 1998. This software
00030 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
00031 ** published by SGI, but has not been independently verified as being
00032 ** compliant with the OpenGL(R) version 1.2.1 Specification.
00033 */
00034 
00035 /*
00036  * patchlist.c++
00037  *
00038  * $Date: 2006-03-12 00:07:02 +0000 (Sun, 12 Mar 2006) $ $Revision: 1.1 $
00039  * $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/lib/glu32/libnurbs/internals/patchlist.cc,v 1.1 2004/02/02 16:39:12 navaraf Exp $
00040  */
00041 
00042 #include <stdio.h>
00043 #include "glimports.h"
00044 #include "myassert.h"
00045 #include "mystdio.h"
00046 #include "quilt.h"
00047 #include "patchlist.h"
00048 #include "patch.h"
00049 #include "nurbsconsts.h"
00050 
00051 Patchlist::Patchlist( Quilt *quilts, REAL *pta, REAL *ptb )
00052 {
00053     patch = 0;
00054     for( Quilt *q = quilts; q; q = q->next ) 
00055     patch = new Patch( q, pta, ptb, patch );
00056     pspec[0].range[0] = pta[0];
00057     pspec[0].range[1] = ptb[0];
00058     pspec[0].range[2] = ptb[0] - pta[0];
00059  
00060     pspec[1].range[0] = pta[1];
00061     pspec[1].range[1] = ptb[1];
00062     pspec[1].range[2] = ptb[1] - pta[1];
00063 }
00064 
00065 Patchlist::Patchlist( Patchlist &upper, int param,  REAL value)
00066 {
00067     Patchlist &lower = *this;
00068     patch = 0;
00069     for( Patch *p = upper.patch; p; p = p->next )
00070     patch = new Patch( *p, param, value, patch );
00071 
00072     if( param == 0 ) {
00073     lower.pspec[0].range[0] = upper.pspec[0].range[0];
00074     lower.pspec[0].range[1] = value;
00075     lower.pspec[0].range[2] = value - upper.pspec[0].range[0];
00076     upper.pspec[0].range[0] = value;
00077     upper.pspec[0].range[2] = upper.pspec[0].range[1] - value;
00078     lower.pspec[1] = upper.pspec[1];
00079     } else {
00080     lower.pspec[0] = upper.pspec[0];
00081     lower.pspec[1].range[0] = upper.pspec[1].range[0];
00082     lower.pspec[1].range[1] = value;
00083     lower.pspec[1].range[2] = value - upper.pspec[1].range[0];
00084     upper.pspec[1].range[0] = value;
00085     upper.pspec[1].range[2] = upper.pspec[1].range[1] - value;
00086     }
00087 }
00088 
00089 Patchlist::~Patchlist()
00090 {
00091     while( patch ) {
00092     Patch *p = patch;
00093     patch = patch->next;
00094     delete p;
00095     }
00096 }
00097 
00098 int
00099 Patchlist::cullCheck( void )
00100 {
00101     for( Patch *p = patch; p; p = p->next )
00102     if( p->cullCheck() == CULL_TRIVIAL_REJECT )
00103         return CULL_TRIVIAL_REJECT;
00104     return CULL_ACCEPT;
00105 }
00106 
00107 void
00108 Patchlist::getRanges(REAL ranges[4])
00109 {
00110   ranges[0] = pspec[0].range[0];
00111   ranges[1] = pspec[0].range[1];
00112   ranges[2] = pspec[1].range[0];
00113   ranges[3] = pspec[1].range[1];
00114 }
00115 
00116 void
00117 Patchlist::getstepsize( void )
00118 {
00119     pspec[0].stepsize    = pspec[0].range[2];
00120     pspec[0].sidestep[0] = pspec[0].range[2];
00121     pspec[0].sidestep[1] = pspec[0].range[2];
00122 
00123     pspec[1].stepsize    = pspec[1].range[2];
00124     pspec[1].sidestep[0] = pspec[1].range[2];
00125     pspec[1].sidestep[1] = pspec[1].range[2];
00126 
00127     for( Patch *p = patch; p; p = p->next ) {
00128     p->getstepsize();
00129     p->clamp();
00130     pspec[0].stepsize    =  ((p->pspec[0].stepsize < pspec[0].stepsize) ? p->pspec[0].stepsize : pspec[0].stepsize);
00131     pspec[0].sidestep[0] =  ((p->pspec[0].sidestep[0] < pspec[0].sidestep[0]) ? p->pspec[0].sidestep[0] : pspec[0].sidestep[0]);
00132     pspec[0].sidestep[1] =  ((p->pspec[0].sidestep[1] < pspec[0].sidestep[1]) ? p->pspec[0].sidestep[1] : pspec[0].sidestep[1]);
00133     pspec[1].stepsize    =  ((p->pspec[1].stepsize < pspec[1].stepsize) ? p->pspec[1].stepsize : pspec[1].stepsize);
00134     pspec[1].sidestep[0] =  ((p->pspec[1].sidestep[0] < pspec[1].sidestep[0]) ? p->pspec[1].sidestep[0] : pspec[1].sidestep[0]);
00135     pspec[1].sidestep[1] =  ((p->pspec[1].sidestep[1] < pspec[1].sidestep[1]) ? p->pspec[1].sidestep[1] : pspec[1].sidestep[1]);
00136     }
00137 }
00138 
00139 void
00140 Patchlist::bbox( void )
00141 {
00142     for( Patch *p = patch; p; p = p->next )
00143     p->bbox();
00144 }
00145 
00146 int
00147 Patchlist::needsNonSamplingSubdivision( void )
00148 {
00149     notInBbox = 0;
00150     for( Patch *p = patch; p; p = p->next )
00151     notInBbox |= p->needsNonSamplingSubdivision();
00152     return notInBbox;
00153 }
00154 
00155 int
00156 Patchlist::needsSamplingSubdivision( void )
00157 {
00158     pspec[0].needsSubdivision = 0;
00159     pspec[1].needsSubdivision = 0;
00160 
00161     for( Patch *p = patch; p; p = p->next ) {
00162     pspec[0].needsSubdivision |= p->pspec[0].needsSubdivision;
00163     pspec[1].needsSubdivision |= p->pspec[0].needsSubdivision;
00164     }
00165     return (pspec[0].needsSubdivision || pspec[1].needsSubdivision) ? 1 : 0;
00166 }
00167 
00168 int
00169 Patchlist::needsSubdivision( int param )
00170 {
00171     return pspec[param].needsSubdivision;
00172 }

Generated on Sat May 26 2012 04:22:17 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.