Điều này phụ thuộc hoàn toàn vào cuộc gọi OpenGL đang được đề cập và trạng thái OpenGL. Khi bạn thực hiện cuộc gọi OpenGL, việc thực hiện đầu tiên xếp hàng chúng trong nội bộ và sau đó thực thi chúng một cách không đồng bộ với thực thi của chương trình gọi điện. Một khái niệm quan trọng của OpenGL là các điểm đồng bộ hóa. Đó là các hoạt động trong hàng đợi công việc yêu cầu cuộc gọi OpenGL chặn cho đến khi các điều kiện nhất định được đáp ứng.
Đối tượng OpenGL (kết cấu, đối tượng đệm, v.v.) hoàn toàn trừu tượng và bằng cách chỉ định xử lý của đối tượng trong chương trình khách luôn đến dữ liệu, đối tượng có thời gian gọi hàm OpenGL tham chiếu đến đối tượng này. Vì vậy, hãy lấy ví dụ về trình tự này:
glBindTexture(GL_TEXTURE_2D, texID);
glTexImage2D(..., image_1);
draw_textured_quad();
glTexImage2D(..., image_2);
draw_textured_quad();
Đầu tiên draw_textured_quad
có thể trở lại ngay cả trước khi bất kỳ nội dung nào được vẽ. Tuy nhiên bằng cách thực hiện các cuộc gọi OpenGL tạo ra một tham chiếu nội bộ cho dữ liệu hiện đang nắm giữ bởi kết cấu. Vì vậy, khi glTexImage2D được gọi là lần thứ hai, có thể xảy ra trước khi quad đầu tiên được rút ra, OpenGL phải tạo nội bộ đối tượng kết cấu phụ để trở thành kết cấu texID
và được sử dụng bởi các cuộc gọi thứ hai là draw_textured_quad
. Nếu glTexSubImage2D
được gọi, nó thậm chí sẽ phải tạo một bản sao sửa đổi của nó.
Cuộc gọi OpenGL sẽ chỉ chặn, nếu kết quả của cuộc gọi sửa đổi bộ nhớ phía máy khách và phụ thuộc vào dữ liệu được tạo bởi các cuộc gọi OpenGL trước đó. Nói cách khác, khi thực hiện các cuộc gọi OpenGL, việc triển khai OpenGL tạo ra một cây phụ thuộc để theo dõi những gì phụ thuộc vào cái gì. Và khi một điểm đồng bộ hóa chặn nó sẽ ít nhất là chặn cho đến khi tất cả các phụ thuộc được đáp ứng.
Có thể nói chung họ sẽ chặn các chức năng, tôi không chắc chắn là tôi đã không thực hiện nó trước đây nhưng tôi cho rằng nó sẽ chạy trên vòng lặp và chỉ cập nhật khi cần để giữ tốc độ khung hình tăng lên. – PsyKzz
@MattPsyK: Các chức năng OpenGL không giới thiệu điểm đồng bộ không chặn. – datenwolf
Giả định xấu của tôi đã được thực hiện. – PsyKzz