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 Wed Apr 24 02:43:01 2024 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002