Tôi gặp khó khăn khi phân biệt sự khác biệt thực tế giữa gọi glFlush()
và glFinish()
.
Các tài liệu nói điều đó glFlush()
và glFinish()
sẽ đẩy tất cả các hoạt động trong bộ đệm sang OpenGL để người ta có thể yên tâm rằng tất cả chúng sẽ được thực thi, sự khác biệt là nó glFlush()
sẽ trả về ngay lập tức ở vị trí như glFinish()
các khối cho đến khi tất cả các hoạt động hoàn tất.
Sau khi đọc các định nghĩa, tôi nhận ra rằng nếu tôi sử dụng glFlush()
điều đó có thể tôi sẽ gặp phải vấn đề khi gửi nhiều hoạt động đến OpenGL hơn nó có thể thực thi. Vì vậy, chỉ để thử, tôi đã đổi chỗ của tôi glFinish()
cho a glFlush()
và lo và kìa, chương trình của tôi đã chạy (theo như tôi có thể nói), giống hệt nhau; tốc độ khung hình, sử dụng tài nguyên, mọi thứ đều giống nhau.
Vì vậy, tôi tự hỏi liệu có nhiều sự khác biệt giữa hai cuộc gọi hay mã của tôi khiến chúng chạy không khác nhau. Hoặc nơi một cái nên được sử dụng so với cái kia. Tôi cũng nhận ra rằng OpenGL sẽ có một số lệnh gọi như glIsDone()
để kiểm tra xem tất cả các lệnh trong bộ đệm cho a glFlush()
đã hoàn thành hay chưa (vì vậy một lệnh không gửi các hoạt động tới OpenGL nhanh hơn chúng có thể được thực thi), nhưng tôi không tìm thấy hàm nào như vậy .
Mã của tôi là vòng lặp trò chơi điển hình:
while (running) {
process_stuff();
render_stuff();
}