RixSubdEval.h

00001 #ifndef RixSubdEval_h
00002 #define RixSubdEval_h
00003 /*
00004 # ------------------------------------------------------------------------------
00005 #
00006 # Copyright (c) 2010 Pixar Animation Studios. All rights reserved.
00007 #
00008 # The information in this file is provided for the exclusive use of the
00009 # software licensees of Pixar.  It is UNPUBLISHED PROPRIETARY SOURCE CODE
00010 # of Pixar Animation Studios; the contents of this file may not be disclosed
00011 # to third parties, copied or duplicated in any form, in whole or in part,
00012 # without the prior written permission of Pixar Animation Studios.
00013 # Use of copyright notice is precautionary and does not imply publication.
00014 #
00015 # PIXAR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
00016 # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
00017 # SHALL PIXAR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
00018 # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
00019 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
00020 # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
00021 # SOFTWARE.
00022 #
00023 # Pixar
00024 # 1200 Park Ave
00025 # Emeryville CA 94608
00026 #
00027 # ------------------------------------------------------------------------------
00028 */
00029 #include "RixInterfaces.h"
00030 
00031 class RixSubdivisionMesh;
00032 class RixSubdivisionFace;
00033 class RixSudivisionVertex;
00034 
00036 class RixSubdivisionSurfaceEvaluation : public RixInterface 
00037 {
00038 public:
00041     virtual RixSubdivisionMesh *GetSubdivisionMesh(const char *handle) = 0;
00042 
00044     virtual RixSubdivisionMesh *CreateSubdivisionMesh(const RtToken mask,
00045         int nfaces, const int *nverts, const int *verts, int ntags,
00046         RtToken const *tags, int *ntagargs, int *intargs, float *floatargs,
00047         char * const *stringargs, int nparms, RtToken const *tokens,
00048         void **data) = 0;
00049 
00051     virtual void DestroySubdivisionMesh(RixSubdivisionMesh *mesh) = 0;
00052     
00053 protected:
00055     RixSubdivisionSurfaceEvaluation() : RixInterface(2) { }
00056 };
00057 
00059 class RixSubdivisionVertex 
00060 {
00061 protected:    
00062     virtual ~RixSubdivisionVertex() { }
00063 
00064 public:
00067     virtual int GetID() = 0;
00068 
00073     virtual int GetDataIndex() = 0;
00074     
00083     virtual bool GetValue(const RtToken name, int width, float *data) = 0;
00084 
00093     virtual bool GetValue(const RtToken name, int width, const RtToken space, float *data) = 0;
00094 };
00095 
00097 class RixSubdivisionFace {
00098 protected:
00100     virtual ~RixSubdivisionFace() { }
00101 
00102 public:
00105     virtual int GetID() = 0;
00106     
00108     virtual int GetNumVertices() = 0;
00109 
00113     virtual RixSubdivisionVertex *GetVertex(int vertex) = 0;
00114     
00116     virtual void GetBound(RtBound bound) = 0;
00117 
00119     virtual void GetBound(const RtToken space, RtBound bound) = 0;
00120 
00132     virtual RixSubdivisionFace *GetNeighboringFace(int edge,
00133                                                    int *reverseEdge = 0) = 0;
00134 
00137     virtual void Subdivide() = 0;
00138 
00151     virtual RixSubdivisionFace *GetChildFace(int vertex,
00152                                              int *childVertex = 0) = 0;
00153 
00156     virtual RixSubdivisionFace *GetParentFace() = 0;
00157 
00167     virtual bool GetVertexValue(int vertex, const RtToken name, int width,
00168                                 float *data) = 0;
00169 
00179     virtual bool GetVertexValue(int vertex, const RtToken name,
00180                                 int width, const RtToken space,  float *data) = 0;
00181     
00182 
00186     virtual bool GetStringValue(const RtToken name, std::string& data) = 0;
00187     
00192     virtual bool HasLimitSurface() = 0;
00193 
00204     virtual bool EvaluateAtLimit(float u, float v, const RtToken name,
00205                                  int width, float *data) = 0;
00206 
00217     virtual bool EvaluateAtLimitMultiple(int nevals, float *u, float *v, const RtToken name,
00218                                          int width, const RtToken space, float *data) = 0;
00219 
00220 
00231     virtual void SetLimitEvaluationAccuracy(const RtToken space, float distance) = 0;
00232     
00233 };
00234 
00235 
00237 class RixSubdivisionMesh {
00238 protected:
00240     virtual ~RixSubdivisionMesh() { }
00241 
00242 public:
00244     virtual RtToken GetMask() = 0;
00245     
00248     virtual int GetNumFaces() = 0;
00249 
00251     virtual int GetNumCoarseFaces() = 0;
00252 
00254     virtual int GetNumVertices() = 0;
00255 
00258     virtual RixSubdivisionFace *GetFace(int id) = 0;
00259 
00262     virtual RixSubdivisionVertex *GetVertex(int id) = 0;
00263 
00265     virtual void Subdivide(int depth) = 0;
00266 
00270     virtual void GetPackedVertexDataIndices(int depth,
00271                                             std::vector<int> &vertexcounts,
00272                                             std::vector<int> &vertices) = 0;
00273     
00280     virtual bool GetPackedVertexValues(const RtToken name, int width,
00281                                        const RtToken space,
00282                                        std::vector<float> &data) = 0;
00283 };
00284 
00285 
00286 
00287 #endif

Generated on Mon Nov 15 10:14:34 2010 for PRManHeaders by  doxygen 1.4.6