use emplace_back and pre-reserved sizes for vectors

This commit is contained in:
ZappoMan 2015-06-08 12:45:39 -07:00
parent 5d6112d9c5
commit 26ef6af009

View file

@ -78,7 +78,7 @@ void render::cullItems(const SceneContextPointer& sceneContext, const RenderCont
} }
if (bound.isNull()) { if (bound.isNull()) {
outItems.push_back(ItemIDAndBounds(itemDetails.id)); // One more Item to render outItems.emplace_back(ItemIDAndBounds(itemDetails.id)); // One more Item to render
continue; continue;
} }
@ -96,7 +96,7 @@ void render::cullItems(const SceneContextPointer& sceneContext, const RenderCont
bigEnoughToRender = (args->_shouldRender) ? args->_shouldRender(args, bound) : true; bigEnoughToRender = (args->_shouldRender) ? args->_shouldRender(args, bound) : true;
} }
if (bigEnoughToRender) { if (bigEnoughToRender) {
outItems.push_back(ItemIDAndBounds(itemDetails.id, bound)); // One more Item to render outItems.emplace_back(ItemIDAndBounds(itemDetails.id, bound)); // One more Item to render
} else { } else {
renderDetails->_tooSmall++; renderDetails->_tooSmall++;
} }
@ -247,13 +247,14 @@ template <> void render::jobRun(const DrawOpaque& job, const SceneContextPointer
ItemIDsBounds inItems; ItemIDsBounds inItems;
inItems.reserve(items.size()); inItems.reserve(items.size());
for (auto id : items) { for (auto id : items) {
inItems.push_back(ItemIDAndBounds(id)); inItems.emplace_back(ItemIDAndBounds(id));
} }
ItemIDsBounds& renderedItems = inItems; ItemIDsBounds& renderedItems = inItems;
renderContext->_numFeedOpaqueItems = renderedItems.size(); renderContext->_numFeedOpaqueItems = renderedItems.size();
ItemIDsBounds culledItems; ItemIDsBounds culledItems;
culledItems.reserve(inItems.size());
if (renderContext->_cullOpaque) { if (renderContext->_cullOpaque) {
renderDetails.pointTo(RenderDetails::OPAQUE_ITEM); renderDetails.pointTo(RenderDetails::OPAQUE_ITEM);
cullItems(sceneContext, renderContext, renderedItems, culledItems); cullItems(sceneContext, renderContext, renderedItems, culledItems);
@ -265,6 +266,7 @@ template <> void render::jobRun(const DrawOpaque& job, const SceneContextPointer
ItemIDsBounds sortedItems; ItemIDsBounds sortedItems;
sortedItems.reserve(culledItems.size());
if (renderContext->_sortOpaque) { if (renderContext->_sortOpaque) {
depthSortItems(sceneContext, renderContext, true, renderedItems, sortedItems); // Sort Front to back opaque items! depthSortItems(sceneContext, renderContext, true, renderedItems, sortedItems); // Sort Front to back opaque items!
renderedItems = sortedItems; renderedItems = sortedItems;
@ -313,13 +315,14 @@ template <> void render::jobRun(const DrawTransparent& job, const SceneContextPo
ItemIDsBounds inItems; ItemIDsBounds inItems;
inItems.reserve(items.size()); inItems.reserve(items.size());
for (auto id : items) { for (auto id : items) {
inItems.push_back(id); inItems.emplace_back(id);
} }
ItemIDsBounds& renderedItems = inItems; ItemIDsBounds& renderedItems = inItems;
renderContext->_numFeedTransparentItems = renderedItems.size(); renderContext->_numFeedTransparentItems = renderedItems.size();
ItemIDsBounds culledItems; ItemIDsBounds culledItems;
culledItems.reserve(inItems.size());
if (renderContext->_cullTransparent) { if (renderContext->_cullTransparent) {
renderDetails.pointTo(RenderDetails::TRANSLUCENT_ITEM); renderDetails.pointTo(RenderDetails::TRANSLUCENT_ITEM);
cullItems(sceneContext, renderContext, inItems, culledItems); cullItems(sceneContext, renderContext, inItems, culledItems);
@ -330,6 +333,7 @@ template <> void render::jobRun(const DrawTransparent& job, const SceneContextPo
renderContext->_numDrawnTransparentItems = renderedItems.size(); renderContext->_numDrawnTransparentItems = renderedItems.size();
ItemIDsBounds sortedItems; ItemIDsBounds sortedItems;
sortedItems.reserve(culledItems.size());
if (renderContext->_sortTransparent) { if (renderContext->_sortTransparent) {
depthSortItems(sceneContext, renderContext, false, renderedItems, sortedItems); // Sort Back to front transparent items! depthSortItems(sceneContext, renderContext, false, renderedItems, sortedItems); // Sort Back to front transparent items!
renderedItems = sortedItems; renderedItems = sortedItems;
@ -393,10 +397,11 @@ template <> void render::jobRun(const DrawLight& job, const SceneContextPointer&
ItemIDsBounds inItems; ItemIDsBounds inItems;
inItems.reserve(items.size()); inItems.reserve(items.size());
for (auto id : items) { for (auto id : items) {
inItems.push_back(id); inItems.emplace_back(id);
} }
ItemIDsBounds culledItems; ItemIDsBounds culledItems;
culledItems.reserve(inItems.size());
cullItems(sceneContext, renderContext, inItems, culledItems); cullItems(sceneContext, renderContext, inItems, culledItems);
RenderArgs* args = renderContext->args; RenderArgs* args = renderContext->args;
@ -420,7 +425,7 @@ template <> void render::jobRun(const DrawBackground& job, const SceneContextPoi
ItemIDsBounds inItems; ItemIDsBounds inItems;
inItems.reserve(items.size()); inItems.reserve(items.size());
for (auto id : items) { for (auto id : items) {
inItems.push_back(id); inItems.emplace_back(id);
} }
RenderArgs* args = renderContext->args; RenderArgs* args = renderContext->args;
gpu::Batch batch; gpu::Batch batch;