From 9d4ded1fb3b7fcbe4a598d320c6a65a0be3bf17a Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 2 Jun 2015 16:09:05 +0200 Subject: [PATCH] Add shouldRender functor to render args --- libraries/render/src/render/DrawTask.cpp | 10 +++------- libraries/shared/src/RenderArgs.h | 10 +++++++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index 9e66ec0938..0066f57350 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -113,13 +113,10 @@ void render::cullItems(const SceneContextPointer& sceneContext, const RenderCont // 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(bound.calcCenter()); - bool outOfView = args->_viewFrustum->boxInFrustum(bound) == ViewFrustum::OUTSIDE; if (!outOfView) { - bool bigEnoughToRender = true; //_viewState->shouldRenderMesh(bound.getLargestDimension(), distance); - + bool bigEnoughToRender = (args->_shouldRender) ? args->_shouldRender(args, bound) : true; + if (bigEnoughToRender) { outItems.push_back(id); // One more Item to render args->_itemsRendered++; @@ -129,8 +126,7 @@ void render::cullItems(const SceneContextPointer& sceneContext, const RenderCont } else { args->_itemsOutOfView++; } - } - + } } struct ItemBound { diff --git a/libraries/shared/src/RenderArgs.h b/libraries/shared/src/RenderArgs.h index e86389d705..0de4d4373e 100644 --- a/libraries/shared/src/RenderArgs.h +++ b/libraries/shared/src/RenderArgs.h @@ -12,8 +12,11 @@ #ifndef hifi_RenderArgs_h #define hifi_RenderArgs_h -class ViewFrustum; +#include + +class AABox; class OctreeRenderer; +class ViewFrustum; namespace gpu { class Batch; class Context; @@ -21,6 +24,8 @@ class Context; class RenderArgs { public: + typedef std::function ShoudRenderFunctor; + enum RenderMode { DEFAULT_RENDER_MODE, SHADOW_RENDER_MODE, DIFFUSE_RENDER_MODE, NORMAL_RENDER_MODE, MIRROR_RENDER_MODE }; enum RenderSide { MONO, STEREO_LEFT, STEREO_RIGHT }; @@ -40,6 +45,7 @@ public: RenderSide renderSide = MONO, DebugFlags debugFlags = RENDER_DEBUG_NONE, gpu::Batch* batch = nullptr, + ShoudRenderFunctor shouldRender = nullptr, int elementsTouched = 0, int itemsRendered = 0, @@ -66,6 +72,7 @@ public: _renderSide(renderSide), _debugFlags(debugFlags), _batch(batch), + _shouldRender(shouldRender), _elementsTouched(elementsTouched), _itemsRendered(itemsRendered), @@ -94,6 +101,7 @@ public: RenderSide _renderSide; DebugFlags _debugFlags; gpu::Batch* _batch; + ShoudRenderFunctor _shouldRender; int _elementsTouched; int _itemsRendered;