mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:58:51 +02:00
Merge pull request #13468 from SamGondelman/secondaryShadows
Disable shadows in secondary camera
This commit is contained in:
commit
7fb2e535ff
8 changed files with 25 additions and 46 deletions
|
@ -11,25 +11,16 @@
|
||||||
|
|
||||||
#include "SecondaryCamera.h"
|
#include "SecondaryCamera.h"
|
||||||
|
|
||||||
|
#include <RenderDeferredTask.h>
|
||||||
|
#include <RenderForwardTask.h>
|
||||||
|
|
||||||
#include <glm/gtx/transform.hpp>
|
#include <glm/gtx/transform.hpp>
|
||||||
#include <gpu/Context.h>
|
#include <gpu/Context.h>
|
||||||
#include <TextureCache.h>
|
|
||||||
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
using RenderArgsPointer = std::shared_ptr<RenderArgs>;
|
using RenderArgsPointer = std::shared_ptr<RenderArgs>;
|
||||||
|
|
||||||
void MainRenderTask::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor, bool isDeferred) {
|
|
||||||
task.addJob<RenderShadowTask>("RenderShadowTask", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1);
|
|
||||||
const auto items = task.addJob<RenderFetchCullSortTask>("FetchCullSort", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1);
|
|
||||||
assert(items.canCast<RenderFetchCullSortTask::Output>());
|
|
||||||
if (!isDeferred) {
|
|
||||||
task.addJob<RenderForwardTask>("Forward", items);
|
|
||||||
} else {
|
|
||||||
task.addJob<RenderDeferredTask>("RenderDeferredTask", items);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class SecondaryCameraJob { // Changes renderContext for our framebuffer and view.
|
class SecondaryCameraJob { // Changes renderContext for our framebuffer and view.
|
||||||
public:
|
public:
|
||||||
using Config = SecondaryCameraJobConfig;
|
using Config = SecondaryCameraJobConfig;
|
||||||
|
@ -213,10 +204,10 @@ void SecondaryCameraRenderTask::build(JobModel& task, const render::Varying& inp
|
||||||
const auto cachedArg = task.addJob<SecondaryCameraJob>("SecondaryCamera");
|
const auto cachedArg = task.addJob<SecondaryCameraJob>("SecondaryCamera");
|
||||||
const auto items = task.addJob<RenderFetchCullSortTask>("FetchCullSort", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1);
|
const auto items = task.addJob<RenderFetchCullSortTask>("FetchCullSort", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1);
|
||||||
assert(items.canCast<RenderFetchCullSortTask::Output>());
|
assert(items.canCast<RenderFetchCullSortTask::Output>());
|
||||||
if (!isDeferred) {
|
if (isDeferred) {
|
||||||
task.addJob<RenderForwardTask>("Forward", items);
|
task.addJob<RenderDeferredTask>("RenderDeferredTask", items, false);
|
||||||
} else {
|
} else {
|
||||||
task.addJob<RenderDeferredTask>("RenderDeferredTask", items);
|
task.addJob<RenderForwardTask>("Forward", items);
|
||||||
}
|
}
|
||||||
task.addJob<EndSecondaryCameraFrame>("EndSecondaryCamera", cachedArg);
|
task.addJob<EndSecondaryCameraFrame>("EndSecondaryCamera", cachedArg);
|
||||||
}
|
}
|
|
@ -12,23 +12,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef hifi_SecondaryCamera_h
|
#ifndef hifi_SecondaryCamera_h
|
||||||
#define hifi_SecondaryCamera_h
|
#define hifi_SecondaryCamera_h
|
||||||
|
|
||||||
#include <RenderShadowTask.h>
|
|
||||||
#include <render/RenderFetchCullSortTask.h>
|
#include <render/RenderFetchCullSortTask.h>
|
||||||
#include <RenderDeferredTask.h>
|
|
||||||
#include <RenderForwardTask.h>
|
|
||||||
#include <TextureCache.h>
|
#include <TextureCache.h>
|
||||||
#include <ViewFrustum.h>
|
#include <ViewFrustum.h>
|
||||||
|
|
||||||
class MainRenderTask {
|
|
||||||
public:
|
|
||||||
using JobModel = render::Task::Model<MainRenderTask>;
|
|
||||||
|
|
||||||
MainRenderTask() {}
|
|
||||||
|
|
||||||
void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor, bool isDeferred = true);
|
|
||||||
};
|
|
||||||
|
|
||||||
class SecondaryCameraJobConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript.
|
class SecondaryCameraJobConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript.
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation
|
Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation
|
||||||
|
|
|
@ -472,7 +472,8 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext,
|
||||||
const graphics::HazePointer& haze,
|
const graphics::HazePointer& haze,
|
||||||
const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer,
|
const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer,
|
||||||
const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer,
|
const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer,
|
||||||
const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource) {
|
const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource,
|
||||||
|
bool renderShadows) {
|
||||||
|
|
||||||
auto args = renderContext->args;
|
auto args = renderContext->args;
|
||||||
auto& batch = (*args->_batch);
|
auto& batch = (*args->_batch);
|
||||||
|
@ -554,7 +555,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext,
|
||||||
// Check if keylight casts shadows
|
// Check if keylight casts shadows
|
||||||
bool keyLightCastShadows { false };
|
bool keyLightCastShadows { false };
|
||||||
|
|
||||||
if (lightStage && lightStage->_currentFrame._sunLights.size()) {
|
if (renderShadows && lightStage && lightStage->_currentFrame._sunLights.size()) {
|
||||||
graphics::LightPointer keyLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front());
|
graphics::LightPointer keyLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front());
|
||||||
if (keyLight) {
|
if (keyLight) {
|
||||||
keyLightCastShadows = keyLight->getCastShadows();
|
keyLightCastShadows = keyLight->getCastShadows();
|
||||||
|
@ -711,11 +712,6 @@ void RenderDeferredCleanup::run(const render::RenderContextPointer& renderContex
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderDeferred::RenderDeferred() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RenderDeferred::configure(const Config& config) {
|
void RenderDeferred::configure(const Config& config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,7 +738,7 @@ void RenderDeferred::run(const RenderContextPointer& renderContext, const Inputs
|
||||||
args->_batch = &batch;
|
args->_batch = &batch;
|
||||||
_gpuTimer->begin(batch);
|
_gpuTimer->begin(batch);
|
||||||
|
|
||||||
setupJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, haze, surfaceGeometryFramebuffer, ssaoFramebuffer, subsurfaceScatteringResource);
|
setupJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, haze, surfaceGeometryFramebuffer, ssaoFramebuffer, subsurfaceScatteringResource, _renderShadows);
|
||||||
|
|
||||||
lightsJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, surfaceGeometryFramebuffer, lightClusters);
|
lightsJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, surfaceGeometryFramebuffer, lightClusters);
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,8 @@ public:
|
||||||
const graphics::HazePointer& haze,
|
const graphics::HazePointer& haze,
|
||||||
const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer,
|
const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer,
|
||||||
const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer,
|
const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer,
|
||||||
const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource);
|
const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource,
|
||||||
|
bool renderShadows);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RenderDeferredLocals {
|
class RenderDeferredLocals {
|
||||||
|
@ -166,7 +167,8 @@ public:
|
||||||
using Config = RenderDeferredConfig;
|
using Config = RenderDeferredConfig;
|
||||||
using JobModel = render::Job::ModelI<RenderDeferred, Inputs, Config>;
|
using JobModel = render::Job::ModelI<RenderDeferred, Inputs, Config>;
|
||||||
|
|
||||||
RenderDeferred();
|
RenderDeferred() {}
|
||||||
|
RenderDeferred(bool renderShadows) : _renderShadows(renderShadows) {}
|
||||||
|
|
||||||
void configure(const Config& config);
|
void configure(const Config& config);
|
||||||
|
|
||||||
|
@ -178,6 +180,9 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
gpu::RangeTimerPointer _gpuTimer;
|
gpu::RangeTimerPointer _gpuTimer;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _renderShadows { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
class DefaultLightingSetup {
|
class DefaultLightingSetup {
|
||||||
|
|
|
@ -61,7 +61,6 @@ protected:
|
||||||
class DrawOverlay3D {
|
class DrawOverlay3D {
|
||||||
public:
|
public:
|
||||||
using Inputs = render::VaryingSet3<render::ItemBounds, LightingModelPointer, glm::vec2>;
|
using Inputs = render::VaryingSet3<render::ItemBounds, LightingModelPointer, glm::vec2>;
|
||||||
|
|
||||||
using Config = DrawOverlay3DConfig;
|
using Config = DrawOverlay3DConfig;
|
||||||
using JobModel = render::Job::ModelI<DrawOverlay3D, Inputs, Config>;
|
using JobModel = render::Job::ModelI<DrawOverlay3D, Inputs, Config>;
|
||||||
|
|
||||||
|
@ -73,7 +72,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
render::ShapePlumberPointer _shapePlumber;
|
render::ShapePlumberPointer _shapePlumber;
|
||||||
int _maxDrawn; // initialized by Config
|
int _maxDrawn; // initialized by Config
|
||||||
bool _opaquePass{ true };
|
bool _opaquePass { true };
|
||||||
};
|
};
|
||||||
|
|
||||||
class CompositeHUD {
|
class CompositeHUD {
|
||||||
|
|
|
@ -64,8 +64,8 @@ void RenderDeferredTask::configure(const Config& config)
|
||||||
}
|
}
|
||||||
|
|
||||||
const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, const char* selectionName,
|
const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, const char* selectionName,
|
||||||
const render::Varying& metas,
|
const render::Varying& metas,
|
||||||
const render::Varying& opaques,
|
const render::Varying& opaques,
|
||||||
const render::Varying& transparents) {
|
const render::Varying& transparents) {
|
||||||
const auto selectMetaInput = SelectItems::Inputs(metas, Varying(), std::string()).asVarying();
|
const auto selectMetaInput = SelectItems::Inputs(metas, Varying(), std::string()).asVarying();
|
||||||
const auto selectedMetas = task.addJob<SelectItems>("MetaSelection", selectMetaInput, selectionName);
|
const auto selectedMetas = task.addJob<SelectItems>("MetaSelection", selectMetaInput, selectionName);
|
||||||
|
@ -75,7 +75,7 @@ const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, cons
|
||||||
return task.addJob<SelectItems>("TransparentSelection", selectItemInput, selectionName);
|
return task.addJob<SelectItems>("TransparentSelection", selectItemInput, selectionName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output) {
|
void RenderDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output, bool renderShadows) {
|
||||||
const auto& items = input.get<Input>();
|
const auto& items = input.get<Input>();
|
||||||
auto fadeEffect = DependencyManager::get<FadeEffect>();
|
auto fadeEffect = DependencyManager::get<FadeEffect>();
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
||||||
const auto deferredLightingInputs = RenderDeferred::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel,
|
const auto deferredLightingInputs = RenderDeferred::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel,
|
||||||
surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, scatteringResource, lightClusters, hazeModel).asVarying();
|
surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, scatteringResource, lightClusters, hazeModel).asVarying();
|
||||||
|
|
||||||
task.addJob<RenderDeferred>("RenderDeferred", deferredLightingInputs);
|
task.addJob<RenderDeferred>("RenderDeferred", deferredLightingInputs, renderShadows);
|
||||||
|
|
||||||
|
|
||||||
// Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job
|
// Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job
|
||||||
|
|
|
@ -126,7 +126,7 @@ public:
|
||||||
RenderDeferredTask();
|
RenderDeferredTask();
|
||||||
|
|
||||||
void configure(const Config& config);
|
void configure(const Config& config);
|
||||||
void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs);
|
void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, bool renderShadows);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const render::Varying addSelectItemJobs(JobModel& task,
|
static const render::Varying addSelectItemJobs(JobModel& task,
|
||||||
|
|
|
@ -27,7 +27,7 @@ void RenderViewTask::build(JobModel& task, const render::Varying& input, render:
|
||||||
assert(items.canCast<RenderFetchCullSortTask::Output>());
|
assert(items.canCast<RenderFetchCullSortTask::Output>());
|
||||||
|
|
||||||
if (isDeferred) {
|
if (isDeferred) {
|
||||||
task.addJob<RenderDeferredTask>("RenderDeferredTask", items);
|
task.addJob<RenderDeferredTask>("RenderDeferredTask", items, true);
|
||||||
} else {
|
} else {
|
||||||
task.addJob<RenderForwardTask>("Forward", items);
|
task.addJob<RenderForwardTask>("Forward", items);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue