summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/OpenCSGRenderer.cc2
-rw-r--r--src/renderer.cc21
-rw-r--r--src/renderer.h1
3 files changed, 23 insertions, 1 deletions
diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc
index eb66687..add90d3 100644
--- a/src/OpenCSGRenderer.cc
+++ b/src/OpenCSGRenderer.cc
@@ -95,7 +95,7 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo,
csgmode = PolySet::csgmode_e(csgmode + 20);
}
else if (background) {
- setColor(COLORMODE_BACKGROUND, shaderinfo);
+ setColor(COLORMODE_BACKGROUND, c.data(), shaderinfo);
csgmode = PolySet::csgmode_e(csgmode + 10);
} else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) {
// User-defined color or alpha from source
diff --git a/src/renderer.cc b/src/renderer.cc
index 985b460..77dcde9 100644
--- a/src/renderer.cc
+++ b/src/renderer.cc
@@ -17,6 +17,27 @@ void Renderer::setColor(const float color[4], GLint *shaderinfo) const
}
}
+void Renderer::setColor(ColorMode colormode, const float color[4], GLint *shaderinfo) const
+{
+ if (colormode == COLORMODE_BACKGROUND &&
+ color[0] >= 0 || color[1] >= 0 || color[2] >= 0 || color[3] >= 0) {
+
+ Color4f col;
+ col.setRgb(180, 180, 180, 255);
+ float c[4] = {color[0], color[1], color[2], color[3]};
+ if (c[0] < 0) c[0] = col[0];
+ if (c[1] < 0) c[1] = col[1];
+ if (c[2] < 0) c[2] = col[2];
+ if (c[3] < 0) c[3] = col[3];
+
+ c[3] /= 2; // Background objects are half-transparent
+ setColor(c, shaderinfo);
+ }
+ else {
+ setColor(colormode, shaderinfo);
+ }
+}
+
void Renderer::setColor(ColorMode colormode, GLint *shaderinfo) const
{
Color4f col;
diff --git a/src/renderer.h b/src/renderer.h
index 2bc482d..24c1d94 100644
--- a/src/renderer.h
+++ b/src/renderer.h
@@ -27,6 +27,7 @@ public:
virtual void setColor(const float color[4], GLint *shaderinfo = NULL) const;
virtual void setColor(ColorMode colormode, GLint *shaderinfo = NULL) const;
+ virtual void setColor(ColorMode colormode, const float color[4], GLint *shaderinfo = NULL) const;
};
#endif // RENDERER_H
contact: Jan Huwald // Impressum