Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenpatchlist.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
1.7.6.1
|