From 37a291275d32de8f0c63c844c3410179afc648da Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 27 May 2015 16:46:44 -0700 Subject: [PATCH] more work on rendering in engine --- .../src/EntityTreeRenderer.cpp | 52 +++++++++++-------- .../src/RenderableEntityItem.cpp | 7 +-- libraries/render/src/render/DrawTask.cpp | 17 ++++++ 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 4915eac8fe..28a913d6eb 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -480,6 +480,7 @@ void EntityTreeRenderer::applyZonePropertiesToScene(std::shared_ptr_renderSide); @@ -515,7 +516,9 @@ void EntityTreeRenderer::render(RenderArgs* renderArgs) { glPushMatrix(); renderArgs->_context->enqueueBatch(batch); glPopMatrix(); - + + renderArgs->_batch = nullptr; + // stats... _meshesConsidered = renderArgs->_meshesConsidered; _meshesRendered = renderArgs->_meshesRendered; @@ -699,35 +702,38 @@ void EntityTreeRenderer::renderElement(OctreeElement* element, RenderArgs* args) } } } + + // hack for models. :( + if (entityItem->getType() == EntityTypes::Model) { + // render entityItem + AABox entityBox = entityItem->getAABox(); - // render entityItem - AABox entityBox = entityItem->getAABox(); + // TODO: some entity types (like lights) might want to be rendered even + // when they are outside of the view frustum... + float distance = args->_viewFrustum->distanceToCamera(entityBox.calcCenter()); - // TODO: some entity types (like lights) might want to be rendered even - // when they are outside of the view frustum... - float distance = args->_viewFrustum->distanceToCamera(entityBox.calcCenter()); - - bool outOfView = args->_viewFrustum->boxInFrustum(entityBox) == ViewFrustum::OUTSIDE; - if (!outOfView) { - bool bigEnoughToRender = _viewState->shouldRenderMesh(entityBox.getLargestDimension(), distance); + bool outOfView = args->_viewFrustum->boxInFrustum(entityBox) == ViewFrustum::OUTSIDE; + if (!outOfView) { + bool bigEnoughToRender = _viewState->shouldRenderMesh(entityBox.getLargestDimension(), distance); - if (bigEnoughToRender) { - renderProxies(entityItem, args); + if (bigEnoughToRender) { + renderProxies(entityItem, args); - Glower* glower = NULL; - if (entityItem->getGlowLevel() > 0.0f) { - glower = new Glower(args, entityItem->getGlowLevel()); - } - entityItem->render(args); - args->_itemsRendered++; - if (glower) { - delete glower; + Glower* glower = NULL; + if (entityItem->getGlowLevel() > 0.0f) { + glower = new Glower(args, entityItem->getGlowLevel()); + } + entityItem->render(args); + args->_itemsRendered++; + if (glower) { + delete glower; + } + } else { + args->_itemsTooSmall++; } } else { - args->_itemsTooSmall++; + args->_itemsOutOfView++; } - } else { - args->_itemsOutOfView++; } } } diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index 5be8f72365..355a004594 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -24,15 +24,10 @@ namespace render { return render::Item::Bound(); } template <> void payloadRender(const RenderableEntityItem::Pointer& payload, RenderArgs* args) { - qDebug() << "payloadRender()... for payload:" << payload.get(); if (args) { - qDebug() << "rendering payload!! for payload:" << payload.get(); - qDebug() << "rendering payload!! for entity:" << payload->entity.get(); args->_elementsTouched++; if (payload && payload->entity) { - qDebug() << "rendering payload!! for entity:" << payload->entity->getEntityItemID(); - if (payload->entity->getType() == EntityTypes::Box) { - qDebug() << "rendering BOX type for entity:" << payload->entity->getEntityItemID(); + if (payload->entity->getType() != EntityTypes::Model) { payload->entity->render(args); } } diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index fa5512cb70..3f56363b15 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -11,6 +11,12 @@ #include "DrawTask.h" +#include + +#include "gpu/Batch.h" +#include "gpu/Context.h" + + using namespace render; @@ -28,6 +34,13 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon auto& itemBucketMap = scene->getMasterBucket(); RenderArgs* args = renderContext->args; + + PerformanceTimer perfTimer("DrawSceneTask::run"); + + gpu::Batch theBatch; + + args->_batch = &theBatch; + // render opaques auto filter = ItemFilter::Builder::opaqueShape(); auto& opaqueShapeItems = itemBucketMap.at(filter); @@ -37,7 +50,11 @@ void DrawSceneTask::run(const SceneContextPointer& sceneContext, const RenderCon for (auto id : opaqueShapeItems) { auto item = scene->getItem(id); qDebug() << " id:" << id; + qDebug() << " item:" << item; item.render(args); } + + args->_context->enqueueBatch((*args->_batch)); + args->_batch = nullptr; };