Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

OptiXRenderer.h

Go to the documentation of this file.
00001 /***************************************************************************
00002 *cr 
00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 
00004 *cr University of Illinois 
00005 *cr All Rights Reserved 
00006 *cr 
00007 ***************************************************************************/
00008 
00009 /***************************************************************************
00010 * RCS INFORMATION:
00011 *
00012 * $RCSfile: OptiXRenderer.h,v $
00013 * $Author: johns $ $Locker: $ $State: Exp $
00014 * $Revision: 1.133 $ $Date: 2021年05月14日 22:35:37 $
00015 *
00016 ***************************************************************************/
00075 #ifndef LIBOPTIXRENDERER
00076 #define LIBOPTIXRENDERER
00077 
00078 #if defined(_WIN32) || defined(_WIN64) || defined(_MSC_VER)
00079 // OptiX headers require NOMINMAX be defined for Windows builds
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 // Compile-time flag for collection and reporting of ray statistics
00095 #if 0
00096 #define ORT_RAYSTATS 1
00097 #endif
00098 
00099 // Compile-time flag to enable the use of RTX hardware ray tracing
00100 // acceleration APIs in OptiX
00101 #if OPTIX_VERSION >= 60000
00102 #define ORT_USERTXAPIS 1
00103 #endif
00104 
00105 
00106 // XXX OptiX 4.0 and later versions have a significant performance impact
00107 // on VMD startup if we use 256-way combinatorial shader specialization.
00108 // Shader template specialization had very little impact on
00109 // OptiX versions 3.[789].x previously. The new LLVM based compiler
00110 // back-end used in recent versions of OptiX has much more overhead
00111 // when processing large numbers of shaders single PTX files.
00112 // If we want to retain the template specialization approach,
00113 // we will have to generate shader code and store it in many separate
00114 // PTX files to mitigate overheads in back-end compiler infrastructure.
00115 #if OPTIX_VERSION < 40000
00116 // this macro enables or disables the use of an array of
00117 // template-specialized shaders for every combination of
00118 // scene-wide and material-specific shader features.
00119 #define ORT_USE_TEMPLATE_SHADERS 1
00120 #endif
00121 
00122 // #define VMDOPTIX_VCA_TABSZHACK 1
00123 #ifdef VMDOPTIX_VCA_TABSZHACK
00124 #define ORTMTABSZ 64
00125 #else
00126 #define ORTMTABSZ 256
00127 #endif
00128 
00129 // When compiling with OptiX 3.8 or greater, we use the new
00130 // progressive rendering APIs rather than our previous hand-coded
00131 // progressive renderer.
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 // Prevent interactive RT window code from being compiled when
00141 // VMD isn't compiled with an interactive GUI
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]; // XXX ignored for now
00169 } ort_directional_light;
00170 
00171 typedef struct {
00172 float pos[3];
00173 float color[3]; // XXX ignored for now
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 // OptiX objects managed by VMD
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 // the ray stats buffers get cleared when clearing the accumulation buffer
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; //< perspective cam (stereo)
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 // cylinder array primitive
00349 RTprogram cylinder_array_isct_pgm; 
00350 RTprogram cylinder_array_bbox_pgm; 
00351 long cylinder_array_cnt; 
00352 
00353 // color-per-cylinder array primitive
00354 RTprogram cylinder_array_color_isct_pgm; 
00355 RTprogram cylinder_array_color_bbox_pgm; 
00356 long cylinder_array_color_cnt; 
00357 
00358 
00359 // color-per-ring array primitive
00360 RTprogram ring_array_color_isct_pgm; 
00361 RTprogram ring_array_color_bbox_pgm; 
00362 long ring_array_color_cnt; 
00363 
00364 
00365 // sphere array primitive
00366 RTprogram sphere_array_isct_pgm; 
00367 RTprogram sphere_array_bbox_pgm; 
00368 long sphere_array_cnt; 
00369 
00370 // color-per-sphere array primitive
00371 RTprogram sphere_array_color_isct_pgm; 
00372 RTprogram sphere_array_color_bbox_pgm; 
00373 long sphere_array_color_cnt; 
00374 
00375 
00376 // triangle mesh primitives of various types
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 // state variables to hold scene geometry
00398 int scene_created;
00399 RTgeometrygroup geometrygroup; 
00400 RTacceleration acceleration; 
00401 #if defined(ORT_USERTXAPIS)
00402 // OptiX RTX hardware-accelerated triangles API
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 // OptiX shader state variables and the like
00414 //
00415 
00416 // progressive rendering mode (vs. batch)
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 // shadow rendering mode 
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 // background color and/or gradient parameters
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 // clipping plane/sphere parameters
00484 int clip_mode; 
00485 float clip_start; 
00486 float clip_end; 
00487 
00488 // fog / depth cueing parameters
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 // keep track of all of the OptiX objects we create on-the-fly...
00504 ResizeArray<RTbuffer> bufferlist; 
00505 ResizeArray<RTgeometry> geomlist; 
00506 ResizeArray<RTgeometryinstance> geominstancelist; 
00507 #if defined(ORT_USERTXAPIS)
00508 // OptiX RTX hardware-accelerated triangles API
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 // OptiX RTX hardware-accelerated triangles API
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 // Triangle mesh geometry
00701 // Beginning with OptiX 5.2 and Turing-class GPUs, VMD uses the new
00702 // NVIDIA RTX hardware-accelerated triangle APIs. In combination with
00703 // general OptiX software improvements, the Turing GPUs implement 
00704 // hardware-accelerated BVH traversal, BVH-embedded storage of
00705 // triangle meshes, and hardware-accelerated triangle intersection.
00706 // In combination, these advances can provide a factor of ~8x
00707 // performance gain compared with the classic OptiX APIs running on 
00708 // Volta-class hardware.
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 

Generated on Mon Nov 17 02:46:49 2025 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002

AltStyle によって変換されたページ (->オリジナル) /