Tôi có một ứng dụng đơn giản. Nó có hai luồng, mỗi luồng có bối cảnh kết xuất riêng, nhưng chúng chia sẻ một VBO (điều này đang hoạt động, tôi đã thử nghiệm nó).
Bây giờ tôi muốn: Một luồng đang hiển thị một số dữ liệu từ nửa đầu của VBO và luồng thứ hai đang cập nhật phần thứ hai của VBO.
Khi tôi không cập nhật VBO, nó hoạt động tốt.
Nhưng tôi có một số vấn đề kỳ lạ khi cập nhật. Khi tôi sử dụng glMapBuffer
để cập nhật VBO (trong luồng thứ hai), trong luồng đầu tiên, hầu hết thời gian, nó sẽ không hiển thị gì cả. Toàn bộ màn hình rõ ràng (sau một glClear
cuộc gọi). Có vẻ như nó không thể chạm vào dữ liệu từ VBO (điều này có thể hiểu được, bởi vì toàn bộ bộ đệm được ánh xạ và do đó nó có thể bị khóa bằng cách nào đó).
Tôi đã thử sử dụng glMapBufferRange
, trong đó sử dụng GL_MAP_UNSYNCHRONIZED_BIT
. Điều này có nghĩa là, "đừng chờ đợi và sử dụng VBO như bạn muốn, tôi (chương trình) sẽ tự đồng bộ hóa nó". Ngoài ra, khi tôi ánh xạ một loạt VBO và kết xuất dữ liệu từ một phần khác, điều đó không nên chờ đợi, nhưng tôi đang gặp vấn đề tương tự như tôi glMapBuffer
.
Ai có thể giúp tôi khắc phục điều này hoặc giải thích tại sao nó xảy ra?