Skip to content

Commit

Permalink
RenderableCollector::addRenderable() takes a Shader reference
Browse files Browse the repository at this point in the history
Since RenderableCollectors are ephemeral objects which only last for a single
render operation, there is no need for them to receive a full shared pointer to
a shader and possibly incur the expense of incrementing the reference count.

In practice this probably makes no difference to performance since every
addRenderable() implementation was just dereferencing the shared_ptr
immediately and never storing it, but since addRenderable() is called a great
many times for each frame, we might as well make the interface as streamlined
as possible.
  • Loading branch information
Matthew Mott committed Aug 25, 2020
1 parent 0c8d652 commit 919a439
Show file tree
Hide file tree
Showing 31 changed files with 75 additions and 75 deletions.
2 changes: 1 addition & 1 deletion include/irenderable.h
Expand Up @@ -51,7 +51,7 @@ class RenderableCollector
* Optional IRenderEntity exposing parameters which affect the rendering of
* this Renderable.
*/
virtual void addRenderable(const ShaderPtr& shader,
virtual void addRenderable(Shader& shader,
const OpenGLRenderable& renderable,
const Matrix4& world,
const LightSources* lights = nullptr,
Expand Down
2 changes: 1 addition & 1 deletion libs/render/RenderablePivot.h
Expand Up @@ -99,7 +99,7 @@ class RenderablePivot :
// greebo: Commented this out to avoid the point from being moved along with the view.
//Pivot2World_worldSpace(m_localToWorld, localToWorld, volume.GetModelview(), volume.GetProjection(), volume.GetViewport());

collector.addRenderable(_shader, *this, localToWorld);
collector.addRenderable(*_shader, *this, localToWorld);
}
};

Expand Down
4 changes: 2 additions & 2 deletions libs/render/RenderableSpacePartition.h
Expand Up @@ -41,15 +41,15 @@ class RenderableSpacePartition :
{
if (_shader != NULL)
{
collector.addRenderable(_shader, *this, Matrix4::getIdentity());
collector.addRenderable(*_shader, *this, Matrix4::getIdentity());
}
}

void renderWireframe(RenderableCollector& collector, const VolumeTest& volume) const override
{
if (_shader != NULL)
{
collector.addRenderable(_shader, *this, Matrix4::getIdentity());
collector.addRenderable(*_shader, *this, Matrix4::getIdentity());
}
}

Expand Down
4 changes: 2 additions & 2 deletions libs/render/SimpleFrontendRenderer.h
Expand Up @@ -18,12 +18,12 @@ class SimpleFrontendRenderer :
SimpleFrontendRenderer()
{}

void addRenderable(const ShaderPtr& shader,
void addRenderable(Shader& shader,
const OpenGLRenderable& renderable,
const Matrix4& world, const LightSources* lights,
const IRenderEntity* entity) override
{
shader->addRenderable(renderable, world, lights, entity);
shader.addRenderable(renderable, world, lights, entity);
}

bool supportsFullMaterials() const override
Expand Down
6 changes: 3 additions & 3 deletions radiant/brush/Brush.cpp
Expand Up @@ -254,13 +254,13 @@ void Brush::renderComponents(SelectionSystem::EComponentMode mode, RenderableCol
switch (mode)
{
case SelectionSystem::eVertex:
collector.addRenderable(m_state_point, _uniqueVertexPoints, localToWorld);
collector.addRenderable(*m_state_point, _uniqueVertexPoints, localToWorld);
break;
case SelectionSystem::eEdge:
collector.addRenderable(m_state_point, _uniqueEdgePoints, localToWorld);
collector.addRenderable(*m_state_point, _uniqueEdgePoints, localToWorld);
break;
case SelectionSystem::eFace:
collector.addRenderable(m_state_point, _faceCentroidPoints, localToWorld);
collector.addRenderable(*m_state_point, _faceCentroidPoints, localToWorld);
break;
default:
break;
Expand Down
2 changes: 1 addition & 1 deletion radiant/brush/BrushClipPlane.h
Expand Up @@ -58,6 +58,6 @@ class BrushClipPlane :

void render(RenderableCollector& collector, const VolumeTest& volume, const Matrix4& localToWorld) const
{
collector.addRenderable(_shader, *this, localToWorld);
collector.addRenderable(*_shader, *this, localToWorld);
}
};
6 changes: 3 additions & 3 deletions radiant/brush/BrushNode.cpp
Expand Up @@ -331,7 +331,7 @@ void BrushNode::renderComponents(RenderableCollector& collector, const VolumeTes
if (volume.fill() && GlobalSelectionSystem().ComponentMode() == SelectionSystem::eFace)
{
evaluateViewDependent(volume, l2w);
collector.addRenderable(m_brush.m_state_point, _faceCentroidPointsCulled, l2w);
collector.addRenderable(*m_brush.m_state_point, _faceCentroidPointsCulled, l2w);
}
else
{
Expand Down Expand Up @@ -469,7 +469,7 @@ void BrushNode::renderWireframe(RenderableCollector& collector, const VolumeTest

if (m_render_wireframe.m_size != 0)
{
collector.addRenderable(_renderEntity->getWireShader(), m_render_wireframe, localToWorld);
collector.addRenderable(*_renderEntity->getWireShader(), m_render_wireframe, localToWorld);
}

renderSelectedPoints(collector, volume, localToWorld);
Expand Down Expand Up @@ -501,7 +501,7 @@ void BrushNode::renderSelectedPoints(RenderableCollector& collector,
if (!_selectedPoints.empty())
{
collector.setHighlightFlag(RenderableCollector::Highlight::Primitives, false);
collector.addRenderable(m_state_selpoint, _selectedPoints, localToWorld);
collector.addRenderable(*m_state_selpoint, _selectedPoints, localToWorld);
}
}

Expand Down
4 changes: 2 additions & 2 deletions radiant/brush/Face.cpp
Expand Up @@ -228,14 +228,14 @@ void Face::renderSolid(RenderableCollector& collector,
const Matrix4& localToWorld, const IRenderEntity& entity,
const LightSources& lights) const
{
collector.addRenderable(_shader.getGLShader(), m_winding, localToWorld,
collector.addRenderable(*_shader.getGLShader(), m_winding, localToWorld,
&lights, &entity);
}

void Face::renderWireframe(RenderableCollector& collector, const Matrix4& localToWorld,
const IRenderEntity& entity) const
{
collector.addRenderable(entity.getWireShader(), m_winding, localToWorld,
collector.addRenderable(*entity.getWireShader(), m_winding, localToWorld,
nullptr, &entity);
}

Expand Down
4 changes: 2 additions & 2 deletions radiant/camera/CamWnd.cpp
Expand Up @@ -589,7 +589,7 @@ class CamRenderer: public RenderableCollector
}
}

void addRenderable(const ShaderPtr& shader, const OpenGLRenderable& renderable,
void addRenderable(Shader& shader, const OpenGLRenderable& renderable,
const Matrix4& world, const LightSources* lights,
const IRenderEntity* entity) override
{
Expand All @@ -601,7 +601,7 @@ class CamRenderer: public RenderableCollector
_highlightedFaceShader.addRenderable(renderable, world,
lights, entity);

shader->addRenderable(renderable, world, lights, entity);
shader.addRenderable(renderable, world, lights, entity);
}
};

Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/EntityNode.cpp
Expand Up @@ -238,7 +238,7 @@ void EntityNode::renderWireframe(RenderableCollector& collector,
// Submit renderable text name if required
if (EntitySettings::InstancePtr()->renderEntityNames())
{
collector.addRenderable(getWireShader(), _renderableName, localToWorld());
collector.addRenderable(*getWireShader(), _renderableName, localToWorld());
}
}

Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/VertexInstance.h
Expand Up @@ -89,7 +89,7 @@ class VertexInstance :
{
collector.setHighlightFlag(RenderableCollector::Highlight::Primitives, false);
collector.setHighlightFlag(RenderableCollector::Highlight::Faces, false);
collector.addRenderable(_shader, *this, localToWorld);
collector.addRenderable(*_shader, *this, localToWorld);
}

// GL render function (backend)
Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/curve/Curve.cpp
Expand Up @@ -72,7 +72,7 @@ ControlPoints& Curve::getControlPoints() {
void Curve::submitRenderables(const ShaderPtr& shader, RenderableCollector& collector, const VolumeTest& volume,
const Matrix4& localToWorld) const
{
collector.addRenderable(shader, _renderCurve, localToWorld);
collector.addRenderable(*shader, _renderCurve, localToWorld);
}

const AABB& Curve::getBounds() const {
Expand Down
4 changes: 2 additions & 2 deletions radiant/entity/curve/CurveEditInstance.cpp
Expand Up @@ -170,7 +170,7 @@ void CurveEditInstance::updateSelected() const {
void CurveEditInstance::renderComponents(RenderableCollector& collector,
const VolumeTest& volume, const Matrix4& localToWorld) const
{
collector.addRenderable(_shaders.controlsShader, m_controlsRender, localToWorld);
collector.addRenderable(*_shaders.controlsShader, m_controlsRender, localToWorld);
}

void CurveEditInstance::renderComponentsSelected(RenderableCollector& collector,
Expand All @@ -179,7 +179,7 @@ void CurveEditInstance::renderComponentsSelected(RenderableCollector& collector,
updateSelected();
if(!m_selectedRender.empty())
{
collector.addRenderable(_shaders.selectedShader, m_selectedRender, localToWorld);
collector.addRenderable(*_shaders.selectedShader, m_selectedRender, localToWorld);
}
}

Expand Down
6 changes: 3 additions & 3 deletions radiant/entity/generic/GenericEntity.cpp
Expand Up @@ -53,7 +53,7 @@ void GenericEntity::renderArrow(const ShaderPtr& shader, RenderableCollector& co
{
if (EntitySettings::InstancePtr()->showEntityAngles())
{
collector.addRenderable(shader, m_arrow, localToWorld);
collector.addRenderable(*shader, m_arrow, localToWorld);
}
}

Expand All @@ -64,14 +64,14 @@ void GenericEntity::renderSolid(RenderableCollector& collector,
const ShaderPtr& shader = _owner.getSolidAABBRenderMode() == GenericEntityNode::WireFrameOnly ?
_owner.getWireShader() : _owner.getFillShader();

collector.addRenderable(shader, m_aabb_solid, localToWorld);
collector.addRenderable(*shader, m_aabb_solid, localToWorld);
renderArrow(shader, collector, volume, localToWorld);
}

void GenericEntity::renderWireframe(RenderableCollector& collector,
const VolumeTest& volume, const Matrix4& localToWorld) const
{
collector.addRenderable(_owner.getWireShader(), m_aabb_wire, localToWorld);
collector.addRenderable(*_owner.getWireShader(), m_aabb_wire, localToWorld);
renderArrow(_owner.getWireShader(), collector, volume, localToWorld);
}

Expand Down
18 changes: 9 additions & 9 deletions radiant/entity/light/Light.cpp
Expand Up @@ -539,18 +539,18 @@ void Light::renderProjectionPoints(RenderableCollector& collector,
collector.setHighlightFlag(RenderableCollector::Highlight::Primitives, false);
collector.setHighlightFlag(RenderableCollector::Highlight::Faces, false);

collector.addRenderable(_rRight.getShader(), _rRight, localToWorld);
collector.addRenderable(_rUp.getShader(), _rUp, localToWorld);
collector.addRenderable(_rTarget.getShader(), _rTarget, localToWorld);
collector.addRenderable(*_rRight.getShader(), _rRight, localToWorld);
collector.addRenderable(*_rUp.getShader(), _rUp, localToWorld);
collector.addRenderable(*_rTarget.getShader(), _rTarget, localToWorld);

if (m_useLightStart)
{
collector.addRenderable(_rStart.getShader(), _rStart, localToWorld);
collector.addRenderable(*_rStart.getShader(), _rStart, localToWorld);
}

if (m_useLightEnd)
{
collector.addRenderable(_rEnd.getShader(), _rEnd, localToWorld);
collector.addRenderable(*_rEnd.getShader(), _rEnd, localToWorld);
}
}

Expand All @@ -559,7 +559,7 @@ void Light::renderLightCentre(RenderableCollector& collector,
const VolumeTest& volume,
const Matrix4& localToWorld) const
{
collector.addRenderable(_rCentre.getShader(), _rCentre, localToWorld);
collector.addRenderable(*_rCentre.getShader(), _rCentre, localToWorld);
}

void Light::renderWireframe(RenderableCollector& collector,
Expand All @@ -568,7 +568,7 @@ void Light::renderWireframe(RenderableCollector& collector,
bool selected) const
{
// Main render, submit the diamond that represents the light entity
collector.addRenderable(_owner.getColourShader(), *this, localToWorld);
collector.addRenderable(*_owner.getColourShader(), *this, localToWorld);

// Render bounding box if selected or the showAllLighRadii flag is set
if (selected || EntitySettings::InstancePtr()->showAllLightRadii())
Expand All @@ -578,12 +578,12 @@ void Light::renderWireframe(RenderableCollector& collector,
// greebo: This is not much of an performance impact as the
// projection gets only recalculated when it has actually changed.
updateProjection();
collector.addRenderable(_owner.getColourShader(), _renderableFrustum, localToWorld);
collector.addRenderable(*_owner.getColourShader(), _renderableFrustum, localToWorld);
}
else
{
updateRenderableRadius();
collector.addRenderable(_owner.getColourShader(), _renderableRadius, localToWorld);
collector.addRenderable(*_owner.getColourShader(), _renderableRadius, localToWorld);
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions radiant/entity/speaker/SpeakerNode.cpp
Expand Up @@ -243,27 +243,27 @@ void SpeakerNode::renderSolid(RenderableCollector& collector,
{
EntityNode::renderSolid(collector, volume);

collector.addRenderable(getFillShader(), m_aabb_solid, localToWorld());
collector.addRenderable(*getFillShader(), m_aabb_solid, localToWorld());

// Submit the speaker radius if we are selected or the "show all speaker
// radii" option is set
if (isSelected() || EntitySettings::InstancePtr()->showAllSpeakerRadii())
{
collector.addRenderable(getFillShader(), _renderableRadii, localToWorld());
collector.addRenderable(*getFillShader(), _renderableRadii, localToWorld());
}
}
void SpeakerNode::renderWireframe(RenderableCollector& collector,
const VolumeTest& volume) const
{
EntityNode::renderWireframe(collector, volume);

collector.addRenderable(getWireShader(), m_aabb_wire, localToWorld());
collector.addRenderable(*getWireShader(), m_aabb_wire, localToWorld());

// Submit the speaker radius if we are selected or the "show all speaker
// radii" option is set
if (isSelected() || EntitySettings::InstancePtr()->showAllSpeakerRadii())
{
collector.addRenderable(getWireShader(), _renderableRadii, localToWorld());
collector.addRenderable(*getWireShader(), _renderableRadii, localToWorld());
}
}

Expand Down
2 changes: 1 addition & 1 deletion radiant/entity/target/RenderableTargetLines.h
Expand Up @@ -68,7 +68,7 @@ class RenderableTargetLines :
// If we hold any objects now, add us as renderable
if (!empty())
{
collector.addRenderable(shader, *this, Matrix4::getIdentity());
collector.addRenderable(*shader, *this, Matrix4::getIdentity());
}
}

Expand Down
2 changes: 1 addition & 1 deletion radiant/map/PointFile.cpp
Expand Up @@ -70,7 +70,7 @@ void PointFile::renderSolid(RenderableCollector& collector, const VolumeTest& vo
{
if (isVisible())
{
collector.addRenderable(_renderstate, _points, Matrix4::getIdentity());
collector.addRenderable(*_renderstate, _points, Matrix4::getIdentity());
}
}

Expand Down
4 changes: 2 additions & 2 deletions radiant/map/RenderableAasFile.cpp
Expand Up @@ -51,12 +51,12 @@ void RenderableAasFile::renderSolid(RenderableCollector& collector, const Volume
continue;
}

collector.addRenderable(_normalShader, aabb, Matrix4::getIdentity());
collector.addRenderable(*_normalShader, aabb, Matrix4::getIdentity());
}

if (_renderNumbers)
{
collector.addRenderable(_normalShader, *this, Matrix4::getIdentity());
collector.addRenderable(*_normalShader, *this, Matrix4::getIdentity());
}
}

Expand Down
4 changes: 2 additions & 2 deletions radiant/md5model/MD5ModelNode.cpp
Expand Up @@ -159,12 +159,12 @@ void MD5ModelNode::render(RenderableCollector& collector, const VolumeTest& volu
if (collector.supportsFullMaterials())
{
assert(i->shader); // shader must be captured at this point
collector.addRenderable(i->shader, *i->surface, localToWorld,
collector.addRenderable(*i->shader, *i->surface, localToWorld,
&(*j), &entity);
}
else
{
collector.addRenderable(entity.getWireShader(), *i->surface,
collector.addRenderable(*entity.getWireShader(), *i->surface,
localToWorld, nullptr, &entity);
}
}
Expand Down
4 changes: 2 additions & 2 deletions radiant/model/NullModel.cpp
Expand Up @@ -23,13 +23,13 @@ const AABB& NullModel::localAABB() const {
void NullModel::renderSolid(RenderableCollector& collector,
const VolumeTest& volume, const Matrix4& localToWorld) const
{
collector.addRenderable(_state, _aabbSolid, localToWorld);
collector.addRenderable(*_state, _aabbSolid, localToWorld);
}

void NullModel::renderWireframe(RenderableCollector& collector,
const VolumeTest& volume, const Matrix4& localToWorld) const
{
collector.addRenderable(_state, _aabbWire, localToWorld);
collector.addRenderable(*_state, _aabbWire, localToWorld);
}

void NullModel::setRenderSystem(const RenderSystemPtr& renderSystem)
Expand Down
4 changes: 2 additions & 2 deletions radiant/modelfile/RenderablePicoModel.cpp
Expand Up @@ -111,7 +111,7 @@ void RenderablePicoModel::renderSolid(RenderableCollector& rend,
foreachVisibleSurface([&](const Surface& s)
{
// Submit the ordinary shader for material-based rendering
rend.addRenderable(s.shader, *s.surface, localToWorld,
rend.addRenderable(*s.shader, *s.surface, localToWorld,
&lights, &entity);
});
}
Expand All @@ -123,7 +123,7 @@ void RenderablePicoModel::renderWireframe(RenderableCollector& rend, const Matri
foreachVisibleSurface([&](const Surface& s)
{
// Submit the wireframe shader for non-shaded renderers
rend.addRenderable(entity.getWireShader(), *s.surface, localToWorld,
rend.addRenderable(*entity.getWireShader(), *s.surface, localToWorld,
nullptr, &entity);
});
}
Expand Down
2 changes: 1 addition & 1 deletion radiant/particles/RenderableParticle.cpp
Expand Up @@ -65,7 +65,7 @@ void RenderableParticle::renderSolid(RenderableCollector& collector,
// Skip invisible stages
if (!stage->getDef().isVisible()) continue;

collector.addRenderable(pair.second.shader, *stage, localToWorld,
collector.addRenderable(*pair.second.shader, *stage, localToWorld,
nullptr, entity);
}
}
Expand Down

0 comments on commit 919a439

Please sign in to comment.