00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00037 #ifndef DISPCMDS_H
00038 #define DISPCMDS_H
00039
00040 class VMDDisplayList;
00041 class Scene;
00042
00049 #define VMDMAXVERTEXBUFSZ (128*1024*1024)
00050
00054 enum { DBEGINREPGEOMGROUP, DPOINT, DPOINTARRAY, DLITPOINTARRAY,
00055 DLINE, DLINEARRAY, DPOLYLINEARRAY,
00056 DCYLINDER,
00057 #if defined(VMDOPTIXRTRT)
00058 DCYLINDERARRAY,
00059 #endif
00060 DSPHERE, DSPHEREARRAY, DCUBEARRAY,
00061 DTRIANGLE, DSQUARE, DCONE,
00062 DTRIMESH_C4F_N3F_V3F, DTRIMESH_C3F_N3F_V3F,
00063 DTRIMESH_C4U_N3F_V3F, DTRIMESH_C4U_N3B_V3F,
00064 DTRISTRIP, DWIREMESH,
00065 DCOLORINDEX, DMATERIALON, DMATERIALOFF,
00066 DTEXT, DCOMMENT,
00067 DCLIPPLANE, DVOLSLICE, DVOLTEXON, DVOLTEXOFF, DVOLUMETEXTURE,
00068 DSPHERERES, DSPHERETYPE, DLINEWIDTH, DLINESTYLE,
00069 DPICKPOINT_ARRAY, DLASTCOMMAND=-1};
00070
00072 enum { SOLIDSPHERE, POINTSPHERE };
00073 enum { SOLIDLINE, DASHEDLINE };
00074
00075
00081 struct DispCmdBeginRepGeomGroup {
00082 void putdata(const char *, VMDDisplayList *);
00083 };
00084
00085
00088 struct DispCmdComment {
00089 void putdata(const char *, VMDDisplayList *);
00090 };
00091
00092
00094 struct DispCmdPoint {
00095 void putdata(const float *, VMDDisplayList *);
00096 float pos[3];
00097 };
00098
00099
00101 struct DispCmdSphere {
00102 void putdata(float *, float, VMDDisplayList *);
00103 float pos_r[4];
00104
00105 };
00106
00107
00108 #if defined(VMDOPTIXRTRT)
00109
00111 struct DispCmdCylinderArray {
00112 static void putdata(const float * points, const float * radii,
00113 const float * colors, int num_cyls,
00114 int cyl_res, int cyl_caps, VMDDisplayList * dobj);
00115
00116 inline void getpointers(
00117 float *& points,
00118 float *& radii,
00119 float *& colors
00120 ) const {
00121 char *rawptr = (char *)this;
00122 points = (float *) (rawptr + sizeof(DispCmdCylinderArray));
00123 radii = (float *) (rawptr + sizeof(DispCmdCylinderArray) +
00124 sizeof(float) * numcylinders * 6L);
00125 colors = (float *) (rawptr + sizeof(DispCmdCylinderArray) +
00126 sizeof(float) * numcylinders * 6L +
00127 sizeof(float) * numcylinders);
00128 }
00129
00130 int numcylinders;
00131 int cylinderres;
00132 int cylindercaps;
00133 };
00134
00135 #endif
00136
00137
00139 struct DispCmdSphereArray {
00140 static void putdata(const float * centers, const float * radii,
00141 const float * colors, int num_spheres,
00142 int sphere_res, VMDDisplayList * dobj);
00143
00144 inline void getpointers(
00145 float *& centers,
00146 float *& radii,
00147 float *& colors
00148 ) const {
00149 char *rawptr = (char *)this;
00150 centers = (float *) (rawptr + sizeof(DispCmdSphereArray));
00151 radii = (float *) (rawptr + sizeof(DispCmdSphereArray) +
00152 sizeof(float) * numspheres * 3L);
00153 colors = (float *) (rawptr + sizeof(DispCmdSphereArray) +
00154 sizeof(float) * numspheres * 3L +
00155 sizeof(float) * numspheres);
00156 }
00157
00158 int numspheres;
00159 int sphereres;
00160 };
00161
00162
00164
00165 struct DispCmdLatticeCubeArray {
00166 static void putdata(const float * centers, const float * radii,
00167 const float * colors, int num_cubes,
00168 VMDDisplayList * dobj);
00169
00170 inline void getpointers(
00171 float *& centers,
00172 float *& radii,
00173 float *& colors
00174 ) const {
00175 char *rawptr = (char *)this;
00176 centers = (float *) (rawptr + sizeof(DispCmdLatticeCubeArray));
00177 radii = (float *) (rawptr + sizeof(DispCmdLatticeCubeArray) +
00178 sizeof(float) * numcubes * 3L);
00179 colors = (float *) (rawptr + sizeof(DispCmdLatticeCubeArray) +
00180 sizeof(float) * numcubes * 3L +
00181 sizeof(float) * numcubes);
00182 }
00183
00184 int numcubes;
00185 };
00186
00187
00189 struct DispCmdPointArray {
00190 static void putdata(const float * centers, const float * colors, float size,
00191 int num_points, VMDDisplayList * dobj);
00192
00193 static void putdata(const float * centers, const int *, Scene *, float size,
00194 int num_points, const int *, int selected,
00195 VMDDisplayList * dobj);
00196
00197 inline void getpointers(
00198 float *& centers,
00199 float *& colors
00200 ) const {
00201 char *rawptr = (char *)this;
00202 centers = (float *) (rawptr + sizeof(DispCmdPointArray));
00203 colors = (float *) (rawptr + sizeof(DispCmdPointArray) +
00204 sizeof(float) * numpoints * 3L);
00205 }
00206 float size;
00207 int numpoints;
00208 };
00209
00210
00212 struct DispCmdLitPointArray {
00213 static void putdata(const float * centers, const float * normals,
00214 const float * colors, float size, int num_points,
00215 VMDDisplayList * dobj);
00216
00217 inline void getpointers(
00218 float *& centers,
00219 float *& normals,
00220 float *& colors
00221 ) const {
00222 char *rawptr = (char *)this;
00223 centers = (float *) (rawptr + sizeof(DispCmdLitPointArray));
00224 normals = (float *) (rawptr + sizeof(DispCmdLitPointArray) +
00225 sizeof(float) * numpoints * 3L);
00226 colors = (float *) (rawptr + sizeof(DispCmdLitPointArray) +
00227 sizeof(float) * numpoints * 6L);
00228 }
00229
00230 float size;
00231 int numpoints;
00232 };
00233
00234
00236 struct DispCmdLine {
00237 void putdata(float *, float *, VMDDisplayList *);
00238 float pos1[3];
00239 float pos2[3];
00240 };
00241
00242
00248 struct DispCmdLineArray {
00249 void putdata(float *v, int nlines, VMDDisplayList *);
00250 };
00251
00252
00258 struct DispCmdPolyLineArray {
00259 void putdata(float *v, int nlines, VMDDisplayList *);
00260 };
00261
00262
00267 struct DispCmdTriangle {
00268 void putdata(const float *, const float *, const float *, VMDDisplayList *);
00269 void putdata(const float *, const float *, const float *,
00270 const float *, const float *, const float *, VMDDisplayList *);
00271
00272 float pos1[3], pos2[3], pos3[3];
00273 float norm1[3], norm2[3], norm3[3];
00274 void set_array(const float *, const float *, const float *,
00275 const float *, const float *, const float *,
00276 VMDDisplayList *);
00277 };
00278
00280 struct DispCmdSquare {
00281 float pos1[3], pos2[3], pos3[3], pos4[3];
00282 float norml[3];
00283 void putdata(float *p1, float *p2, float *p3, VMDDisplayList *);
00284 };
00285
00286
00288 struct DispCmdTriMesh {
00289 static void putdata(const float * vertices,
00290 const float * normals,
00291 const float * colors,
00292 int num_facets,
00293 VMDDisplayList *);
00294
00295 static void putdata(const float * vertices,
00296 const float * normals,
00297 const unsigned char * colors,
00298 int num_facets,
00299 VMDDisplayList *);
00300
00301 static void putdata(const float * vertices,
00302 const char * normals,
00303 const unsigned char * colors,
00304 int num_facets,
00305 VMDDisplayList *);
00306
00307 static void putdata(const float * vertices,
00308 const float * normals,
00309 const float * colors,
00310 int num_verts,
00311 const int * facets,
00312 int num_facets,
00313 int enablestrips,
00314 VMDDisplayList *);
00315
00316 #if defined(VMDCUDA)
00317
00318 static void cuda_putdata(const float * vertices_d,
00319 const float * normals_d,
00320 const float * colors_d,
00321 int num_facets,
00322 VMDDisplayList *);
00323
00325 static void cuda_putdata(const float * vertices_d,
00326 const float * normals_d,
00327 const unsigned char * colors_d,
00328 int num_facets,
00329 VMDDisplayList *);
00330
00332 static void cuda_putdata(const float * vertices_d,
00333 const char * normals_d,
00334 const unsigned char * colors_d,
00335 int num_facets,
00336 VMDDisplayList *);
00337 #endif
00338
00342 inline void getpointers(float *& cnv, int *& f) const {
00343 cnv = (float *)(((char *)this) + sizeof(DispCmdTriMesh));
00344 f = (int *)(cnv + 10L*numverts);
00345 }
00346
00349 inline void getpointers(float *&c, float *&n, float *&v) const {
00350 c = (float *)(((char *)this) + sizeof(DispCmdTriMesh));
00351 n = c + 3L * numverts;
00352 v = n + 3L * numverts;
00353 }
00354
00355 inline void getpointers(unsigned char *&c, float *&n, float *&v) const {
00356 c = (unsigned char *)(((char *)this) + sizeof(DispCmdTriMesh));
00357 n = (float *) (c + numverts * 4L * sizeof(unsigned char));
00358 v = n + 3L * numverts;
00359 }
00360
00361 inline void getpointers(unsigned char *&c, signed char *&n, float *&v) const {
00362 c = (unsigned char *)(((char *)this) + sizeof(DispCmdTriMesh));
00363 v = (float *) (c + numverts * 4L * sizeof(unsigned char));
00364 n = (signed char *) (v + 3L * numverts);
00365 }
00366
00369 inline void getpointers(float *&n, float *&v) const {
00370 n = (float *)(((char *)this) + sizeof(DispCmdTriMesh));
00371 v = n + 3L * numverts;
00372 }
00373
00374 inline void getpointers(signed char *&n, float *&v) const {
00375 v = (float *)(((char *)this) + sizeof(DispCmdTriMesh));
00376 n = (signed char *) (v + 3L * numverts);
00377 }
00378
00379 int pervertexcolors;
00380 int pervertexnormals;
00381 int numverts;
00382 int numfacets;
00383 };
00384
00385
00387 struct DispCmdTriStrips {
00388 static void putdata(const float * vertices,
00389 const float * normals,
00390 const float * colors,
00391 int num_verts,
00392 const int * verts_per_strip,
00393 int num_strips,
00394 const unsigned int * strip_data,
00395 const int num_strip_verts,
00396 int double_sided_lighting,
00397 VMDDisplayList * dobj);
00398
00402 inline void getpointers(
00403 float *& cnv,
00404 int *& f,
00405 int *& vertsperstrip) const {
00406
00407 char *rawptr = (char *)this;
00408 cnv= (float *) (rawptr +
00409 sizeof(DispCmdTriStrips));
00410
00411 f= (int *) (rawptr +
00412 sizeof(DispCmdTriStrips) +
00413 sizeof(float) * numverts * 10L);
00414
00415 vertsperstrip= (int *) (rawptr +
00416 sizeof(DispCmdTriStrips) +
00417 sizeof(float) * numverts * 10L +
00418 sizeof(int) * numstripverts);
00419 }
00420
00421 int numverts;
00422 int numstrips;
00423 int numstripverts;
00424 int doublesided;
00425 };
00426
00427
00429 struct DispCmdWireMesh {
00430 static void putdata(const float * vertices,
00431 const float * normals,
00432 const float * colors,
00433 int num_verts,
00434 const int * lines,
00435 int num_lines, VMDDisplayList *);
00436
00437 inline void getpointers(
00438 float *& cnv,
00439 int *& l
00440 ) const {
00441 char *rawptr = (char *)this;
00442 cnv=(float *) (rawptr + sizeof(DispCmdWireMesh));
00443 l=(int *) (rawptr + sizeof(DispCmdWireMesh) + sizeof(float) * numverts * 10L);
00444 }
00445
00446 int numverts;
00447 int numlines;
00448 };
00449
00450
00451 #define CYLINDER_TRAILINGCAP 1
00452 #define CYLINDER_LEADINGCAP 2
00453
00455 struct DispCmdCylinder {
00456 DispCmdCylinder(void);
00457 float rot[2];
00458 int lastres;
00459 void putdata(const float *, const float *, float, int, int filled,
00460 VMDDisplayList *);
00461 };
00462
00463
00465 struct DispCmdCone {
00466 void putdata(const float *, const float *, float, float,
00467 int, VMDDisplayList *);
00468 float pos1[3], pos2[3];
00469 float radius, radius2;
00470 int res;
00471 };
00472
00473
00475 struct DispCmdColorIndex {
00476 void putdata(int, VMDDisplayList *);
00477 int color;
00478 };
00479
00480
00482 struct DispCmdText {
00483 void putdata(const float *, const char *, float thickness,
00484 float size, float ox, float oy, VMDDisplayList *);
00485 };
00486
00488 struct DispCmdVolSlice {
00489 void putdata(int mode, const float *norm, const float *verts, const float *texcoords,
00490 VMDDisplayList *);
00492 int texmode;
00493 float normal[3];
00495 float v[12];
00496 float t[12];
00497 };
00498
00501 struct DispCmdVolumeTexture {
00502 void putdata(unsigned long texID, const int size[3],
00503 unsigned char *texptr, const float vp0[3], const float vp1[3],
00504 const float vp2[3], const float vp3[3], VMDDisplayList *);
00505 unsigned char * texmap;
00506 unsigned long ID;
00507 unsigned xsize;
00508 unsigned ysize;
00509 unsigned zsize;
00510 float v0[3];
00511 float v1[3];
00512 float v2[3];
00513 float v3[3];
00514 };
00515
00517 struct DispCmdSphereRes {
00518 void putdata(int, VMDDisplayList *);
00519 int res;
00520 };
00521
00522
00524 struct DispCmdSphereType {
00525 void putdata(int, VMDDisplayList *);
00526 int type;
00527 };
00528
00529
00531 struct DispCmdLineType {
00532 void putdata(int, VMDDisplayList *);
00533 int type;
00534 };
00535
00536
00538 struct DispCmdLineWidth {
00539 void putdata(int, VMDDisplayList *);
00540 int width;
00541 };
00542
00543
00545 struct DispCmdPickPoint {
00546 void putdata(float *, int, VMDDisplayList *);
00547 float postag[3];
00548 int tag;
00549 };
00550
00551
00554 struct DispCmdPickPointArray {
00559 void putdata(int num, int numsel, int firstsel,
00560 int *on, float *coords, VMDDisplayList *);
00561
00563 void putdata(int num, int *indices, float *coords, VMDDisplayList *);
00564
00565 inline void getpointers(float *& coords, int *& tags) const {
00566 char *rawptr = (char *)this;
00567 coords = (float *) (rawptr + sizeof(DispCmdPickPointArray));
00568
00569 if (allselected) {
00570 tags = NULL;
00571 return;
00572 }
00573
00574 tags = (int *) (rawptr + sizeof(DispCmdPickPointArray) +
00575 3L * sizeof(float) * numpicks);
00576 }
00577
00578 int numpicks;
00579 int allselected;
00580 int firstindex;
00581 };
00582
00583 #endif
00584