============================
Streamlining HOOPS Visualize
============================

Developers who have access to HOOPS Visualize readable source can build a scaled-down version of HOOPS Visualize. Using compiler flags to stub out pieces of functionality that are not needed (for example, ``-DDISABLE_SHOW`` in the ``CFLAGS`` line), a streamlined version of Visualize can be compiled.


Functionality Breakout Options
==============================

This section will provide details on the areas of core functionality that can be individually stubbed out, along with the estimated corresponding HOOPS Visualize library size reduction.

The core functionality breakout list covers items that can be broken outas separate components. If all the items are broken out, the size of the HOOPS Visualize library reduces to ~1MB. This size is largely a function of the core architecture of HOOPS Visualize which utilizes sophisticated data structures and scaffold database/rendering/attribute logic to enable support of all these powerful components. Further reduction of the library size causes a run-in with the 80/20 rule (except in this case it is more like the 95/5 rule). That is, significant additional effort in stripping out functionality would result in minimal incremental size reduction. 


**1. DISABLE_RASTERIZER - Software Z-Buffer/Frame-Buffer Pipeline/Image Driver - 130k**

This involves removal of all logic to perform software rasterization of the scene, with or without a z-buffering stage, including lookup tables, dc_z functions, etc... The Visualize software z-buffer and software-frame buffer logic is no longer available to produce non-OpenGL based interactive rendering of complex 3d, shaded scenes. 

**2. DISABLE_SORTING_HSR - Sorting-Based HSR Algorithms - 25k**

These include algorithms such as hidden-line-removal and painter's. This prevents HLR renderings, or mixed-mode (vector and raster) rendering of scenes to hardcopy devices such as a native GDI Printer or Clipboard DC, Postscript file/device, etc. If you wanted to ensure transparent objects were rendered correctly you would need to include at least one sorting algorithm (probably z-sort at a cost of ~ 8K). 

If Item 1 is also stubbed out, then HOOPS Visualize would not be able to rendering a complex scene to a hardcopy device. (Either it needs to be sorted and drawn back-to-front, or it needs to be rendered to an offscreen buffer using a szb/sfb. A remaining option would be for the developer to manually grab the screen image (or have OpenGL render to an offscreen image) and the blit that image to the hardcopy device. 

**3. DISABLE_METAFILE - 40k**

Reading/writing HMF files would be unsupported.

**4. DISABLE_BITSTREAM - Font Engine - 150k**

TrueType, Double Byte, and Unicode fonts would no longer be supported.

**5. DISABLE_TEXTURING - 30k**

This is the texturing software implementation and support code. If disabled, then objects could not be textured. 

**6. DISABLE_BIT_RASTERS, DISABLE_GRAY8_RASTERS, DISABLE_MAPPED16_RASTERS, DISABLE_MAPPED8_RASTERS - 20K**

Certain display modes (8-bit, 16-bit; mapped and grayscale)

**7. DISABLE_DRAW_3D - Non-Essential Code in Standard_3D-Functions - 50k**

Any higher-level HOOPS Visualize attributes that apply to the visual appearance of entities (specific line-patterns, face patterns, marker symbols, etc.) that are not supported by OpenGL would no longer be supported. 

**8. DISABLE_SHOW - Show Routines - 270k**

The developer would not be able to query attributes in the HOOPS Visualize scene-graph. (Typically this would be done within an application that provides editing capabilities.) 

**9. DISABLE_UNSET - UnSet and UnSet_One Routines - 35k**

The developer would not be able to UnSet attributes in the HOOPS Visualize scene-graph.

**10. DISABLE_GEOMETRY_EDIT / DISABLE_GEOMETRY_SHOW - 40k**

The developer would not be able to query/edit geometry primitives stored in the HOOPS Visualize scene-graph. (Typically this would be done within an application that provides editing capabilities.) 

**11. DISABLE_DEFINED_FONTS - 10k**

The developer could not define custom fonts or use HOOPS Visualize internal stroked fonts.

**12. DISABLE_STYLE_SEGMENT - 30k**

Visualize-style input handling would not be available. Typically this is only used in standalone demos.

**13. DISABLE_LOD_GENERATION - 25k**

Levels-of-detail for HOOPS Visualize shell primitives could no longer be generated.

**14. DISABLE_SEARCH - Scene-Graph Searching Support - 30k**

Developer could not search for open segments, color names, contents, aliases, textures, etc.

**15. DISABLE_COLOR_NAMES - Named Color Handling - 20k**

Developer could not set/show colors using HOOPS Visualize's built in color names, or create their own color names.

**16. DISABLE_DATABASE_EDIT - Basic Database Routines - 25k**

Developer could not manipulate the HOOPS Visualize scene-graph nodes (segments), such as copy, style, move, rename, flush, etc.

**17. DISABLE_COMPUTE - 25k**

Developer would not have access to vector and matrix math utility routines, shell optimization routines, etc

**18. DISABLE_SELECTION/DISABLE_POLY_SELECTION - 40k**

Developer could not perform selection using aperture, window, or volume selection methods / polygon or polyline selection. 

**10. DISABLE_CALLBACKS - 20k**

The HOOPS Visualize I.M. API is no longer available. Developer can no longer make traversal time draw decisions, or utilize the immediate-mode type HIC routines to directly draw to the screen. 

**20. DISABLE_CODE_GENERATION - 15k**

Developer could not use Code Generation system option.

**21. DISABLE_GEOMETRY_ATTRIBUTES**

Developers could not manipulate local face, vertex, and edge attributes from open shells and meshes. 

**22. DISABLE_EVENTS**

HOOPS Visualize event handling routines. Developer could not use routines such as ``HC_Await_Event``.

**23. DISABLE_TABLE_LOOKUPS**

Developer would forfeit certain performance optimizations during operations such as normal vector calculations.

**24. DISABLE_SPECIAL_OPTIMIZATIONS**

Developer would forfeit certain performance optimizations during some procedures, such as the use of ``Show_Existence``. 

**25. DISABLE_PHONG**

Developer would forfeit the use of Phong shading and software texturing.

**26. DISABLE_COLOR_MAPS - Color Index Interpolation, Mapped Images**

Developer would forfeit the use of color index interpolation or color maps.

**27. DISABLE_PARTIAL_ERASE**

Developer would forfeit the use of partial erase.

**28. DISABLE_INSTANCING**

Developer would forfeit the use of partial erase or sub-windows within included segments.

**29. DISABLE_CUT_GEOMETRY**

Disables only HOOPS Visualize's internal implementation of capping polygon generation, leaving "cut edges" callbacks intact.

**30. DISABLE_SIMPLE_SHADOW**

Disables HOOPS Visualize's internal implementation of fake shadows
