diff --git a/src/main/cpp/gl/multidraw.cpp b/src/main/cpp/gl/multidraw.cpp index 4917566..a8e16f0 100644 --- a/src/main/cpp/gl/multidraw.cpp +++ b/src/main/cpp/gl/multidraw.cpp @@ -265,16 +265,24 @@ layout(std430, binding = 3) writeonly buffer Output { uint out_indices[]; }; void main() { uint outIdx = gl_GlobalInvocationID.x; if (outIdx >= prefixSums[prefixSums.length() - 1]) - return; + return; // Find out draw call # int low = 0; - int l = draws.length(); - for (low = 0; low < l; ++low) { + int high = draws.length(); + for (low = 0; low < high; ++low) { if (prefixSums[low] > outIdx) { break; } } +// while (low < high) { +// int mid = low + (high - low) / 2; +// if (prefixSums[mid] > outIdx) { +// high = mid; +// } else { +// low = mid + 1; +// } +// } // figure out which index to take DrawCommand cmd = draws[low]; diff --git a/src/main/cpp/shaders/multidraw_compute.comp b/src/main/cpp/shaders/multidraw_compute.comp index e5952c0..e7750c5 100644 --- a/src/main/cpp/shaders/multidraw_compute.comp +++ b/src/main/cpp/shaders/multidraw_compute.comp @@ -22,12 +22,20 @@ void main() { // Find out draw call # int low = 0; - int l = draws.length(); - for (low = 0; low < l; ++low) { + int high = draws.length(); + for (low = 0; low < high; ++low) { if (prefixSums[low] > outIdx) { break; } } +// while (low < high) { +// int mid = low + (high - low) / 2; +// if (prefixSums[mid] > outIdx) { +// high = mid; +// } else { +// low = mid + 1; +// } +// } // figure out which index to take DrawCommand cmd = draws[low];