63 switch ( node->
getNode().type() )
77 if ( node->componentMask() & compareMask )
87 if ( matInstance != INVALID_HANDLE<Material> &&
Get(matInstance)->hasTransparency() )
105 const F32 minDistToCameraSq,
110 assert( renderingCmp !=
nullptr );
130 renderBin.populateRenderQueue( params.
_stagePass, queueInOut );
166 renderBin.postRender( renderState, stagePass, bufferInOut );
175 constexpr U16 k_threadBias = 64u;
184 bool sortTaskDirty =
false;
196 [&renderBin, rbType, sortOrder](
const Task& )
198 renderBin.
sort( rbType, sortOrder );
201 sortTaskDirty =
true;
207 Start( *sortTask, pool );
217 renderBin.
sort( rbType, sortOrder );
223 Wait( *sortTask, pool );
232 for (
RenderBin& renderBin : _renderBins )
241 if ( i ==
to_base( targetBinType ) )
243 _renderBins[i].clear();
253 size_t countOut = 0u;
255 if ( binTypes.empty() )
259 countOut +=
_renderBins[i].getSortedNodes( queuesOut[i] );
#define PROFILE_SCOPE_AUTO(CATEGORY)
Kernel & parent() noexcept
The kernel is the main system that connects all of our various systems: windows, gfx,...
FORCE_INLINE PlatformContext & platformContext() noexcept
TaskPool & taskPool(const TaskPoolType type) noexcept
This class contains a list of "RenderBinItem"'s and stores them sorted depending on designation.
void addNodeToBin(const SceneGraphNode *sgn, RenderStagePass renderStagePass, F32 minDistToCameraSq)
void populateRenderQueue(RenderStagePass stagePass, RenderQueuePackages &queueInOut) const
U16 getSortedNodes(SortedQueue &nodes) const
std::array< SortedQueue, to_base(RenderBinType::COUNT)> SortedQueues
void sort(RenderBinType type, RenderingOrder renderOrder)
U16 getBinSize() const noexcept
RenderingOrder getSortOrder(RenderStagePass stagePass, RenderBinType rbType) const
RenderBinArray _renderBins
RenderBinType getBinForNode(const SceneGraphNode *node, Handle< Material > matInstance)
void populateRenderQueues(const PopulateQueueParams ¶ms, RenderQueuePackages &queueInOut)
void clear(RenderBinType targetBinType=RenderBinType::COUNT) noexcept
const RenderBin & getBin(const RenderBinType rbType) const noexcept
void sort(RenderStagePass stagePass, RenderBinType targetBinType=RenderBinType::COUNT, RenderingOrder renderOrder=RenderingOrder::COUNT)
void postRender(const SceneRenderState &renderState, RenderStagePass stagePass, GFX::CommandBuffer &bufferInOut)
size_t getSortedQueues(const vector< RenderBinType > &binTypes, RenderBin::SortedQueues &queuesOut) const
void addNodeToQueue(const SceneGraphNode *sgn, RenderStagePass stagePass, F32 minDistToCameraSq, RenderBinType targetBinType=RenderBinType::COUNT)
RenderQueue(Kernel &parent, RenderStage stage)
Handle< Material > getMaterialInstance() const noexcept
FORCE_INLINE T * get() const
Returns a pointer to a specific component. Returns null if the SGN does not have the component reques...
constexpr Optick::Category::Type GameLogic
constexpr Optick::Category::Type Scene
Handle console commands that start with a forward slash.
eastl::fixed_vector< RenderQueuePackage, Config::MAX_VISIBLE_NODES, false > RenderQueuePackages
static constexpr bool IsDepthPass(const RenderStagePass stagePass) noexcept
constexpr U32 to_U32(const T value)
void Wait(const Task &task, TaskPool &pool)
@ WATER
Water might end up being as expensive as terrain, so these will probably need reshuffling.
@ IMPOSTOR
Impostors should be overlayed over everything since they are a debugging tool.
@ TERRAIN_AUX
E.g. infinite ground plane.
@ TRANSLUCENT
Translucent items use a [0.0...1.0] alpha value supplied via an opacity map or via the albedo's alpha...
@ SKY
Sky needs to be drawn after ALL opaque geometry to save on fillrate.
@ TERRAIN
Actual terrain. It should cover most of the remaining empty screen space.
@ OPAQUE
Opaque objects will occlude a lot of the terrain and terrain is REALLY expensive to render,...
Task * CreateTask(Predicate &&threadedFunction, bool allowedInIdle=true)
eastl::vector< Type > vector
FORCE_INLINE constexpr bool Is3DObject(const SceneNodeType type) noexcept
void Start(Task &task, TaskPool &pool, TaskPriority priority=TaskPriority::DONT_CARE, const DELEGATE< void > &onCompletionFunction={})
@ FRONT_TO_BACK_ALPHA_LAST
FORCE_INLINE T * Get(const Handle< T > handle)
constexpr auto to_base(const Type value) -> Type
static NO_INLINE void errorfn(const char *format, T &&... args)
RenderStagePass _stagePass