From 02d33f6086f98092c5168401597740f2ba549e77 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Tue, 16 Jun 2015 12:14:42 -0700 Subject: [PATCH] Working on overlay rendering --- interface/src/ui/ApplicationOverlay.cpp | 74 +++++++++++---------- interface/src/ui/ApplicationOverlay.h | 1 + libraries/render-utils/src/TextRenderer.cpp | 21 ------ 3 files changed, 39 insertions(+), 57 deletions(-) diff --git a/interface/src/ui/ApplicationOverlay.cpp b/interface/src/ui/ApplicationOverlay.cpp index 989cec4345..6471fcfb16 100644 --- a/interface/src/ui/ApplicationOverlay.cpp +++ b/interface/src/ui/ApplicationOverlay.cpp @@ -85,55 +85,33 @@ ApplicationOverlay::~ApplicationOverlay() { void ApplicationOverlay::renderOverlay(RenderArgs* renderArgs) { PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()"); - Overlays& overlays = qApp->getOverlays(); glm::vec2 size = qApp->getCanvasSize(); // TODO Handle fading and deactivation/activation of UI - // TODO First render the mirror to the mirror FBO - - // Now render the overlay components together into a single texture - gpu::Batch batch; - auto geometryCache = DependencyManager::get(); - geometryCache->useSimpleDrawPipeline(batch); - static const float NEAR_CLIP = -10000; - static const float FAR_CLIP = 10000; - batch._glDisable(GL_DEPTH); - batch._glDisable(GL_LIGHTING); - batch._glEnable(GL_BLEND); - renderAudioMeter(batch); - renderCameraToggle(batch); - renderStatsAndLogs(batch); - renderDomainConnectionStatusBorder(batch); - renderQmlUi(batch); - // Execute the batch into our framebuffer buildFramebufferObject(); _overlayFramebuffer->bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0, 0, size.x, size.y); - mat4 legacyProjection = glm::ortho(0, size.x, size.y, 0, NEAR_CLIP, FAR_CLIP); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadMatrixf(glm::value_ptr(legacyProjection)); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); + // Now render the overlay components together into a single texture + gpu::Batch batch; + auto geometryCache = DependencyManager::get(); + geometryCache->useSimpleDrawPipeline(batch); + batch._glDisable(GL_DEPTH); + batch._glDisable(GL_LIGHTING); + batch._glEnable(GL_BLEND); - // give external parties a change to hook in - //emit qApp->renderingOverlay(); - overlays.renderHUD(renderArgs); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); + renderOverlays(batch, renderArgs); + + renderAudioMeter(batch); + renderCameraToggle(batch); + renderStatsAndLogs(batch); + renderDomainConnectionStatusBorder(batch); + renderQmlUi(batch); renderArgs->_context->syncCache(); renderArgs->_context->render(batch); @@ -150,6 +128,30 @@ void ApplicationOverlay::renderQmlUi(gpu::Batch& batch) { } } +void ApplicationOverlay::renderOverlays(gpu::Batch& batch, RenderArgs* renderArgs) { + static const float NEAR_CLIP = -10000; + static const float FAR_CLIP = 10000; + glm::vec2 size = qApp->getCanvasSize(); + mat4 legacyProjection = glm::ortho(0, size.x, size.y, 0, NEAR_CLIP, FAR_CLIP); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadMatrixf(glm::value_ptr(legacyProjection)); + glMatrixMode(GL_MODELVIEW); + + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // give external parties a change to hook in + emit qApp->renderingOverlay(); + qApp->getOverlays().renderHUD(renderArgs); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); +} + void ApplicationOverlay::renderCameraToggle(gpu::Batch& batch) { /* if (Menu::getInstance()->isOptionChecked(MenuOption::NoFaceTracking)) { diff --git a/interface/src/ui/ApplicationOverlay.h b/interface/src/ui/ApplicationOverlay.h index 9dd846d9bf..9076d61b18 100644 --- a/interface/src/ui/ApplicationOverlay.h +++ b/interface/src/ui/ApplicationOverlay.h @@ -35,6 +35,7 @@ private: void renderDomainConnectionStatusBorder(gpu::Batch& batch); void renderRearView(gpu::Batch& batch); void renderQmlUi(gpu::Batch& batch); + void renderOverlays(gpu::Batch& batch, RenderArgs* renderArgs); void buildFramebufferObject(); float _alpha{ 1.0f }; diff --git a/libraries/render-utils/src/TextRenderer.cpp b/libraries/render-utils/src/TextRenderer.cpp index c815c5f179..87cf9b2728 100644 --- a/libraries/render-utils/src/TextRenderer.cpp +++ b/libraries/render-utils/src/TextRenderer.cpp @@ -434,8 +434,6 @@ glm::vec2 Font::drawString(float x, float y, const QString & str, fromGlm(MatrixStack::projection().top())); if (effectType == TextRenderer::OUTLINE_EFFECT) { _program->setUniformValue("Outline", true); - } else { - _program->setUniformValue("Outline", false); } // Needed? glEnable(GL_TEXTURE_2D); @@ -541,25 +539,6 @@ glm::vec2 TextRenderer::computeExtent(const QString & str) const { return glm::vec2(0.1f,0.1f); } -static gpu::PipelinePointer _textDrawPipeline; - -void TextRenderer::useTextPipeline(gpu::Batch& batch) { - if (!_textDrawPipeline) { - auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(sdf_text_vert))); - auto fs = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(sdf_text_frag))); - auto program = gpu::ShaderPointer(gpu::Shader::createProgram(vs, fs)); - gpu::Shader::makeProgram((*program)); - - auto state = gpu::StatePointer(new gpu::State()); - // enable decal blend - state->setBlendFunction(true, gpu::State::SRC_ALPHA, gpu::State::BLEND_OP_ADD, gpu::State::INV_SRC_ALPHA); - _textDrawPipeline.reset(gpu::Pipeline::create(program, state)); - } - batch.setPipeline(_textDrawPipeline); - batch._glBindTexture(GL_TEXTURE_2D, this->_font->_texture->textureId()); -} - - float TextRenderer::draw(float x, float y, const QString & str, const glm::vec4& color, const glm::vec2 & bounds) { glm::vec4 actualColor(color);