00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00075 #ifndef LIBOPTIXRENDERER
00076 #define LIBOPTIXRENDERER
00077
00078 #if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)
00079
00080 #define NOMINMAX 1
00081 #endif
00082
00083 #include <optix.h>
00084 #include <optix_math.h>
00085 #include <stdio.h>
00086 #include <stdlib.h>
00087 #include "Matrix4.h"
00088 #include "ResizeArray.h"
00089 #include "WKFUtils.h"
00090
00091 class VMDApp;
00092 class VMDDisplayList;
00093
00094
00095 #if 0
00096 #define ORT_RAYSTATS 1
00097 #endif
00098
00099
00100
00101 #if OPTIX_VERSION >= 60000
00102 #define ORT_USERTXAPIS 1
00103 #endif
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 #if OPTIX_VERSION < 40000
00116
00117
00118
00119 #define ORT_USE_TEMPLATE_SHADERS 1
00120 #endif
00121
00122
00123 #ifdef VMDOPTIX_VCA_TABSZHACK
00124 #define ORTMTABSZ 64
00125 #else
00126 #define ORTMTABSZ 256
00127 #endif
00128
00129
00130
00131
00132 #if (defined(VMDOPTIX_VCA) || (OPTIX_VERSION >= 3080)) // && !defined(VMDUSEOPENHMD)
00133 #define VMDOPTIX_PROGRESSIVEAPI 1
00134 #endif
00135
00136 #if 1 || defined(VMDOPTIX_PROGRESSIVEAPI)
00137 #define VMDOPTIX_LIGHTUSEROBJS 1
00138 #endif
00139
00140
00141
00142 #if defined(VMDOPTIX_INTERACTIVE_OPENGL) && !defined(VMDOPENGL)
00143 #undef VMDOPTIX_INTERACTIVE_OPENGL
00144 #endif
00145
00146 #if defined(VMDOPTIX_INTERACTIVE_OPENGL)
00147 #include "glwin.h"
00148 #endif
00149
00151 typedef struct {
00152 RTmaterial mat;
00153 int isvalid;
00154 float ambient;
00155 float diffuse;
00156 float specular;
00157 float shininess;
00158 float reflectivity;
00159 float opacity;
00160 float outline;
00161 float outlinewidth;
00162 int transmode;
00163 int ind;
00164 } ort_material;
00165
00166 typedef struct {
00167 float dir[3];
00168 float color[3];
00169 } ort_directional_light;
00170
00171 typedef struct {
00172 float pos[3];
00173 float color[3];
00174 } ort_positional_light;
00175
00176
00177 class OptiXRenderer {
00178 public:
00179 enum ClipMode { RT_CLIP_NONE=0, RT_CLIP_PLANE=1, RT_CLIP_SPHERE=2 };
00180 enum HeadlightMode { RT_HEADLIGHT_OFF=0, RT_HEADLIGHT_ON=1 };
00181 enum FogMode { RT_FOG_NONE=0, RT_FOG_LINEAR=1, RT_FOG_EXP=2, RT_FOG_EXP2=3 };
00182 enum CameraProjection { RT_PERSPECTIVE=0,
00183 RT_ORTHOGRAPHIC=1,
00184 RT_CUBEMAP=2,
00185 RT_DOME_MASTER=3,
00186 RT_EQUIRECTANGULAR=4,
00187 RT_OCULUS_RIFT
00188 };
00189 enum Verbosity { RT_VERB_MIN=0, RT_VERB_TIMING=1, RT_VERB_DEBUG=2 };
00190 enum BGMode { RT_BACKGROUND_TEXTURE_SOLID=0,
00191 RT_BACKGROUND_TEXTURE_SKY_SPHERE=1,
00192 RT_BACKGROUND_TEXTURE_SKY_ORTHO_PLANE=2 };
00193 enum RayType { RT_RAY_TYPE_RADIANCE=0,
00194 RT_RAY_TYPE_SHADOW=1,
00195 RT_RAY_TYPE_COUNT=2 };
00196 enum RayGen { RT_RAY_GEN_CLEAR_ACCUMULATION_BUFFER=0,
00197 RT_RAY_GEN_ACCUMULATE=1,
00198 RT_RAY_GEN_COPY_FINISH=2,
00199 #if defined(ORT_RAYSTATS)
00200 RT_RAY_GEN_CLEAR_RAYSTATS=3,
00201 RT_RAY_GEN_COUNT=4 };
00202 #else
00203 RT_RAY_GEN_COUNT=3 };
00204 #endif
00205
00206 private:
00207 VMDApp *app;
00208 Verbosity verbose;
00209 int width;
00210 int height;
00211 char shaderpath[8192];
00212
00213 wkf_timerhandle ort_timer;
00214 double time_ctx_create;
00215 double time_ctx_setup;
00216 double time_ctx_validate;
00217 double time_ctx_AS_build;
00218 double time_ctx_destroy_scene;
00219 double time_ray_tracing;
00220 double time_image_io;
00221
00222
00223 int context_created;
00224 RTcontext ctx;
00225 RTresult lasterror;
00226
00227 #if defined(ORT_USERTXAPIS)
00228 int rtx_enabled;
00229 int hwtri_enabled;
00230 #endif
00231 int buffers_allocated;
00232 int buffers_progressive;
00233 RTbuffer framebuffer;
00234 RTvariable framebuffer_v;
00235 RTbuffer accumulation_buffer;
00236 RTvariable accumulation_buffer_v;
00237 RTvariable accum_count_v;
00238 #if defined(ORT_RAYSTATS)
00239
00240 RTbuffer raystats1_buffer;
00241 RTvariable raystats1_buffer_v;
00242 RTbuffer raystats2_buffer;
00243 RTvariable raystats2_buffer_v;
00244 #endif
00245
00246 int clipview_mode;
00247 RTvariable clipview_mode_v;
00248 float clipview_start;
00249 RTvariable clipview_start_v;
00250 float clipview_end;
00251 RTvariable clipview_end_v;
00252
00253 int headlight_mode;
00254 RTvariable headlight_mode_v;
00255
00256 #if defined(VMDOPTIX_LIGHTUSEROBJS)
00257 RTvariable dir_light_list_v;
00258 RTvariable pos_light_list_v;
00259 #else
00260 RTvariable dir_lightbuffer_v;
00261 RTbuffer dir_lightbuffer;
00262 RTvariable pos_lightbuffer_v;
00263 RTbuffer pos_lightbuffer;
00264 #endif
00265
00266 RTvariable ao_ambient_v;
00267 float ao_ambient;
00268 RTvariable ao_direct_v;
00269 float ao_direct;
00270 RTvariable ao_maxdist_v;
00271 float ao_maxdist;
00272
00273 RTprogram exception_pgm;
00274
00275 int set_accum_raygen_pgm(CameraProjection &proj, int stereo_on, int dof_on);
00276
00277 #if defined(ORT_RAYSTATS)
00278 RTprogram clear_raystats_buffers_pgm;
00279 #endif
00280
00281 RTprogram clear_accumulation_buffer_pgm;
00282 RTprogram draw_accumulation_buffer_pgm;
00283 RTprogram draw_accumulation_buffer_stub_pgm;
00284
00285 RTprogram ray_gen_pgm_cubemap;
00286 RTprogram ray_gen_pgm_cubemap_dof;
00287 RTprogram ray_gen_pgm_cubemap_stereo;
00288 RTprogram ray_gen_pgm_cubemap_stereo_dof;
00289
00290 RTprogram ray_gen_pgm_dome_master;
00291 RTprogram ray_gen_pgm_dome_master_dof;
00292 RTprogram ray_gen_pgm_dome_master_stereo;
00293 RTprogram ray_gen_pgm_dome_master_stereo_dof;
00294
00295 RTprogram ray_gen_pgm_equirectangular;
00296 RTprogram ray_gen_pgm_equirectangular_dof;
00297 RTprogram ray_gen_pgm_equirectangular_stereo;
00298 RTprogram ray_gen_pgm_equirectangular_stereo_dof;
00299
00300 RTprogram ray_gen_pgm_oculus_rift;
00301 RTprogram ray_gen_pgm_oculus_rift_dof;
00302 RTprogram ray_gen_pgm_oculus_rift_stereo;
00303 RTprogram ray_gen_pgm_oculus_rift_stereo_dof;
00304
00305 RTprogram ray_gen_pgm_perspective;
00306 RTprogram ray_gen_pgm_perspective_dof;
00307 RTprogram ray_gen_pgm_perspective_stereo;
00308 RTprogram ray_gen_pgm_perspective_stereo_dof;
00309
00310 RTprogram ray_gen_pgm_orthographic;
00311 RTprogram ray_gen_pgm_orthographic_dof;
00312 RTprogram ray_gen_pgm_orthographic_stereo;
00313 RTprogram ray_gen_pgm_orthographic_stereo_dof;
00314
00315 RTprogram closest_hit_pgm_general;
00316 #if defined(ORT_USE_TEMPLATE_SHADERS)
00317 RTprogram closest_hit_pgm_special[ORTMTABSZ];
00318 #endif
00319 #if defined(ORT_USERTXAPIS)
00320 RTprogram closest_hit_pgm_general_hwtri;
00321 #if defined(ORT_USE_TEMPLATE_SHADERS)
00322 RTprogram closest_hit_pgm_special_hwtri[ORTMTABSZ];
00323 #endif
00324 #endif
00325
00326 RTprogram any_hit_pgm_opaque;
00327 RTprogram any_hit_pgm_transmission;
00328 RTprogram any_hit_pgm_clip_sphere;
00329
00330 RTprogram miss_pgm_solid;
00331 RTprogram miss_pgm_sky_sphere;
00332 RTprogram miss_pgm_sky_ortho_plane;
00333
00334
00335 RTmaterial material_general;
00336 #if defined(ORT_USE_TEMPLATE_SHADERS)
00337 RTmaterial material_special[ORTMTABSZ];
00338 #endif
00339 #if defined(ORT_USERTXAPIS)
00340 RTmaterial material_general_hwtri;
00341 #if defined(ORT_USE_TEMPLATE_SHADERS)
00342 RTmaterial material_special_hwtri[ORTMTABSZ];
00343 #endif
00344 #endif
00345 int material_special_counts[ORTMTABSZ];
00346
00347
00348
00349 RTprogram cylinder_array_isct_pgm;
00350 RTprogram cylinder_array_bbox_pgm;
00351 long cylinder_array_cnt;
00352
00353
00354 RTprogram cylinder_array_color_isct_pgm;
00355 RTprogram cylinder_array_color_bbox_pgm;
00356 long cylinder_array_color_cnt;
00357
00358
00359
00360 RTprogram ring_array_color_isct_pgm;
00361 RTprogram ring_array_color_bbox_pgm;
00362 long ring_array_color_cnt;
00363
00364
00365
00366 RTprogram sphere_array_isct_pgm;
00367 RTprogram sphere_array_bbox_pgm;
00368 long sphere_array_cnt;
00369
00370
00371 RTprogram sphere_array_color_isct_pgm;
00372 RTprogram sphere_array_color_bbox_pgm;
00373 long sphere_array_color_cnt;
00374
00375
00376
00377 RTprogram tricolor_isct_pgm;
00378 RTprogram tricolor_bbox_pgm;
00379 long tricolor_cnt;
00380
00381 RTprogram trimesh_c4u_n3b_v3f_isct_pgm;
00382 RTprogram trimesh_c4u_n3b_v3f_bbox_pgm;
00383 long trimesh_c4u_n3b_v3f_cnt;
00384
00385 RTprogram trimesh_n3f_v3f_isct_pgm;
00386 RTprogram trimesh_n3f_v3f_bbox_pgm;
00387 long trimesh_n3b_v3f_cnt;
00388
00389 RTprogram trimesh_n3b_v3f_isct_pgm;
00390 RTprogram trimesh_n3b_v3f_bbox_pgm;
00391 long trimesh_n3f_v3f_cnt;
00392
00393 RTprogram trimesh_v3f_isct_pgm;
00394 RTprogram trimesh_v3f_bbox_pgm;
00395 long trimesh_v3f_cnt;
00396
00397
00398 int scene_created;
00399 RTgeometrygroup geometrygroup;
00400 RTacceleration acceleration;
00401 #if defined(ORT_USERTXAPIS)
00402
00403 RTgeometrygroup geometrytrianglesgroup;
00404 RTacceleration trianglesacceleration;
00405 #endif
00406
00407 RTgroup root_group;
00408 RTacceleration root_acceleration;
00409 RTvariable root_object_v;
00410 RTvariable root_shadower_v;
00411
00412
00413
00414
00415
00416
00417 RTvariable progressive_enabled_v;
00418
00419 unsigned int scene_max_depth;
00420 int scene_max_trans;
00421 RTvariable max_depth_v;
00422 RTvariable max_trans_v;
00423
00424 RTvariable radiance_ray_type_v;
00425 RTvariable shadow_ray_type_v;
00426 RTvariable scene_epsilon_v;
00427
00428
00429 RTvariable shadows_enabled_v;
00430 int shadows_enabled;
00431
00432 RTvariable cam_zoom_v;
00433 float cam_zoom;
00434
00435 RTvariable cam_pos_v;
00436 RTvariable cam_U_v;
00437 RTvariable cam_V_v;
00438 RTvariable cam_W_v;
00439
00440 RTvariable cam_stereo_eyesep_v;
00441 float cam_stereo_eyesep;
00442 RTvariable cam_stereo_convergence_dist_v;
00443 float cam_stereo_convergence_dist;
00444
00445 int dof_enabled;
00446 RTvariable cam_dof_focal_dist_v;
00447 RTvariable cam_dof_aperture_rad_v;
00448 float cam_dof_focal_dist;
00449 float cam_dof_fnumber;
00450
00451 #if 0
00452 RTvariable camera_projection_v;
00453 #endif
00454 CameraProjection camera_projection;
00455
00456 int ext_aa_loops;
00457
00458 RTvariable accum_norm_v;
00459
00460 RTvariable aa_samples_v;
00461 int aa_samples;
00462
00463 RTvariable ao_samples_v;
00464 int ao_samples;
00465
00466
00467 BGMode scene_background_mode;
00468 RTvariable scene_bg_color_v;
00469 float scene_bg_color[3];
00470 RTvariable scene_bg_grad_top_v;
00471 float scene_bg_grad_top[3];
00472 RTvariable scene_bg_grad_bot_v;
00473 float scene_bg_grad_bot[3];
00474 RTvariable scene_gradient_v;
00475 float scene_gradient[3];
00476 RTvariable scene_gradient_topval_v;
00477 float scene_gradient_topval;
00478 RTvariable scene_gradient_botval_v;
00479 float scene_gradient_botval;
00480 RTvariable scene_gradient_invrange_v;
00481 float scene_gradient_invrange;
00482
00483
00484 int clip_mode;
00485 float clip_start;
00486 float clip_end;
00487
00488
00489 RTvariable fog_mode_v;
00490 int fog_mode;
00491 RTvariable fog_start_v;
00492 float fog_start;
00493 RTvariable fog_end_v;
00494 float fog_end;
00495 RTvariable fog_density_v;
00496 float fog_density;
00497
00498 ResizeArray<ort_material> materialcache;
00499
00500 ResizeArray<ort_directional_light> directional_lights;
00501 ResizeArray<ort_positional_light> positional_lights;
00502
00503
00504 ResizeArray<RTbuffer> bufferlist;
00505 ResizeArray<RTgeometry> geomlist;
00506 ResizeArray<RTgeometryinstance> geominstancelist;
00507 #if defined(ORT_USERTXAPIS)
00508
00509 ResizeArray<RTgeometrytriangles> geomtriangleslist;
00510 ResizeArray<RTgeometryinstance> geomtrianglesinstancelist;
00511 #endif
00512
00513 void append_objects(RTbuffer buf, RTgeometry geom,
00514 RTgeometryinstance instance) {
00515 bufferlist.append(buf);
00516 geomlist.append(geom);
00517 geominstancelist.append(instance);
00518 }
00519
00520 #if defined(ORT_USERTXAPIS)
00521
00522 void append_objects(RTbuffer nbuf, RTbuffer cbuf,
00523 RTgeometrytriangles geom_hwtri,
00524 RTgeometryinstance instance_hwtri) {
00525 bufferlist.append(nbuf);
00526 bufferlist.append(cbuf);
00527 geomtriangleslist.append(geom_hwtri);
00528 geomtrianglesinstancelist.append(instance_hwtri);
00529 }
00530
00531 void append_buffer(RTbuffer buf) {
00532 bufferlist.append(buf);
00533 }
00534 #endif
00535
00538 float calc_matrix_scale_factor(const float *matrix);
00539
00540
00541 public:
00542 OptiXRenderer(VMDApp *vmdapp);
00543 ~OptiXRenderer(void);
00544
00547 static unsigned int device_list(int **, char ***);
00548 static unsigned int device_count(void);
00549 static unsigned int optix_version(void);
00550
00551 static int material_shader_table_size(void);
00552
00554 void check_verbose_env();
00555
00557 void create_context(void);
00558 void setup_context(int width, int height);
00559
00561 void report_context_stats(void);
00562
00564 void shadows_on(int onoff) { shadows_enabled = (onoff != 0); }
00565
00567 void set_aa_samples(int cnt) { aa_samples = cnt; }
00568
00570 void set_camera_projection(CameraProjection m) { camera_projection = m; }
00571
00573 void set_camera_zoom(float zoomfactor) { cam_zoom = zoomfactor; }
00574
00576 void set_camera_stereo_eyesep(float eyesep) { cam_stereo_eyesep = eyesep; }
00577
00579 void set_camera_stereo_convergence_dist(float dist) {
00580 cam_stereo_convergence_dist = dist;
00581 }
00582
00584 void dof_on(int onoff) { dof_enabled = (onoff != 0); }
00585
00587 void set_camera_dof_focal_dist(float d) { cam_dof_focal_dist = d; }
00588
00590 void set_camera_dof_fnumber(float n) { cam_dof_fnumber = n; }
00591
00593 void set_ao_samples(int cnt) { ao_samples = cnt; }
00594
00596 void set_ao_ambient(float aoa) { ao_ambient = aoa; }
00597
00599 void set_ao_direct(float aod) { ao_direct = aod; }
00600
00601 void set_bg_mode(BGMode m) { scene_background_mode = m; }
00602 void set_bg_color(float *rgb) { memcpy(scene_bg_color, rgb, sizeof(scene_bg_color)); }
00603 void set_bg_color_grad_top(float *rgb) { memcpy(scene_bg_grad_top, rgb, sizeof(scene_bg_grad_top)); }
00604 void set_bg_color_grad_bot(float *rgb) { memcpy(scene_bg_grad_bot, rgb, sizeof(scene_bg_grad_bot)); }
00605 void set_bg_gradient(float *vec) { memcpy(scene_gradient, vec, sizeof(scene_gradient)); }
00606 void set_bg_gradient_topval(float v) { scene_gradient_topval = v; }
00607 void set_bg_gradient_botval(float v) { scene_gradient_botval = v; }
00608
00610 void set_clip_sphere(ClipMode mode, float start, float end) {
00611 clip_mode = mode;
00612 clip_start = start;
00613 clip_end = end;
00614 }
00615
00617 void set_cue_mode(FogMode mode, float start, float end, float density) {
00618 fog_mode = mode;
00619 fog_start = start;
00620 fog_end = end;
00621 fog_density = density;
00622 }
00623
00624 void init_materials();
00625 void add_material(int matindex, float ambient, float diffuse,
00626 float specular, float shininess, float reflectivity,
00627 float opacity, float outline, float outlinewidth,
00628 int transmode);
00629 void set_material(RTgeometryinstance instance, int matindex,
00630 const float *uniform_color, int hwtri=0);
00631
00632 void clear_all_lights() {
00633 directional_lights.clear();
00634 positional_lights.clear();
00635 }
00636 void set_clipview_mode(int mode) {
00637 clipview_mode = mode;
00638 };
00639 void set_headlight_onoff(int onoff) {
00640 headlight_mode = (onoff==1) ? RT_HEADLIGHT_ON : RT_HEADLIGHT_OFF;
00641 };
00642 void add_directional_light(const float *dir, const float *color);
00643 void add_positional_light(const float *pos, const float *color);
00644
00645 void update_rendering_state(int interactive);
00646
00647 void framebuffer_config(int fbwidth, int fbheight, int interactive);
00648 void framebuffer_resize(int fbwidth, int fbheight);
00649 void framebuffer_map_rgb4u(unsigned char **imgrgb4u);
00650 void framebuffer_unmap();
00651 void framebuffer_destroy(void);
00652
00653 void render_compile_and_validate(void);
00654 void render_to_file(const char *filename, int writealpha);
00655 #if defined(VMDOPTIX_INTERACTIVE_OPENGL)
00656 void render_to_glwin(const char *filename, int writealpha);
00657 #endif
00658 void render_to_videostream(const char *filename, int writealpha);
00659
00660 #if defined(VMDOPTIXRTRT)
00661
00662 void add_material_cmdlist(const VMDDisplayList *cmdList);
00663
00666 void scene_aggregate_cmdlist(const VMDDisplayList *cmdList,
00667 const float *colorData);
00668
00670 void scene_aggregation_complete();
00671
00673 void render_current_scene();
00674 #endif
00675
00676 void destroy_scene(void);
00677 void destroy_context(void);
00678
00679 void cylinder_array(Matrix4 *wtrans, float rscale, const float *uniform_color,
00680 int cylnum, const float *points, int matindex);
00681
00682 void cylinder_array_color(Matrix4 *wtrans, float rscale, int cylnum,
00683 const float *points, const float *radii,
00684 const float *colors, int matindex);
00685
00686 void ring_array_color(Matrix4 & wtrans, float rscale, int rnum,
00687 const float *centers, const float *norms,
00688 const float *radii, const float *colors, int matindex);
00689
00690 void sphere_array(Matrix4 *wtrans, float rscale, const float *uniform_color,
00691 int spnum, const float *centers, const float *radii,
00692 int matindex);
00693
00694 void sphere_array_color(Matrix4 & wtrans, float rscale, int spnum,
00695 const float *centers, const float *radii,
00696 const float *colors, int matindex);
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710 #if defined(ORT_USERTXAPIS)
00711 void tricolor_list_hwtri(Matrix4 & wtrans,
00712 int numtris, const float *vnc, int matindex);
00713 #endif
00714 void tricolor_list(Matrix4 & wtrans,
00715 int numtris, const float *vnc, int matindex);
00716
00717
00718 #if defined(ORT_USERTXAPIS)
00719 void trimesh_c4n3v3_hwtri(Matrix4 & wtrans,
00720 int numverts, const float *cnv,
00721 int numfacets, const int * facets,
00722 int matindex);
00723 #endif
00724 void trimesh_c4n3v3(Matrix4 & wtrans,
00725 int numverts, const float *cnv,
00726 int numfacets, const int * facets,
00727 int matindex);
00728
00729
00730 #if defined(ORT_USERTXAPIS)
00731 void trimesh_c4u_n3b_v3f_hwtri(Matrix4 & wtrans, const unsigned char *c,
00732 const signed char *n, const float *v,
00733 int numfacets, int matindex);
00734 #endif
00735 void trimesh_c4u_n3b_v3f(Matrix4 & wtrans, const unsigned char *c,
00736 const signed char *n, const float *v,
00737 int numfacets, int matindex);
00738
00739
00740 #if defined(ORT_USERTXAPIS)
00741 void trimesh_c4u_n3f_v3f_hwtri(Matrix4 & wtrans, const unsigned char *c,
00742 const float *n, const float *v,
00743 int numfacets, int matindex);
00744 #endif
00745 void trimesh_c4u_n3f_v3f(Matrix4 & wtrans, const unsigned char *c,
00746 const float *n, const float *v,
00747 int numfacets, int matindex);
00748
00749
00750 #if defined(ORT_USERTXAPIS)
00751 void trimesh_n3b_v3f_hwtri(Matrix4 & wtrans, const float *uniform_color,
00752 const signed char *n, const float *v,
00753 int numfacets, int matindex);
00754 #endif
00755 void trimesh_n3b_v3f(Matrix4 & wtrans, const float *uniform_color,
00756 const signed char *n, const float *v,
00757 int numfacets, int matindex);
00758
00759
00760 #if defined(ORT_USERTXAPIS)
00761 void trimesh_n3f_v3f_hwtri(Matrix4 & wtrans, const float *uniform_color,
00762 const float *n, const float *v,
00763 int numfacets, int matindex);
00764 #endif
00765 void trimesh_n3f_v3f(Matrix4 & wtrans, const float *uniform_color,
00766 const float *n, const float *v,
00767 int numfacets, int matindex);
00768
00769
00770 #if defined(ORT_USERTXAPIS)
00771 void trimesh_v3f_hwtri(Matrix4 & wtrans, const float *uniform_color,
00772 const float *v, int numfacets, int matindex);
00773 #endif
00774 void trimesh_v3f(Matrix4 & wtrans, const float *uniform_color,
00775 const float *v, int numfacets, int matindex);
00776
00777
00778 #if defined(ORT_USERTXAPIS)
00779 void tristrip_hwtri(Matrix4 & wtrans,
00780 int numverts, const float * cnv,
00781 int numstrips, const int *vertsperstrip,
00782 const int *facets, int matindex);
00783 #endif
00784 void tristrip(Matrix4 & wtrans,
00785 int numverts, const float * cnv,
00786 int numstrips, const int *vertsperstrip,
00787 const int *facets, int matindex);
00788
00789 };
00790
00791 #endif
00792