|
|
#ifndef __gluglsurfeval_h_
#define __gluglsurfeval_h_
/**************************************************************************
* * * Copyright (C) 1991, Silicon Graphics, Inc. * * * * These coded instructions, statements, and computer programs contain * * unpublished proprietary information of Silicon Graphics, Inc., and * * are protected by Federal copyright law. They may not be disclosed * * to third parties or copied or duplicated in any form, in whole or * * in part, without the prior written consent of Silicon Graphics, Inc. * * * **************************************************************************/
/*
* glsurfeval.h * * $Revision: 1.2 $ */
#ifndef NT
#pragma once
#endif
#include "basicsur.h"
class SurfaceMap; class OpenGLSurfaceEvaluator; class StoredVertex;
#define TYPECOORD 1
#define TYPEPOINT 2
/* Cache up to 3 vertices from tmeshes */ #define VERTEX_CACHE_SIZE 3
class StoredVertex { public: StoredVertex() { type = 0; } ~StoredVertex(void) {} void saveEvalCoord(REAL x, REAL y) {coord[0] = x; coord[1] = y; type = TYPECOORD; } void saveEvalPoint(long x, long y) {point[0] = x; point[1] = y; type = TYPEPOINT; } void invoke(OpenGLSurfaceEvaluator *eval);
private: int type; REAL coord[2]; long point[2]; };
class OpenGLSurfaceEvaluator : public BasicSurfaceEvaluator { public: OpenGLSurfaceEvaluator(); ~OpenGLSurfaceEvaluator( void ); void polymode( long style ); void range2f( long, REAL *, REAL * ); void domain2f( REAL, REAL, REAL, REAL ); void addMap( SurfaceMap * ) { }
void enable( long ); void disable( long ); void bgnmap2f( long ); void map2f( long, REAL, REAL, long, long, REAL, REAL, long, long, REAL * ); void mapgrid2f( long, REAL, REAL, long, REAL, REAL ); void mapmesh2f( long, long, long, long, long ); void evalcoord2f( long, REAL, REAL ); void evalpoint2i( long, long ); void endmap2f( void );
void bgnline( void ); void endline( void ); void bgnclosedline( void ); void endclosedline( void ); void bgntmesh( void ); void swaptmesh( void ); void endtmesh( void ); void bgnqstrip( void ); void endqstrip( void );
void bgntfan( void ); void endtfan( void ); void evalUStrip(int n_upper, REAL v_upper, REAL* upper_val, int n_lower, REAL v_lower, REAL* lower_val); void evalVStrip(int n_left, REAL u_left, REAL* left_val, int n_right, REAL u_right, REAL* right_val);
void coord2f( REAL, REAL ); void point2i( long, long );
void newtmeshvert( REAL, REAL ); void newtmeshvert( long, long );
private: StoredVertex *vertexCache[VERTEX_CACHE_SIZE]; int tmeshing; int which; int vcount; };
inline void StoredVertex::invoke(OpenGLSurfaceEvaluator *eval) { switch(type) { case TYPECOORD: eval->coord2f(coord[0], coord[1]); break; case TYPEPOINT: eval->point2i(point[0], point[1]); break; default: break; } }
#endif /* __gluglsurfeval_h_ */
|