# 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