ReactOS  0.4.14-dev-1252-g782ff23
mapdescv.cc
Go to the documentation of this file.
1 /*
2 ** License Applicability. Except to the extent portions of this file are
3 ** made subject to an alternative license as permitted in the SGI Free
4 ** Software License B, Version 1.1 (the "License"), the contents of this
5 ** file are subject only to the provisions of the License. You may not use
6 ** this file except in compliance with the License. You may obtain a copy
7 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
8 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
9 **
10 ** http://oss.sgi.com/projects/FreeB
11 **
12 ** Note that, as provided in the License, the Software is distributed on an
13 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
14 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
15 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
16 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
17 **
18 ** Original Code. The Original Code is: OpenGL Sample Implementation,
19 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
20 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
21 ** Copyright in any portions created by third parties is as indicated
22 ** elsewhere herein. All Rights Reserved.
23 **
24 ** Additional Notice Provisions: The application programming interfaces
25 ** established by SGI in conjunction with the Original Code are The
26 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
27 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
28 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
29 ** Window System(R) (Version 1.3), released October 19, 1998. This software
30 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
31 ** published by SGI, but has not been independently verified as being
32 ** compliant with the OpenGL(R) version 1.2.1 Specification.
33 */
34 
35 /*
36  * mapdescv.c++
37  *
38  */
39 
40 //#include "glimports.h"
41 //#include "mystdio.h"
42 //#include "myassert.h"
43 //#include "mystring.h"
44 #include "mymath.h"
45 //#include "nurbsconsts.h"
46 #include "mapdesc.h"
47 
48 /*--------------------------------------------------------------------------
49  * calcPartialVelocity - calculate maximum magnitude of a given partial
50  * derivative
51  *--------------------------------------------------------------------------
52  */
53 REAL
55  REAL *p,
56  int stride,
57  int ncols,
58  int partial,
59  REAL range )
60 {
61  REAL tmp[MAXORDER][MAXCOORDS];
62  REAL mag[MAXORDER];
63 
64  assert( ncols <= MAXORDER );
65 
66  int j, k, t;
67  // copy inhomogeneous control points into temporary array
68  for( j=0; j != ncols; j++ )
69  for( k=0; k != inhcoords; k++ )
70  tmp[j][k] = p[j*stride + k];
71 
72  for( t=0; t != partial; t++ )
73  for( j=0; j != ncols-t-1; j++ )
74  for( k=0; k != inhcoords; k++ )
75  tmp[j][k] = tmp[j+1][k] - tmp[j][k];
76 
77  // compute magnitude and store in mag array
78  for( j=0; j != ncols-partial; j++ ) {
79  mag[j] = 0.0;
80  for( k=0; k != inhcoords; k++ )
81  mag[j] += tmp[j][k] * tmp[j][k];
82  }
83 
84  // compute scale factor
85  REAL fac = 1;
86  REAL invt = 1.0 / range;
87  for( t = ncols-1; t != ncols-1-partial; t-- )
88  fac *= t * invt;
89 
90  // compute max magnitude of all entries in array
91  REAL max = 0.0;
92  for( j=0; j != ncols-partial; j++ )
93  if( mag[j] > max ) max = mag[j];
94  max = fac * sqrtf( (float) max );
95 
96  return max;
97 }
98 
99 /*--------------------------------------------------------------------------
100  * calcPartialVelocity - calculate maximum magnitude of a given partial
101  * derivative
102  *--------------------------------------------------------------------------
103  */
104 REAL
106  REAL *dist,
107  REAL *p,
108  int rstride,
109  int cstride,
110  int nrows,
111  int ncols,
112  int spartial,
113  int tpartial,
114  REAL srange,
115  REAL trange,
116  int side )
117 {
119  REAL mag[MAXORDER][MAXORDER];
120 
121  assert( nrows <= MAXORDER );
122  assert( ncols <= MAXORDER );
123 
124  REAL *tp = &tmp[0][0][0];
125  REAL *mp = &mag[0][0];
126  const int istride = sizeof( tmp[0]) / sizeof( tmp[0][0][0] );
127  const int jstride = sizeof( tmp[0][0]) / sizeof( tmp[0][0][0] );
128  /*
129  const int kstride = sizeof( tmp[0][0][0]) / sizeof( tmp[0][0][0] );
130  */
131  const int mistride = sizeof( mag[0]) / sizeof( mag[0][0] );
132  const int mjstride = sizeof( mag[0][0]) / sizeof( mag[0][0] );
133  const int idist = nrows * istride;
134  const int jdist = ncols * jstride;
135  /*
136  const int kdist = inhcoords * kstride;
137  */
138  const int id = idist - spartial * istride;
139  const int jd = jdist - tpartial * jstride;
140 
141  {
142  // copy control points
143  REAL *ti = tp;
144  REAL *qi = p;
145  REAL *til = tp + idist;
146  for( ; ti != til; ) {
147  REAL *tj = ti;
148  REAL *qj = qi;
149  REAL *tjl = ti + jdist;
150  for( ; tj != tjl; ) {
151  for( int k=0; k != inhcoords; k++ ) {
152  tj[k] = qj[k];
153  }
154  tj += jstride;
155  qj += cstride;
156  }
157  ti += istride;
158  qi += rstride;
159  }
160  }
161 
162  {
163  // compute (s)-partial derivative control points
164  REAL *til = tp + idist - istride;
165  const REAL *till = til - ( spartial * istride );
166  for( ; til != till; til -= istride )
167  for( REAL *ti = tp; ti != til; ti += istride )
168  for( REAL *tj = ti, *tjl = tj + jdist; tj != tjl; tj += jstride )
169  for( int k=0; k != inhcoords; k++ )
170  tj[k] = tj[k+istride] - tj[k];
171  }
172 
173  {
174  // compute (s,t)-partial derivative control points
175  REAL *tjl = tp + jdist - jstride;
176  const REAL *tjll = tjl - ( tpartial * jstride );
177  for( ; tjl != tjll; tjl -= jstride )
178  for( REAL *tj = tp; tj != tjl; tj += jstride )
179  for( REAL *ti = tj, *til = ti + id; ti != til; ti += istride )
180  for( int k=0; k != inhcoords; k++ )
181  ti[k] = ti[k+jstride] - ti[k];
182 
183  }
184 
185  REAL max = 0.0;
186  {
187  // compute magnitude and store in mag array
188  memset( (void *) mp, 0, sizeof( mag ) );
189  for( REAL *ti = tp, *mi = mp, *til = tp + id; ti != til; ti += istride, mi += mistride )
190  for( REAL *tj = ti, *mj = mi, *tjl = ti + jd; tj != tjl; tj += jstride, mj += mjstride ) {
191  for( int k=0; k != inhcoords; k++ )
192  *mj += tj[k] * tj[k];
193  if( *mj > max ) max = *mj;
194  }
195 
196  }
197 
198  int i, j;
199 
200  // compute scale factor
201  REAL fac = 1.0;
202  {
203  REAL invs = 1.0 / srange;
204  REAL invt = 1.0 / trange;
205  for( int s = nrows-1, slast = s-spartial; s != slast; s-- )
206  fac *= s * invs;
207  for( int t = ncols-1, tlast = t-tpartial; t != tlast; t-- )
208  fac *= t * invt;
209  }
210 
211  if( side == 0 ) {
212  // compute max magnitude of first and last column
213  dist[0] = 0.0;
214  dist[1] = 0.0;
215  for( i=0; i != nrows-spartial; i++ ) {
216  j = 0;
217  if( mag[i][j] > dist[0] ) dist[0] = mag[i][j];
218 
219  j = ncols-tpartial-1;
220  if( mag[i][j] > dist[1] ) dist[1] = mag[i][j];
221  }
222  dist[0] = fac * sqrtf( dist[0] );
223  dist[1] = fac * sqrtf( dist[1] );
224  } else if( side == 1 ) {
225  // compute max magnitude of first and last row
226  dist[0] = 0.0;
227  dist[1] = 0.0;
228  for( j=0; j != ncols-tpartial; j++ ) {
229  i = 0;
230  if( mag[i][j] > dist[0] ) dist[0] = mag[i][j];
231 
232  i = nrows-spartial-1;
233  if( mag[i][j] > dist[1] ) dist[1] = mag[i][j];
234  }
235  dist[0] = fac * sqrtf( dist[0] );
236  dist[1] = fac * sqrtf( dist[1] );
237  }
238 
239  max = fac * sqrtf( (float) max );
240 
241  return max;
242 }
243 
#define max(a, b)
Definition: svc.c:63
int inhcoords
Definition: mapdesc.h:119
REAL calcPartialVelocity(REAL *, int, int, int, REAL)
Definition: mapdescv.cc:54
GLdouble GLdouble t
Definition: gl.h:2047
#define assert(x)
Definition: debug.h:53
static MONITORINFO mi
Definition: win.c:7339
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MAXORDER
Definition: defines.h:45
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
Definition: btrfs.c:2855
GLsizei stride
Definition: glext.h:5848
GLdouble s
Definition: gl.h:2039
GLenum GLint * range
Definition: glext.h:7539
#define sqrtf(x)
Definition: mymath.h:59
#define MAXCOORDS
Definition: defines.h:48
GLfloat GLfloat p
Definition: glext.h:8902
float REAL
Definition: types.h:41
#define memset(x, y, z)
Definition: compat.h:39
int k
Definition: mpi.c:3369