mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-05-08 12:30:00 -05:00
Double renderbins for renderables (#2520)
This commit is contained in:
@@ -224,6 +224,8 @@ void Renderable::update(const UpdateData&) {}
|
||||
|
||||
void Renderable::render(const RenderData&, RendererTasks&) {}
|
||||
|
||||
void Renderable::renderSecondary(const RenderData&, RendererTasks&) {}
|
||||
|
||||
void Renderable::setBoundingSphere(double boundingSphere) {
|
||||
_boundingSphere = boundingSphere;
|
||||
}
|
||||
@@ -267,8 +269,15 @@ void Renderable::setRenderBin(RenderBin bin) {
|
||||
_renderBin = bin;
|
||||
}
|
||||
|
||||
bool Renderable::matchesRenderBinMask(int binMask) {
|
||||
return binMask & static_cast<int>(renderBin());
|
||||
bool Renderable::matchesRenderBinMask(int binMask) const noexcept {
|
||||
return binMask & static_cast<int>(_renderBin);
|
||||
}
|
||||
|
||||
bool Renderable::matchesSecondaryRenderBin(int binMask) const noexcept {
|
||||
if (!_secondaryRenderBin.has_value()) {
|
||||
return false;
|
||||
}
|
||||
return binMask & static_cast<int>(*_secondaryRenderBin);
|
||||
}
|
||||
|
||||
void Renderable::setFade(float fade) {
|
||||
|
||||
@@ -737,7 +737,7 @@ void SceneGraphNode::render(const RenderData& data, RendererTasks& tasks) {
|
||||
}
|
||||
|
||||
const bool visible = _renderable && _renderable->isVisible() &&
|
||||
_renderable->isReady() && _renderable->matchesRenderBinMask(data.renderBinMask);
|
||||
_renderable->isReady();
|
||||
|
||||
if (!visible) {
|
||||
return;
|
||||
@@ -747,21 +747,31 @@ void SceneGraphNode::render(const RenderData& data, RendererTasks& tasks) {
|
||||
return;
|
||||
}
|
||||
|
||||
RenderData newData = {
|
||||
.camera = data.camera,
|
||||
.time = data.time,
|
||||
.renderBinMask = data.renderBinMask,
|
||||
.modelTransform = {
|
||||
.translation = _worldPositionCached,
|
||||
.rotation = _worldRotationCached,
|
||||
.scale = _worldScaleCached
|
||||
}
|
||||
};
|
||||
|
||||
if (_renderable->matchesSecondaryRenderBin(data.renderBinMask)) {
|
||||
TracyGpuZone("Render Secondary Bin")
|
||||
_renderable->renderSecondary(newData, tasks);
|
||||
}
|
||||
|
||||
if (!_renderable->matchesRenderBinMask(data.renderBinMask)) {
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
TracyGpuZone("Render")
|
||||
|
||||
RenderData newData = {
|
||||
.camera = data.camera,
|
||||
.time = data.time,
|
||||
.renderBinMask = data.renderBinMask,
|
||||
.modelTransform = {
|
||||
.translation = _worldPositionCached,
|
||||
.rotation = _worldRotationCached,
|
||||
.scale = _worldScaleCached
|
||||
}
|
||||
};
|
||||
|
||||
_renderable->render(newData, tasks);
|
||||
|
||||
if (_computeScreenSpaceValues) {
|
||||
computeScreenSpaceData(newData);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user