More node
This commit is contained in:
@@ -16,6 +16,8 @@ layout(binding = NODE_DATA_BINDING, std430) restrict buffer NodeData {
|
||||
struct UnpackedNode {
|
||||
uint nodeId;
|
||||
|
||||
uvec2 rawPos;
|
||||
|
||||
ivec3 pos;
|
||||
uint lodLevel;
|
||||
|
||||
@@ -32,7 +34,7 @@ void unpackNode(out UnpackedNode node, uint nodeId) {
|
||||
uvec4 compactedNode = nodes[nodeId];
|
||||
node.nodeId = nodeId;
|
||||
node.lodLevel = compactedNode.x >> 28;
|
||||
|
||||
node.rawPos = compactedNode.xy;
|
||||
{
|
||||
int y = ((int(compactedNode.x)<<4)>>24);
|
||||
int x = (int(compactedNode.y)<<4)>>8;
|
||||
@@ -84,6 +86,10 @@ uint getChildPtr(in UnpackedNode node) {
|
||||
return node.childPtr;
|
||||
}
|
||||
|
||||
uvec2 getRawPos(in UnpackedNode node) {
|
||||
return node.rawPos;
|
||||
}
|
||||
|
||||
/*
|
||||
uint getTransformIndex(in UnpackedNode node) {
|
||||
return (node.flags >> 5)&31u;
|
||||
|
||||
@@ -49,9 +49,7 @@ void pushNode(uint nodeId) {
|
||||
nodeQueueSink[nodePushIndex++] = nodeId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define SIMPLE_QUEUE(name, bindingIndex) layout(binding = bindingIndex, std430) restrict buffer name##Struct { \
|
||||
uint name##Index; \
|
||||
uint[] name; \
|
||||
#define SIMPLE_QUEUE(type, name, bindingIndex) layout(binding = bindingIndex, std430) restrict buffer name##Struct { \
|
||||
type name##Index; \
|
||||
type##[] name; \
|
||||
};
|
||||
@@ -20,15 +20,15 @@ layout(binding = SCENE_UNIFORM_BINDING, std140) uniform SceneUniform {
|
||||
#import <voxy:lod/hierarchical/node.glsl>
|
||||
#import <voxy:lod/hierarchical/screenspace.glsl>
|
||||
|
||||
SIMPLE_QUEUE(requestQueue, REQUEST_QUEUE_BINDING);
|
||||
SIMPLE_QUEUE(renderQueue, RENDER_QUEUE_BINDING);
|
||||
SIMPLE_QUEUE(uvec2, requestQueue, REQUEST_QUEUE_BINDING);
|
||||
SIMPLE_QUEUE(uint, renderQueue, RENDER_QUEUE_BINDING);
|
||||
|
||||
void addRequest(inout UnpackedNode node) {
|
||||
printf("Put node decend request");
|
||||
if (!hasRequested(node)) {
|
||||
if (requestQueueIndex < requestQueueMaxSize) {
|
||||
if (requestQueueIndex.x < requestQueueMaxSize) {
|
||||
//Mark node as having a request submitted to prevent duplicate submissions
|
||||
requestQueue[atomicAdd(requestQueueIndex, 1)] = getId(node);
|
||||
requestQueue[atomicAdd(requestQueueIndex.x, 1)] = getRawPos(node);
|
||||
markRequested(node);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user