mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 18:44:00 +02:00
Working on overlay rendering
This commit is contained in:
parent
ba13b7820c
commit
02d33f6086
3 changed files with 39 additions and 57 deletions
|
@ -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>();
|
||||
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<float>(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>();
|
||||
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<float>(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)) {
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue