|
@@ -41,8 +41,8 @@ namespace bs { namespace ct
|
|
|
{
|
|
{
|
|
|
RenderBeast::RenderBeast()
|
|
RenderBeast::RenderBeast()
|
|
|
: mDefaultMaterial(nullptr), mTiledDeferredLightingMats(), mFlatFramebufferToTextureMat(nullptr)
|
|
: mDefaultMaterial(nullptr), mTiledDeferredLightingMats(), mFlatFramebufferToTextureMat(nullptr)
|
|
|
- , mSkyboxMat(nullptr), mGPULightData(nullptr), mLightGrid(nullptr), mObjectRenderer(nullptr)
|
|
|
|
|
- , mOptions(bs_shared_ptr_new<RenderBeastOptions>()), mOptionsDirty(true)
|
|
|
|
|
|
|
+ , mSkyboxMat(nullptr), mSkyboxSolidColorMat(nullptr), mGPULightData(nullptr), mLightGrid(nullptr)
|
|
|
|
|
+ , mObjectRenderer(nullptr), mOptions(bs_shared_ptr_new<RenderBeastOptions>()), mOptionsDirty(true)
|
|
|
{ }
|
|
{ }
|
|
|
|
|
|
|
|
const StringID& RenderBeast::getName() const
|
|
const StringID& RenderBeast::getName() const
|
|
@@ -74,7 +74,8 @@ namespace bs { namespace ct
|
|
|
mObjectRenderer = bs_new<ObjectRenderer>();
|
|
mObjectRenderer = bs_new<ObjectRenderer>();
|
|
|
|
|
|
|
|
mDefaultMaterial = bs_new<DefaultMaterial>();
|
|
mDefaultMaterial = bs_new<DefaultMaterial>();
|
|
|
- mSkyboxMat = bs_new<SkyboxMat>();
|
|
|
|
|
|
|
+ mSkyboxMat = bs_new<SkyboxMat<false>>();
|
|
|
|
|
+ mSkyboxSolidColorMat = bs_new<SkyboxMat<true>>();
|
|
|
mFlatFramebufferToTextureMat = bs_new<FlatFramebufferToTextureMat>();
|
|
mFlatFramebufferToTextureMat = bs_new<FlatFramebufferToTextureMat>();
|
|
|
|
|
|
|
|
mTiledDeferredLightingMats[0] = bs_new<TTiledDeferredLightingMat<1>>();
|
|
mTiledDeferredLightingMats[0] = bs_new<TTiledDeferredLightingMat<1>>();
|
|
@@ -110,6 +111,7 @@ namespace bs { namespace ct
|
|
|
|
|
|
|
|
bs_delete(mDefaultMaterial);
|
|
bs_delete(mDefaultMaterial);
|
|
|
bs_delete(mSkyboxMat);
|
|
bs_delete(mSkyboxMat);
|
|
|
|
|
+ bs_delete(mSkyboxSolidColorMat);
|
|
|
bs_delete(mGPULightData);
|
|
bs_delete(mGPULightData);
|
|
|
bs_delete(mLightGrid);
|
|
bs_delete(mLightGrid);
|
|
|
bs_delete(mFlatFramebufferToTextureMat);
|
|
bs_delete(mFlatFramebufferToTextureMat);
|
|
@@ -509,6 +511,7 @@ namespace bs { namespace ct
|
|
|
|
|
|
|
|
viewDesc.isOverlay = camera->getFlags().isSet(CameraFlag::Overlay);
|
|
viewDesc.isOverlay = camera->getFlags().isSet(CameraFlag::Overlay);
|
|
|
viewDesc.isHDR = camera->getFlags().isSet(CameraFlag::HDR);
|
|
viewDesc.isHDR = camera->getFlags().isSet(CameraFlag::HDR);
|
|
|
|
|
+ viewDesc.noLighting = camera->getFlags().isSet(CameraFlag::NoLighting);
|
|
|
viewDesc.triggerCallbacks = true;
|
|
viewDesc.triggerCallbacks = true;
|
|
|
viewDesc.runPostProcessing = true;
|
|
viewDesc.runPostProcessing = true;
|
|
|
|
|
|
|
@@ -795,7 +798,7 @@ namespace bs { namespace ct
|
|
|
viewInfo->beginRendering(true);
|
|
viewInfo->beginRendering(true);
|
|
|
|
|
|
|
|
// Prepare light grid required for transparent object rendering
|
|
// Prepare light grid required for transparent object rendering
|
|
|
- mLightGrid->updateGrid(*viewInfo, *mGPULightData);
|
|
|
|
|
|
|
+ mLightGrid->updateGrid(*viewInfo, *mGPULightData, viewInfo->renderWithNoLighting());
|
|
|
|
|
|
|
|
SPtr<GpuParamBlockBuffer> gridParams;
|
|
SPtr<GpuParamBlockBuffer> gridParams;
|
|
|
SPtr<GpuBuffer> gridOffsetsAndSize, gridLightIndices;
|
|
SPtr<GpuBuffer> gridOffsetsAndSize, gridLightIndices;
|
|
@@ -871,7 +874,8 @@ namespace bs { namespace ct
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- renderTargets->bindSceneColor(true);
|
|
|
|
|
|
|
+ RenderAPI& rapi = RenderAPI::instance();
|
|
|
|
|
+ rapi.setRenderTarget(nullptr);
|
|
|
|
|
|
|
|
// Render light pass
|
|
// Render light pass
|
|
|
ITiledDeferredLightingMat* lightingMat;
|
|
ITiledDeferredLightingMat* lightingMat;
|
|
@@ -895,11 +899,13 @@ namespace bs { namespace ct
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
lightingMat->setLights(*mGPULightData);
|
|
lightingMat->setLights(*mGPULightData);
|
|
|
- lightingMat->execute(renderTargets, perCameraBuffer);
|
|
|
|
|
|
|
+ lightingMat->execute(renderTargets, perCameraBuffer, viewInfo->renderWithNoLighting());
|
|
|
|
|
|
|
|
const RenderAPIInfo& rapiInfo = RenderAPI::instance().getAPIInfo();
|
|
const RenderAPIInfo& rapiInfo = RenderAPI::instance().getAPIInfo();
|
|
|
bool usingFlattenedFB = numSamples > 1 && !rapiInfo.isFlagSet(RenderAPIFeatureFlag::MSAAImageStores);
|
|
bool usingFlattenedFB = numSamples > 1 && !rapiInfo.isFlagSet(RenderAPIFeatureFlag::MSAAImageStores);
|
|
|
|
|
|
|
|
|
|
+ renderTargets->bindSceneColor(true);
|
|
|
|
|
+
|
|
|
// If we're using flattened framebuffer for MSAA we need to copy its contents to the MSAA scene texture before
|
|
// If we're using flattened framebuffer for MSAA we need to copy its contents to the MSAA scene texture before
|
|
|
// continuing
|
|
// continuing
|
|
|
if(usingFlattenedFB)
|
|
if(usingFlattenedFB)
|
|
@@ -911,15 +917,21 @@ namespace bs { namespace ct
|
|
|
// Render skybox (if any)
|
|
// Render skybox (if any)
|
|
|
SPtr<Texture> skyTexture = viewInfo->getSkybox();
|
|
SPtr<Texture> skyTexture = viewInfo->getSkybox();
|
|
|
if (skyTexture != nullptr && skyTexture->getProperties().getTextureType() == TEX_TYPE_CUBE_MAP)
|
|
if (skyTexture != nullptr && skyTexture->getProperties().getTextureType() == TEX_TYPE_CUBE_MAP)
|
|
|
- //if (dbgSkyTex != nullptr)
|
|
|
|
|
{
|
|
{
|
|
|
mSkyboxMat->bind(perCameraBuffer);
|
|
mSkyboxMat->bind(perCameraBuffer);
|
|
|
- mSkyboxMat->setParams(skyTexture);
|
|
|
|
|
|
|
+ mSkyboxMat->setParams(skyTexture, Color::White);
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ Color clearColor = viewInfo->getClearColor();
|
|
|
|
|
|
|
|
- SPtr<Mesh> mesh = gRendererUtility().getSkyBoxMesh();
|
|
|
|
|
- gRendererUtility().draw(mesh, mesh->getProperties().getSubMesh(0));
|
|
|
|
|
|
|
+ mSkyboxSolidColorMat->bind(perCameraBuffer);
|
|
|
|
|
+ mSkyboxSolidColorMat->setParams(nullptr, clearColor);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ SPtr<Mesh> mesh = gRendererUtility().getSkyBoxMesh();
|
|
|
|
|
+ gRendererUtility().draw(mesh, mesh->getProperties().getSubMesh(0));
|
|
|
|
|
+
|
|
|
renderTargets->bindSceneColor(false);
|
|
renderTargets->bindSceneColor(false);
|
|
|
|
|
|
|
|
// Render transparent objects
|
|
// Render transparent objects
|
|
@@ -947,7 +959,6 @@ namespace bs { namespace ct
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Post-processing and final resolve
|
|
// Post-processing and final resolve
|
|
|
- RenderAPI& rapi = RenderAPI::instance();
|
|
|
|
|
Rect2 viewportArea = viewInfo->getViewportRect();
|
|
Rect2 viewportArea = viewInfo->getViewportRect();
|
|
|
|
|
|
|
|
if (viewInfo->checkRunPostProcessing())
|
|
if (viewInfo->checkRunPostProcessing())
|
|
@@ -1100,6 +1111,7 @@ namespace bs { namespace ct
|
|
|
|
|
|
|
|
viewDesc.isOverlay = false;
|
|
viewDesc.isOverlay = false;
|
|
|
viewDesc.isHDR = hdr;
|
|
viewDesc.isHDR = hdr;
|
|
|
|
|
+ viewDesc.noLighting = false;
|
|
|
viewDesc.triggerCallbacks = false;
|
|
viewDesc.triggerCallbacks = false;
|
|
|
viewDesc.runPostProcessing = false;
|
|
viewDesc.runPostProcessing = false;
|
|
|
|
|
|