Merge remote-tracking branch 'origin/master' into feature/openglstatecache

# Conflicts:
#	ext/ghoul
#	modules/digitaluniverse/rendering/renderablebillboardscloud.cpp
#	modules/digitaluniverse/rendering/renderableplanescloud.cpp
#	src/util/screenlog.cpp
This commit is contained in:
Alexander Bock
2020-09-04 14:02:17 +02:00
199 changed files with 2985 additions and 1664 deletions

View File

@@ -138,6 +138,9 @@ namespace {
namespace openspace {
void FramebufferRenderer::initialize() {
ZoneScoped
TracyGpuZone("Rendering initialize");
LDEBUG("Initializing FramebufferRenderer");
HasGLDebugInfo = glbinding::Binding::ObjectLabel.isResolved() &&
@@ -467,6 +470,9 @@ void FramebufferRenderer::initialize() {
}
void FramebufferRenderer::deinitialize() {
ZoneScoped
TracyGpuZone("Renderer deinitialize")
LINFO("Deinitializing FramebufferRenderer");
glDeleteFramebuffers(1, &_gBuffers.framebuffer);
@@ -511,6 +517,9 @@ void FramebufferRenderer::deferredcastersChanged(Deferredcaster&,
}
void FramebufferRenderer::applyTMO(float blackoutFactor) {
ZoneScoped
TracyGpuZone("applyTMO")
_hdrFilteringProgram->activate();
ghoul::opengl::TextureUnit hdrFeedingTextureUnit;
@@ -785,6 +794,9 @@ void FramebufferRenderer::update() {
}
void FramebufferRenderer::updateResolution() {
ZoneScoped
TracyGpuZone("Renderer updateResolution")
glBindTexture(GL_TEXTURE_2D, _gBuffers.colorTexture);
glTexImage2D(
GL_TEXTURE_2D,
@@ -971,6 +983,8 @@ void FramebufferRenderer::updateResolution() {
}
void FramebufferRenderer::updateRaycastData() {
ZoneScoped
_raycastData.clear();
_exitPrograms.clear();
_raycastPrograms.clear();
@@ -981,6 +995,8 @@ void FramebufferRenderer::updateRaycastData() {
int nextId = 0;
for (VolumeRaycaster* raycaster : raycasters) {
ZoneScopedN("raycaster")
RaycastData data = { nextId++, "Helper" };
const std::string& vsPath = raycaster->boundsVertexShaderPath();
@@ -1095,6 +1111,8 @@ void FramebufferRenderer::updateDeferredcastData() {
void FramebufferRenderer::updateHDRAndFiltering() {
ZoneScoped
_hdrFilteringProgram = ghoul::opengl::ProgramObject::Build(
"HDR and Filtering Program",
absPath("${SHADERS}/framebuffer/hdrAndFiltering.vert"),
@@ -1103,6 +1121,8 @@ void FramebufferRenderer::updateHDRAndFiltering() {
}
void FramebufferRenderer::updateFXAA() {
ZoneScoped
_fxaaProgram = ghoul::opengl::ProgramObject::Build(
"FXAA Program",
absPath("${SHADERS}/framebuffer/fxaa.vert"),
@@ -1111,7 +1131,9 @@ void FramebufferRenderer::updateFXAA() {
}
void FramebufferRenderer::updateDownscaledVolume() {
_downscaledVolumeProgram = ghoul::opengl::ProgramObject::Build(
ZoneScoped
_downscaledVolumeProgram = ghoul::opengl::ProgramObject::Build(
"Write Downscaled Volume Program",
absPath("${SHADERS}/framebuffer/mergeDownscaledVolume.vert"),
absPath("${SHADERS}/framebuffer/mergeDownscaledVolume.frag")
@@ -1120,6 +1142,7 @@ void FramebufferRenderer::updateDownscaledVolume() {
void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFactor) {
ZoneScoped
TracyGpuZone("FramebufferRenderer")
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_defaultFBO);
@@ -1158,25 +1181,31 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
RendererTasks tasks;
{
TracyGpuZone("Background")
GLDebugGroup group("Background");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Background);
scene->render(data, tasks);
}
{
TracyGpuZone("Opaque")
GLDebugGroup group("Opaque");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Opaque);
scene->render(data, tasks);
}
{
TracyGpuZone("PreDeferredTransparent")
GLDebugGroup group("PreDeferredTransparent");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::PreDeferredTransparent);
data.renderBinMask = static_cast<int>(
Renderable::RenderBin::PreDeferredTransparent
);
scene->render(data, tasks);
}
// Run Volume Tasks
{
TracyGpuZone("Raycaster Tasks")
GLDebugGroup group("Raycaster Tasks");
performRaycasterTasks(tasks.raycasterTasks);
@@ -1186,6 +1215,7 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
}
if (!tasks.deferredcasterTasks.empty()) {
TracyGpuZone("Deferred Caster Tasks")
GLDebugGroup group("Deferred Caster Tasks");
// We use ping pong rendering in order to be able to
@@ -1201,12 +1231,16 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
glEnablei(GL_BLEND, 0);
{
TracyGpuZone("PostDeferredTransparent")
GLDebugGroup group("PostDeferredTransparent");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::PostDeferredTransparent);
data.renderBinMask = static_cast<int>(
Renderable::RenderBin::PostDeferredTransparent
);
scene->render(data, tasks);
}
{
TracyGpuZone("Overlay")
GLDebugGroup group("Overlay");
data.renderBinMask = static_cast<int>(Renderable::RenderBin::Overlay);
scene->render(data, tasks);
@@ -1231,12 +1265,14 @@ void FramebufferRenderer::render(Scene* scene, Camera* camera, float blackoutFac
{
// Apply the selected TMO on the results and resolve the result to the default FBO
TracyGpuZone("Apply TMO")
GLDebugGroup group("Apply TMO");
applyTMO(blackoutFactor);
}
if (_enableFXAA) {
TracyGpuZone("Apply FXAA")
GLDebugGroup group("Apply FXAA");
glBindFramebuffer(GL_FRAMEBUFFER, _defaultFBO);
applyFXAA();
@@ -1247,6 +1283,8 @@ void FramebufferRenderer::performRaycasterTasks(const std::vector<RaycasterTask>
ZoneScoped
for (const RaycasterTask& raycasterTask : tasks) {
TracyGpuZone("Raycaster")
VolumeRaycaster* raycaster = raycasterTask.raycaster;
glBindFramebuffer(GL_FRAMEBUFFER, _exitFramebuffer);
@@ -1380,6 +1418,8 @@ void FramebufferRenderer::performDeferredTasks(
ZoneScoped
for (const DeferredcasterTask& deferredcasterTask : tasks) {
TracyGpuZone("Deferredcaster")
Deferredcaster* deferredcaster = deferredcasterTask.deferredcaster;
ghoul::opengl::ProgramObject* deferredcastProgram = nullptr;
@@ -1496,6 +1536,8 @@ void FramebufferRenderer::enableFXAA(bool enable) {
}
void FramebufferRenderer::updateRendererData() {
ZoneScoped
ghoul::Dictionary dict;
dict.setValue("fragmentRendererPath", std::string(RenderFragmentShaderPath));
dict.setValue("hdrExposure", std::to_string(_hdrExposure));