Tôi có một chuỗi các shader tính toán tạo ra một lưới được lập chỉ mục. Người cuối cùng viết các chỉ số được tạo như thế này:
void addTriangle (uint i0, uint i1, uint i2) {
uint ic = atomicCounterIncrement(indirectIndexCount);
meshIndices[ic*3+0] = i0;
meshIndices[ic*3+1] = i1;
meshIndices[ic*3+2] = i2;
}
Sau khi lưới đã được tạo, nó được vẽ bằng glDrawElementsInirect . Bộ chỉ số gián tiếp trong mã ở trên là bộ đếm nguyên tử_uint ở vị trí 0 bên trong GL_DRAW_INDIRECT_BUFFER (xem cấu trúc có tên DrawElementsInirectCommand ). Bộ đếm này bây giờ rõ ràng là quá nhỏ với hệ số ba, vì nó chỉ được tăng một lần cho mỗi tam giác. Hiện tại, tôi nhân nó với 3 sau đó ngay trước khi phát lệnh gọi.
(Tại thời điểm này, việc này được thực hiện bằng cách ánh xạ bộ đệm và nhân lên CPU, điều này tất nhiên là vô nghĩa, nhưng cho thấy toàn bộ mọi thứ về cơ bản đều hoạt động. Mọi thứ đều được vẽ chính xác. Tôi có thể thực hiện nó bằng một lệnh gọi của trình đổ bóng tính toán 1x1x1x1x1x1 , nhưng điều đó dường như chỉ hơi ngớ ngẩn.)
Làm thế nào để tôi thoát khỏi bước nhân thêm này?
Vì đây dường như là một vấn đề rõ ràng mỗi khi các lưới có số lượng chỉ số biến đổi được tạo ra, tôi đoán phải có một giải pháp dễ dàng nào đó mà tôi đang xem?