mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 10:07:58 +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) {
|
void ApplicationOverlay::renderOverlay(RenderArgs* renderArgs) {
|
||||||
PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()");
|
PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "ApplicationOverlay::displayOverlay()");
|
||||||
|
|
||||||
Overlays& overlays = qApp->getOverlays();
|
|
||||||
glm::vec2 size = qApp->getCanvasSize();
|
glm::vec2 size = qApp->getCanvasSize();
|
||||||
// TODO Handle fading and deactivation/activation of UI
|
// TODO Handle fading and deactivation/activation of UI
|
||||||
|
|
||||||
|
|
||||||
// TODO First render the mirror to the mirror FBO
|
// 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
|
// Execute the batch into our framebuffer
|
||||||
buildFramebufferObject();
|
buildFramebufferObject();
|
||||||
_overlayFramebuffer->bind();
|
_overlayFramebuffer->bind();
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glViewport(0, 0, size.x, size.y);
|
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);
|
// Now render the overlay components together into a single texture
|
||||||
glPushMatrix();
|
gpu::Batch batch;
|
||||||
glLoadMatrixf(glm::value_ptr(legacyProjection));
|
auto geometryCache = DependencyManager::get<GeometryCache>();
|
||||||
glDisable(GL_DEPTH_TEST);
|
geometryCache->useSimpleDrawPipeline(batch);
|
||||||
glDisable(GL_LIGHTING);
|
batch._glDisable(GL_DEPTH);
|
||||||
glEnable(GL_BLEND);
|
batch._glDisable(GL_LIGHTING);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
batch._glEnable(GL_BLEND);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
// give external parties a change to hook in
|
renderOverlays(batch, renderArgs);
|
||||||
//emit qApp->renderingOverlay();
|
|
||||||
overlays.renderHUD(renderArgs);
|
renderAudioMeter(batch);
|
||||||
glMatrixMode(GL_PROJECTION);
|
renderCameraToggle(batch);
|
||||||
glPopMatrix();
|
renderStatsAndLogs(batch);
|
||||||
glMatrixMode(GL_MODELVIEW);
|
renderDomainConnectionStatusBorder(batch);
|
||||||
glPopMatrix();
|
renderQmlUi(batch);
|
||||||
|
|
||||||
renderArgs->_context->syncCache();
|
renderArgs->_context->syncCache();
|
||||||
renderArgs->_context->render(batch);
|
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) {
|
void ApplicationOverlay::renderCameraToggle(gpu::Batch& batch) {
|
||||||
/*
|
/*
|
||||||
if (Menu::getInstance()->isOptionChecked(MenuOption::NoFaceTracking)) {
|
if (Menu::getInstance()->isOptionChecked(MenuOption::NoFaceTracking)) {
|
||||||
|
|
|
@ -35,6 +35,7 @@ private:
|
||||||
void renderDomainConnectionStatusBorder(gpu::Batch& batch);
|
void renderDomainConnectionStatusBorder(gpu::Batch& batch);
|
||||||
void renderRearView(gpu::Batch& batch);
|
void renderRearView(gpu::Batch& batch);
|
||||||
void renderQmlUi(gpu::Batch& batch);
|
void renderQmlUi(gpu::Batch& batch);
|
||||||
|
void renderOverlays(gpu::Batch& batch, RenderArgs* renderArgs);
|
||||||
void buildFramebufferObject();
|
void buildFramebufferObject();
|
||||||
|
|
||||||
float _alpha{ 1.0f };
|
float _alpha{ 1.0f };
|
||||||
|
|
|
@ -434,8 +434,6 @@ glm::vec2 Font::drawString(float x, float y, const QString & str,
|
||||||
fromGlm(MatrixStack::projection().top()));
|
fromGlm(MatrixStack::projection().top()));
|
||||||
if (effectType == TextRenderer::OUTLINE_EFFECT) {
|
if (effectType == TextRenderer::OUTLINE_EFFECT) {
|
||||||
_program->setUniformValue("Outline", true);
|
_program->setUniformValue("Outline", true);
|
||||||
} else {
|
|
||||||
_program->setUniformValue("Outline", false);
|
|
||||||
}
|
}
|
||||||
// Needed?
|
// Needed?
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
@ -541,25 +539,6 @@ glm::vec2 TextRenderer::computeExtent(const QString & str) const {
|
||||||
return glm::vec2(0.1f,0.1f);
|
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,
|
float TextRenderer::draw(float x, float y, const QString & str,
|
||||||
const glm::vec4& color, const glm::vec2 & bounds) {
|
const glm::vec4& color, const glm::vec2 & bounds) {
|
||||||
glm::vec4 actualColor(color);
|
glm::vec4 actualColor(color);
|
||||||
|
|
Loading…
Reference in a new issue