/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ #include #ifndef tdmXfield_h #define tdmXfield_h /*---------------------------------------------------------------------------*\ $Source: /home/gda/dxcvs/dx/src/exec/hwrender/hwXfield.h,v $ Author: Tim Murphy This file contains definitions for the 'xfield' structure. This structure represents a DX fieldobject which has been converted to a form which is more pallatable to the render(s). \*---------------------------------------------------------------------------*/ enum approxE { approx_none, /* no approximation */ approx_flat, /* flat shading - NOT IMPLEMENTED */ approx_lines, /* line rendering - NOT IMPLEMENTED */ approx_dots, /* dots */ approx_box /* box */ }; typedef struct SavedTextureS { void * Address; int Index; } SavedTextureT; typedef struct approxS { enum approxE approx; int density; } approxT; enum xr { XR_OPTIONAL=0, XR_REQUIRED=1 }; enum xd { XD_NONE, XD_GLOBAL, XD_LOCAL }; /* dependencies XXX do NOT reorder these, they are used and indices into * static arrays in xfield.c */ typedef enum dependencyE { dep_none, dep_field, dep_positions, dep_connections, dep_polylines } dependencyT,*dependencyP; /* type of connections */ typedef enum connectionTypeE { ct_none, /* none specified */ ct_lines, /* line segments */ ct_polylines, /* external polylines */ ct_triangles, /* triangles */ ct_quads, /* quads */ ct_tetrahedra, /* tetrahedra */ ct_cubes, /* cubes */ ct_tmesh, /* special internal case triangle mesh */ ct_qmesh, /* special internal case quad mesh */ ct_flatGrid, /* special internal case planer quad grid */ ct_pline /* special internal case polylines */ } connectionTypeT,*connectionTypeP; typedef struct materialAttrS { float ambient; float diffuse; float specular; float shininess; } materialAttrT, *materialAttrP; typedef struct attributeS { hwFlagsT flags; /* booleans */ int flat_z; /* use flat z in volume rendering ? */ int skip; /* skip faces at random in volume rendering */ float color_multiplier; /* multiplier for volume colors */ float opacity_multiplier; /* multiplier for volume opacities */ int shade; /* 0 = subpress lighting even if normals */ approxT buttonDown; approxT buttonUp; float fuzz; float ff; float linewidth; int aalines; /* 1 = turn on line anti-aliasing */ materialAttrT front; materialAttrT back; float mm[4][4]; /* Model transformation matrix */ float vm[4][4]; dxObject texture; } attributeT; typedef struct xfieldS { attributeT attributes; float Near; /* near plane for perspective clipping */ int ntransConnections; /* count of total transparent connections in all fields */ /* bounding box */ Point box[8]; /* XXX hack for SGI complier */ #define nconnections ncntns #define connections cntns #define connections_array cntns_array #define connections_data cntns_data /* connections */ Array connections_array; ArrayHandle connections; connectionTypeT connectionType; int posPerConn; int nconnections; InvalidComponentHandle invCntns; /* invalid connections */ /* * texture-mapping stuff */ dxObject texture_field; ubyte *texture; int myTextureData; Array uv_array; ArrayHandle uv; int textureWidth, textureHeight; Array polylines_array, edges_array; int *polylines, npolylines; /* polylines are handled separately since */ int *edges, nedges; /* they require an indirection through an */ /* "edges" component */ /* positions */ Array positions_array; ArrayHandle positions; int npositions; int shape; /* 2 = 2d data, 3 = 3d data */ InvalidComponentHandle invPositions; /* invalid connections */ /* normals */ Array normals_array; ArrayHandle normals; int nnormals; dependencyT normalsDep; /* front colors */ Array fcolors_array; ArrayHandle fcolors; int nfcolors; dependencyT fcolorsDep; dependencyT colorsDep; /* back colors */ Array bcolors_array; ArrayHandle bcolors; int nbcolors; dependencyT bcolorsDep; /* color map */ Array cmap_array; ArrayHandle cmap; int ncmap; /* opacities */ Array opacities_array; ArrayHandle opacities; int nopacities; dependencyT opacitiesDep; /* opacity map */ Array omap_array; ArrayHandle omap; int nomap; /* neighbors */ Array neighbors_array; ArrayHandle neighbors; int nneighbors; /* meshes */ Array meshes; int nmeshes; dxObject meshObject; Array origConnections_array; int origNConnections; /* Lighting coeficients amb, diff, spec, shine */ float lk[4]; /* information about regular partition */ int k[3]; /* counts, strides in each direction */ int nClips; Point *clipPts; Vector *clipVecs; /* DEVICE PRIVATE DATA */ /* NOTE: XXX This should really be a pointer to a private section */ void (*deletePrivate)(struct xfieldS *); /* for OLD_PORT_LAYER_CALLS */ Field field; Pointer connections_data; Pointer positions_data; Pointer normals_data; Pointer fcolors_data; Pointer cmap_data; Pointer opacities_data; Pointer omap_data; Pointer invCntns_data; /* Fields collected only for texture mapping */ Point v0,v1,v2,v3; /* Text world space quad corners */ Field image; /* image field */ /* This is for the device dependent GLobject */ long glObject; SavedTextureT FlatGridTexture; int UseDisplayList; int UseFastClip; int cullFace; int clockWise; } xfieldT; typedef struct clipS { unsigned char clip[8]; } clipT, *clipP; struct sortListElement { xfieldT *xf; int poly; float depth; }; #define DXHW_CULL_OFF 0 #define DXHW_CULL_NONE 1 #define DXHW_CULL_FRONT 2 #define DXHW_CULL_BACK 3 xfieldO _dxf_newXfieldO(Field, attributeP, void *); xfieldP _dxf_getXfieldData(xfieldO); xfieldP _dxf_newXfieldP(Field, attributeP, void *); int _dxf_xfieldNconnections(xfieldP xf); int _dxf_xfieldSidesPerConnection(xfieldP xf); attributeP _dxf_xfieldAttributes(xfieldP xf); materialAttrP _dxf_attributeFrontMaterial(attributeP att); Error _dxf_getHwXfieldClipPlanes(xfieldO xo, int *nClips, Point **pts, Vector **vecs); Error _dxf_setHwXfieldClipPlanes(xfieldO xo, int nClips, Point *pts, Vector *vecs); Error _dxf_deleteXfield(xfieldP xf); #endif /* tdmXfield_h */