diff --git a/examples/overlaysExample.js b/examples/overlaysExample.js index fef502c761..c7bc28db96 100644 --- a/examples/overlaysExample.js +++ b/examples/overlaysExample.js @@ -68,7 +68,8 @@ var text = Overlays.addOverlay("text", { color: { red: 255, green: 0, blue: 0}, topMargin: 4, leftMargin: 4, - text: "Here is some text.\nAnd a second line." + text: "Here is some text.\nAnd a second line.", + alpha: 0.7 }); // This will create an image overlay, which starts out as invisible diff --git a/interface/src/ui/TextRenderer.cpp b/interface/src/ui/TextRenderer.cpp index fed041d6ea..65725ab4ec 100644 --- a/interface/src/ui/TextRenderer.cpp +++ b/interface/src/ui/TextRenderer.cpp @@ -69,14 +69,16 @@ int TextRenderer::calculateHeight(const char* str) { return maxHeight; } -int TextRenderer::draw(int x, int y, const char* str) { +int TextRenderer::draw(int x, int y, const char* str, float alpha) { // Grab the current color float currentColor[4]; glGetFloatv(GL_CURRENT_COLOR, currentColor); - int compactColor = ((int( currentColor[0] * 255.f) & 0xFF)) | - ((int( currentColor[1] * 255.f) & 0xFF) << 8) | - ((int( currentColor[2] * 255.f) & 0xFF) << 16) | - ((int( currentColor[3] * 255.f) & 0xFF) << 24); + alpha = std::max(0.f, std::min(alpha, 1.f)); + currentColor[3] *= alpha; + int compactColor = ((int(currentColor[0] * 255.f) & 0xFF)) | + ((int(currentColor[1] * 255.f) & 0xFF) << 8) | + ((int(currentColor[2] * 255.f) & 0xFF) << 16) | + ((int(currentColor[3] * 255.f) & 0xFF) << 24); // TODO: Remove that code once we test for performance improvments //glEnable(GL_TEXTURE_2D); diff --git a/interface/src/ui/TextRenderer.h b/interface/src/ui/TextRenderer.h index bcb0ce8890..325420cf2a 100644 --- a/interface/src/ui/TextRenderer.h +++ b/interface/src/ui/TextRenderer.h @@ -63,7 +63,7 @@ public: int calculateHeight(const char* str); // also returns the height of the tallest character - int draw(int x, int y, const char* str); + int draw(int x, int y, const char* str, float alpha = 1.f); int computeWidth(char ch); int computeWidth(const char* str); diff --git a/interface/src/ui/overlays/Text3DOverlay.cpp b/interface/src/ui/overlays/Text3DOverlay.cpp index d8febbf0eb..072b52768a 100644 --- a/interface/src/ui/overlays/Text3DOverlay.cpp +++ b/interface/src/ui/overlays/Text3DOverlay.cpp @@ -112,7 +112,7 @@ void Text3DOverlay::render(RenderArgs* args) { QStringList lines = _text.split("\n"); int lineOffset = maxHeight; foreach(QString thisLine, lines) { - textRenderer->draw(0, lineOffset, qPrintable(thisLine)); + textRenderer->draw(0, lineOffset, qPrintable(thisLine), alpha); lineOffset += maxHeight; } diff --git a/interface/src/ui/overlays/TextOverlay.cpp b/interface/src/ui/overlays/TextOverlay.cpp index 530b30a856..85ecca6d32 100644 --- a/interface/src/ui/overlays/TextOverlay.cpp +++ b/interface/src/ui/overlays/TextOverlay.cpp @@ -82,7 +82,7 @@ void TextOverlay::render(RenderArgs* args) { if (lineOffset == 0) { lineOffset = textRenderer->calculateHeight(qPrintable(thisLine)); } - lineOffset += textRenderer->draw(x, y + lineOffset, qPrintable(thisLine)); + lineOffset += textRenderer->draw(x, y + lineOffset, qPrintable(thisLine), alpha); const int lineGap = 2; lineOffset += lineGap;