diff options
author | Marius Kintel <marius@kintel.net> | 2011-12-11 22:45:14 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-12-11 22:45:14 (GMT) |
commit | 9ed8d9a6732e1eea0265ff84917278a82d81e2dd (patch) | |
tree | 6322830c95d70b2310b45c7008cfd4dac6d4bf31 /src/ThrownTogetherRenderer.cc | |
parent | 647fdf5f98f6337955972375a17837aede922988 (diff) |
Some small refactoring of color handling to support using the color() module to change only alpha
Diffstat (limited to 'src/ThrownTogetherRenderer.cc')
-rw-r--r-- | src/ThrownTogetherRenderer.cc | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/src/ThrownTogetherRenderer.cc b/src/ThrownTogetherRenderer.cc index 3ab13ea..36f7b95 100644 --- a/src/ThrownTogetherRenderer.cc +++ b/src/ThrownTogetherRenderer.cc @@ -70,51 +70,48 @@ void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight, double *c = chain->colors[i]; glPushMatrix(); glMultMatrixd(m.data()); - int csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; + PolySet::csgmode_e csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) { - chain->polysets[i]->render_surface(PolySet::COLORMODE_HIGHLIGHT, PolySet::csgmode_e(csgmode + 20), m); + csgmode = PolySet::csgmode_e(csgmode + 20); + setColor(COLORMODE_HIGHLIGHT); + chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glDisable(GL_LIGHTING); - chain->polysets[i]->render_edges(PolySet::COLORMODE_HIGHLIGHT, PolySet::csgmode_e(csgmode + 20)); - glEnable(GL_LIGHTING); + setColor(COLORMODE_HIGHLIGHT_EDGES); + chain->polysets[i]->render_edges(csgmode); } } else if (background) { - chain->polysets[i]->render_surface(PolySet::COLORMODE_BACKGROUND, PolySet::csgmode_e(csgmode + 10), m); + csgmode = PolySet::csgmode_e(csgmode + 10); + setColor(COLORMODE_BACKGROUND); + chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glDisable(GL_LIGHTING); - chain->polysets[i]->render_edges(PolySet::COLORMODE_BACKGROUND, PolySet::csgmode_e(csgmode + 10)); - glEnable(GL_LIGHTING); + setColor(COLORMODE_BACKGROUND_EDGES); + chain->polysets[i]->render_edges(csgmode); } } else if (fberror) { - if (highlight) { - chain->polysets[i]->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode + 20), m); - } else if (background) { - chain->polysets[i]->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode + 10), m); - } else { - chain->polysets[i]->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode), m); - } - } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0) { - glColor4dv(c); - chain->polysets[i]->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode), m); + if (highlight) csgmode = PolySet::csgmode_e(csgmode + 20); + else if (background) csgmode = PolySet::csgmode_e(csgmode + 10); + else csgmode = PolySet::csgmode_e(csgmode); + chain->polysets[i]->render_surface(csgmode, m); + } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) { + setColor(c); + chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glDisable(GL_LIGHTING); glColor4d((c[0]+1)/2, (c[1]+1)/2, (c[2]+1)/2, 1.0); - chain->polysets[i]->render_edges(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode)); - glEnable(GL_LIGHTING); + chain->polysets[i]->render_edges(csgmode); } } else if (chain->types[i] == CSGTerm::TYPE_DIFFERENCE) { - chain->polysets[i]->render_surface(PolySet::COLORMODE_CUTOUT, PolySet::csgmode_e(csgmode), m); + setColor(COLORMODE_CUTOUT); + chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glDisable(GL_LIGHTING); - chain->polysets[i]->render_edges(PolySet::COLORMODE_CUTOUT, PolySet::csgmode_e(csgmode)); - glEnable(GL_LIGHTING); + setColor(COLORMODE_CUTOUT_EDGES); + chain->polysets[i]->render_edges(csgmode); } } else { - chain->polysets[i]->render_surface(PolySet::COLORMODE_MATERIAL, PolySet::csgmode_e(csgmode), m); + setColor(COLORMODE_MATERIAL); + chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glDisable(GL_LIGHTING); - chain->polysets[i]->render_edges(PolySet::COLORMODE_MATERIAL, PolySet::csgmode_e(csgmode)); - glEnable(GL_LIGHTING); + setColor(COLORMODE_MATERIAL_EDGES); + chain->polysets[i]->render_edges(csgmode); } } glPopMatrix(); |