/**************************************************************************** * vlbuffer.h * * This module contains all defines, typedefs, and prototypes for VLBUFFER.C. * * from Persistence of Vision(tm) Ray Tracer * Copyright 1996 Persistence of Vision Team *--------------------------------------------------------------------------- * NOTICE: This source code file is provided so that users may experiment * with enhancements to POV-Ray and to port the software to platforms other * than those supported by the POV-Ray Team. There are strict rules under * which you are permitted to use this file. The rules are in the file * named POVLEGAL.DOC which should be distributed with this file. If * POVLEGAL.DOC is not available or for more info please contact the POV-Ray * Team Coordinator by leaving a message in CompuServe's Graphics Developer's * Forum. The latest version of POV-Ray may be found there as well. * * This program is based on the popular DKB raytracer version 2.12. * DKBTrace was originally written by David K. Buck. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins. * *****************************************************************************/ #ifndef VLBUFFER_H #define VLBUFFER_H #include "bbox.h" /***************************************************************************** * Global preprocessor defines ******************************************************************************/ /* flag to mark a node as pruned */ #define PRUNE_CHECK 128 #define PRUNE_TEMPORARY 128 /* Define minimum and maximum values for buffer coordinates. */ #define MIN_BUFFER_ENTRY -32000 #define MAX_BUFFER_ENTRY 32000 /* Define maximum number of clippoints. */ #define MAX_CLIP_POINTS 20 /* Define all six coordinate axes. */ #define XaxisP 0 #define XaxisM 1 #define YaxisP 2 #define YaxisM 3 #define ZaxisP 4 #define ZaxisM 5 /***************************************************************************** * Global typedefs ******************************************************************************/ typedef struct Project_Struct PROJECT; typedef struct Project_Tree_Node_Struct PROJECT_TREE_NODE; typedef struct Project_Tree_Leaf_Struct PROJECT_TREE_LEAF; typedef struct Project_Queue_Struct PROJECT_QUEUE; struct Project_Struct { int x1, y1, x2, y2; }; /* * The following structure represent the bounding box hierarchy in 2d space. * Because is_leaf, Object and Project are the first elements in both * structures they can be accessed without knowing at which structure * a pointer is pointing. */ struct Project_Tree_Node_Struct { unsigned short is_leaf; BBOX_TREE *Node; PROJECT Project; unsigned short Entries; PROJECT_TREE_NODE **Entry; }; struct Project_Tree_Leaf_Struct { unsigned short is_leaf; BBOX_TREE *Node; PROJECT Project; }; struct Project_Queue_Struct { unsigned QSize; unsigned Max_QSize; PROJECT_TREE_NODE **Queue; }; /***************************************************************************** * Global variables ******************************************************************************/ extern PROJECT_QUEUE *Node_Queue; extern PRIORITY_QUEUE *VLBuffer_Queue; /***************************************************************************** * Global functions ******************************************************************************/ void Clip_Polygon PARAMS((VECTOR *Points, int *PointCnt, VECTOR VX1, VECTOR VX2, VECTOR VY1, VECTOR VY2, DBL DX1, DBL DX2, DBL DY1, DBL DY2)); void Initialize_VLBuffer_Code PARAMS((void)); void Reinitialize_VLBuffer_Code PARAMS((void)); void Deinitialize_VLBuffer_Code PARAMS((void)); void Destroy_Project_Tree PARAMS((PROJECT_TREE_NODE *Node)); #endif