What Color should that Polygon be? There are four variables which determine how a polygon will be colored: Color Selector, Illumination, Vertex type, and Facet Type. The first two are context attributes and the second two are per-primitive. The Leo pipeline analyzes the values of these attributes and sets up two variables called sp->surf.rend_color_src and sp->surf.rend_norm_src. sp->surf.rend_color_src can have four values: CTX_COLOR: Use the context color VERTEX_COLOR: Use the color supplied with each vertex FACET_COLOR: Use the color from the facet list FIRST_VERTEX_COLOR: Use the color of the oldest vertex for each facet sp->surf.rend_norm_src can have five values: NO_NORMAL: No lighting, so we don't need a normal VERTEX_NORMAL: Use vertex normals CALC_NORMAL: calculate facet normals and use them FIRST_VERTEX_NORMAL: Use oldest vertex's normal as facet normal FACET_NORMAL: Use supplied facet normal These values are assigned in LeoDataSelectors.cc. A switch on color selector and illumination in calcSurfCtxRenderOption determines which function gets called (calcSurfRendCtxVertex means color_source = context and ilum = per vertex, for example). Within those functions there are switches on facet type and point type, if necessary. The following table summarizes how the values are determined: -----------+-----------------------+-----------+-------+------ COLOR |ILLUMINATION |COLOR|NORM.|Color |Normal SELECTOR | |V |F |V |F |Used |Used -----------+-----------------------+--+--+--+--+-------+------ CONTEXT |NONE |* |* |* |* |CONTEXT| - |ILLUM_NONE_INTERP_COLOR|* |* |* |* |CONTEXT| - |ILLUM_PER_FACET |* |* |* |* |CONTEXT|FACET |ILLUM_PER_VERTEX |* |* |N |* |CONTEXT|FACET |ILLUM_PER_VERTEX |* |* |Y |* |CONTEXT|VERTEX -----------+-----------------------+--+--+--+--+-------+------ FACET |NONE |* |N |* |* |CONTEXT| - |NONE |* |Y |* |* |FACET | - |ILLUM_NONE_INTERP_COLOR|* |N |* |* |CONTEXT| - |ILLUM_NONE_INTERP_COLOR|* |Y |* |* |FACET | - |ILLUM_PER_FACET |* |N |* |* |CONTEXT|FACET |ILLUM_PER_FACET |* |Y |* |* |FACET |FACET |ILLUM_PER_VERTEX |* |N |N |* |CONTEXT|FACET |ILLUM_PER_VERTEX |* |N |Y |* |CONTEXT|VERTEX |ILLUM_PER_VERTEX |* |Y |N |* |FACET |FACET |ILLUM_PER_VERTEX |* |Y |Y |* |FACET |VERTEX -----------+-----------------------+--+--+--+--+-------+------ ILLUM_DEP |NONE |N |N |* |* |CONTEXT| - |NONE |N |Y |* |* |FACET | - |NONE |Y |N |* |* |CONTEXT| - |NONE |Y |Y |* |* |FACET | - |ILLUM_NONE_INTERP_COLOR|N |N |* |* |CONTEXT| - |ILLUM_NONE_INTERP_COLOR|N |Y |* |* |FACET | - |ILLUM_NONE_INTERP_COLOR|Y |N |* |* |VERTEX | - |ILLUM_NONE_INTERP_COLOR|Y |Y |* |* |VERTEX | - |ILLUM_PER_FACET |N |N |N |* |CONTEXT|FACET |ILLUM_PER_FACET |N |N |Y |* |CONTEXT|FACET |ILLUM_PER_FACET |N |Y |N |* |FACET |FACET |ILLUM_PER_FACET |N |Y |Y |* |FACET |FACET |ILLUM_PER_FACET |Y |N |N |* |CONTEXT|FACET # |ILLUM_PER_FACET |Y |N |Y |* |CONTEXT|FACET # |ILLUM_PER_FACET |Y |Y |N |* |FACET |FACET # |ILLUM_PER_FACET |Y |Y |Y |* |FACET |FACET # |ILLUM_PER_VERTEX |N |N |N |* |CONTEXT|FACET |ILLUM_PER_VERTEX |N |N |Y |* |CONTEXT|VERTEX # |ILLUM_PER_VERTEX |N |Y |N |* |FACET |FACET |ILLUM_PER_VERTEX |N |Y |Y |* |FACET |VERTEX # |ILLUM_PER_VERTEX |Y |N |N |* |VERTEX |FACET |ILLUM_PER_VERTEX |Y |N |Y |* |VERTEX |VERTEX # |ILLUM_PER_VERTEX |Y |Y |N |* |VERTEX |FACET |ILLUM_PER_VERTEX |Y |Y |Y |* |VERTEX |VERTEX # -----------+-----------------------+--+--+--+--+-------+------ ILLUM_INDEP|NONE |N |N |* |* |CONTEXT| - |NONE |N |Y |* |* |FACET | - |NONE |Y |N |* |* |VERTEX | - |NONE |Y |Y |* |* |VERTEX | - |ILLUM_NONE_INTERP_COLOR|N |N |* |* |CONTEXT| - |ILLUM_NONE_INTERP_COLOR|N |Y |* |* |FACET | - |ILLUM_NONE_INTERP_COLOR|Y |N |* |* |VERTEX | - |ILLUM_NONE_INTERP_COLOR|Y |Y |* |* |VERTEX | - |ILLUM_PER_FACET |N |N |N |* |CONTEXT|FACET |ILLUM_PER_FACET |N |N |Y |* |CONTEXT|VERTEX |ILLUM_PER_FACET |N |Y |N |* |FACET |FACET |ILLUM_PER_FACET |N |Y |Y |* |FACET |VERTEX |ILLUM_PER_FACET |Y |N |N |* |VERTEX |FACET |ILLUM_PER_FACET |Y |N |Y |* |VERTEX |VERTEX |ILLUM_PER_FACET |Y |Y |N |* |VERTEX |FACET |ILLUM_PER_FACET |Y |Y |Y |* |VERTEX |VERTEX |ILLUM_PER_VERTEX |N |N |N |* |CONTEXT|FACET |ILLUM_PER_VERTEX |N |N |Y |* |CONTEXT|VERTEX |ILLUM_PER_VERTEX |N |Y |N |* |FACET |FACET |ILLUM_PER_VERTEX |N |Y |Y |* |FACET |VERTEX |ILLUM_PER_VERTEX |Y |N |N |* |VERTEX |FACET |ILLUM_PER_VERTEX |Y |N |Y |* |VERTEX |VERTEX |ILLUM_PER_VERTEX |Y |Y |N |* |VERTEX |FACET |ILLUM_PER_VERTEX |Y |Y |Y |* |VERTEX |VERTEX -----------+-----------------------+--+--+--+--+-------+------ Y :There is VERTEX COLOR, VERTEX NORMAL, or FACET COLOR N :There isn't VERTEX COLOR, VERTEX NORMAL, or FACET COLOR * :Don't Care