diff options
-rw-r--r-- | src/OpenCSGRenderer.cc | 2 | ||||
-rw-r--r-- | src/renderer.cc | 21 | ||||
-rw-r--r-- | src/renderer.h | 1 |
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 |