diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchical/node.glsl b/src/main/resources/assets/voxy/shaders/lod/hierarchical/node.glsl index 513619cf..9532f8a1 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchical/node.glsl +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchical/node.glsl @@ -28,6 +28,7 @@ struct UnpackedNode { }; #define NULL_NODE ((1<<24)-1) +#define EMPTY_QUEUE_ID ((1<<24)-2) #define NULL_MESH ((1<<24)-1) #define EMPTY_MESH ((1<<24)-2) @@ -63,6 +64,10 @@ bool hasChildren(in UnpackedNode node) { return node.childPtr != NULL_NODE; } +bool childListIsEmpty(in UnpackedNode node) { + return node.childPtr == EMPTY_QUEUE_ID; +} + bool isEmpty(in UnpackedNode node) { return (node.flags&2u) != 0; } diff --git a/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp b/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp index fc7c8029..54266a9f 100644 --- a/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp +++ b/src/main/resources/assets/voxy/shaders/lod/hierarchical/traversal_dev.comp @@ -51,6 +51,10 @@ void addRequest(inout UnpackedNode node) { } void enqueueChildren(in UnpackedNode node) { + if (childListIsEmpty(node)) {//Occures in a very rare case/instance so just handle it gracefully + return; + } + uint children = getChildCount(node); pushNodesInit(children); uint ptr = getChildPtr(node);