📄 glcurveval.cc
字号:
/*** License Applicability. Except to the extent portions of this file are** made subject to an alternative license as permitted in the SGI Free** Software License B, Version 1.1 (the "License"), the contents of this** file are subject only to the provisions of the License. You may not use** this file except in compliance with the License. You may obtain a copy** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:**** http://oss.sgi.com/projects/FreeB**** Note that, as provided in the License, the Software is distributed on an** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.**** Original Code. The Original Code is: OpenGL Sample Implementation,** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.** Copyright in any portions created by third parties is as indicated** elsewhere herein. All Rights Reserved.**** Additional Notice Provisions: The application programming interfaces** established by SGI in conjunction with the Original Code are The** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X** Window System(R) (Version 1.3), released October 19, 1998. This software** was created using the OpenGL(R) version 1.2.1 Sample Implementation** published by SGI, but has not been independently verified as being** compliant with the OpenGL(R) version 1.2.1 Specification.*//* * glcurveval.c++ * * $Date: 2006/03/29 18:46:46 $ $Revision: 1.7 $ * $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/interface/glcurveval.cc,v 1.7 2006/03/29 18:46:46 brianp Exp $ *//* Polynomial Evaluator Interface */#include "gluos.h"#include "glimports.h"#include "glrenderer.h"#include "glcurveval.h"#include "nurbsconsts.h" OpenGLCurveEvaluator::OpenGLCurveEvaluator(void) { //no default callback functions beginCallBackN = NULL; endCallBackN = NULL; vertexCallBackN = NULL; normalCallBackN = NULL; colorCallBackN = NULL; texcoordCallBackN = NULL; beginCallBackData = NULL; endCallBackData = NULL; vertexCallBackData = NULL; normalCallBackData = NULL; colorCallBackData = NULL; texcoordCallBackData = NULL; userData = NULL; vertex_flag = 0; normal_flag = 0; color_flag = 0; texcoord_flag = 0; em_vertex.uprime = -1.0; em_normal.uprime = -1.0; em_color.uprime = -1.0; em_texcoord.uprime = -1.0; output_triangles = 0; // don't output triangles by default}OpenGLCurveEvaluator::~OpenGLCurveEvaluator(void) { }/* added nonsense to avoid the warning messages at compile time */voidOpenGLCurveEvaluator::addMap(CurveMap *m){ m = m;}voidOpenGLCurveEvaluator::range1f(long type, REAL *from, REAL *to){ type = type; from = from; to = to;}voidOpenGLCurveEvaluator::domain1f(REAL ulo, REAL uhi){ ulo = ulo; uhi = uhi;}voidOpenGLCurveEvaluator::bgnline(void){ if(output_triangles) beginCallBack(GL_LINE_STRIP, userData); else glBegin((GLenum) GL_LINE_STRIP);}voidOpenGLCurveEvaluator::endline(void){ if(output_triangles) endCallBack(userData); else glEnd();}/*--------------------------------------------------------------------------- * disable - turn off a curve map *--------------------------------------------------------------------------- */voidOpenGLCurveEvaluator::disable(long type){ glDisable((GLenum) type);}/*--------------------------------------------------------------------------- * enable - turn on a curve map *--------------------------------------------------------------------------- */voidOpenGLCurveEvaluator::enable(long type){ glEnable((GLenum) type);}/*------------------------------------------------------------------------- * mapgrid1f - define a lattice of points with origin and offset *------------------------------------------------------------------------- */void OpenGLCurveEvaluator::mapgrid1f(long nu, REAL u0, REAL u1){ if(output_triangles) { global_grid_u0 = u0; global_grid_u1 = u1; global_grid_nu = (int) nu; } else glMapGrid1f((GLint) nu, (GLfloat) u0, (GLfloat) u1);}/*------------------------------------------------------------------------- * bgnmap1 - preamble to curve definition and evaluations *------------------------------------------------------------------------- */voidOpenGLCurveEvaluator::bgnmap1f(long){ if(output_triangles) { //initialized so that no maps are set initially vertex_flag = 0; normal_flag = 0; color_flag = 0; texcoord_flag = 0; //no need to worry about gl states when doing callback } else glPushAttrib((GLbitfield) GL_EVAL_BIT);}/*------------------------------------------------------------------------- * endmap1 - postamble to a curve map *------------------------------------------------------------------------- */voidOpenGLCurveEvaluator::endmap1f(void){ if(output_triangles) { } else glPopAttrib();}/*------------------------------------------------------------------------- * map1f - pass a desription of a curve map *------------------------------------------------------------------------- */voidOpenGLCurveEvaluator::map1f( long type, /* map type */ REAL ulo, /* lower parametric bound */ REAL uhi, /* upper parametric bound */ long stride, /* distance to next point in REALS */ long order, /* parametric order */ REAL *pts /* control points */){ if(output_triangles) { int dimension = 0; int which = 0; switch(type){ case GL_MAP1_VERTEX_3: which = 0; dimension = 3; break; case GL_MAP1_VERTEX_4: which=0; dimension = 4; break; case GL_MAP1_INDEX: which=2; dimension = 1; break; case GL_MAP1_COLOR_4: which=2; dimension = 4; break; case GL_MAP1_NORMAL: which=1; dimension = 3; break; case GL_MAP1_TEXTURE_COORD_1: which=3; dimension = 1; break; case GL_MAP1_TEXTURE_COORD_2: which=3; dimension = 2; break; case GL_MAP1_TEXTURE_COORD_3: which=3; dimension = 3; break; case GL_MAP1_TEXTURE_COORD_4: which=3; dimension = 4; break; } inMap1f(which, dimension, ulo, uhi, stride, order, pts); } else glMap1f((GLenum) type, (GLfloat) ulo, (GLfloat) uhi, (GLint) stride, (GLint) order, (const GLfloat *) pts);}/*------------------------------------------------------------------------- * mapmesh1f - evaluate a mesh of points on lattice *------------------------------------------------------------------------- */void OpenGLCurveEvaluator::mapmesh1f(long style, long from, long to){ if(output_triangles) { inMapMesh1f((int) from, (int) to); } else { switch(style) { default: case N_MESHFILL: case N_MESHLINE: glEvalMesh1((GLenum) GL_LINE, (GLint) from, (GLint) to); break; case N_MESHPOINT: glEvalMesh1((GLenum) GL_POINT, (GLint) from, (GLint) to); break; } }}/*------------------------------------------------------------------------- * evalpoint1i - evaluate a point on a curve *------------------------------------------------------------------------- */void OpenGLCurveEvaluator::evalpoint1i(long i){ glEvalPoint1((GLint) i);}/*------------------------------------------------------------------------- * evalcoord1f - evaluate a point on a curve *------------------------------------------------------------------------- */void OpenGLCurveEvaluator::evalcoord1f(long, REAL u){ glEvalCoord1f((GLfloat) u);}void#ifdef _WIN32OpenGLCurveEvaluator::putCallBack(GLenum which, void (GLAPIENTRY *fn)())#elseOpenGLCurveEvaluator::putCallBack(GLenum which, _GLUfuncptr fn)#endif{ switch(which) { case GLU_NURBS_BEGIN: beginCallBackN = (void (GLAPIENTRY *) (GLenum)) fn; break; case GLU_NURBS_END: endCallBackN = (void (GLAPIENTRY *) (void)) fn; break; case GLU_NURBS_VERTEX: vertexCallBackN = (void (GLAPIENTRY *) (const GLfloat*)) fn; break; case GLU_NURBS_NORMAL: normalCallBackN = (void (GLAPIENTRY *) (const GLfloat*)) fn; break; case GLU_NURBS_COLOR: colorCallBackN = (void (GLAPIENTRY *) (const GLfloat*)) fn; break; case GLU_NURBS_TEXTURE_COORD: texcoordCallBackN = (void (GLAPIENTRY *) (const GLfloat*)) fn; break; case GLU_NURBS_BEGIN_DATA: beginCallBackData = (void (GLAPIENTRY *) (GLenum, void*)) fn; break; case GLU_NURBS_END_DATA: endCallBackData = (void (GLAPIENTRY *) (void*)) fn; break; case GLU_NURBS_VERTEX_DATA: vertexCallBackData = (void (GLAPIENTRY *) (const GLfloat*, void*)) fn; break; case GLU_NURBS_NORMAL_DATA: normalCallBackData = (void (GLAPIENTRY *) (const GLfloat*, void*)) fn; break; case GLU_NURBS_COLOR_DATA: colorCallBackData = (void (GLAPIENTRY *) (const GLfloat*, void*)) fn; break; case GLU_NURBS_TEXTURE_COORD_DATA: texcoordCallBackData = (void (GLAPIENTRY *) (const GLfloat*, void*)) fn; break; }}voidOpenGLCurveEvaluator::beginCallBack(GLenum which, void *data){ if(beginCallBackData) beginCallBackData(which, data); else if(beginCallBackN) beginCallBackN(which);}voidOpenGLCurveEvaluator::endCallBack(void *data){ if(endCallBackData) endCallBackData(data); else if(endCallBackN) endCallBackN();}voidOpenGLCurveEvaluator::vertexCallBack(const GLfloat *vert, void* data){ if(vertexCallBackData) vertexCallBackData(vert, data); else if(vertexCallBackN) vertexCallBackN(vert);}voidOpenGLCurveEvaluator::normalCallBack(const GLfloat *normal, void* data){ if(normalCallBackData) normalCallBackData(normal, data); else if(normalCallBackN) normalCallBackN(normal);}voidOpenGLCurveEvaluator::colorCallBack(const GLfloat *color, void* data){ if(colorCallBackData) colorCallBackData(color, data); else if(colorCallBackN) colorCallBackN(color);}voidOpenGLCurveEvaluator::texcoordCallBack(const GLfloat *texcoord, void* data){ if(texcoordCallBackData) texcoordCallBackData(texcoord, data); else if(texcoordCallBackN) texcoordCallBackN(texcoord);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -