Khi đọc Redbook tôi thấy:Hiểu mối quan hệ giữa glutDisplayFunc và glutPostRedisplay
glutDisplayFunc (void (* func) (void)) là là người đầu tiên và quan trọng nhất sự kiện hàm callback bạn sẽ thấy. Bất cứ khi nào GLUT xác định rằng nội dung của cửa sổ cần phải là được hiển thị lại, hàm gọi lại được đăng ký bởi glutDisplayFunc() là được thi hành. Do đó, bạn nên đặt tất cả các thường trình bạn cần vẽ lại cảnh trong chức năng gọi lại màn hình .
Nếu chương trình của bạn thay đổi các nội dung của cửa sổ, đôi khi bạn sẽ phải gọi glutPostRedisplay(), mà cho glutMainLoop() một di chuyển để gọi màn hình hiển thị callback đăng ký tại cơ hội tiếp theo của nó
Lần nào trong đó glutPostRedisplay() nên được gọi? Từ đoạn này, tôi không hiểu tại sao chức năng của nó là cần thiết.
Tôi không hiểu tại sao bạn sẽ không gọi glutDisplayFunc thay vì glutPostRedisplay trong trường hợp bạn đề cập đến xem xét glutPostRedisplay cuối cùng kết thúc gọi glutDisplayFunc. Tầm quan trọng của hàng đợi là gì? Nó có thể trì hoãn hiển thị trong khi chờ đợi một điều kiện không? – andandandand
@omgzor: Trong ví dụ trên, bạn có thể làm điều đó. Nhưng đó không phải là lựa chọn tốt nhất. Bạn thấy đấy, tốt hơn là không gọi nó trực tiếp nhưng đặt nó trong một hàng đợi. Ví dụ: nếu bạn muốn hoạt ảnh và gọi displayFunc trực tiếp từ displayFunc, chương trình của bạn sẽ không phản hồi. Bởi vì bạn sẽ chặn vòng lặp. Đó là lý do tại sao tốt nhất để đăng sự kiện và để cho vòng lặp chính xử lý nó trong lượt của nó –
@omgzor: Nó sẽ không trì hoãn hiển thị. Nó sẽ trì hoãn mọi thứ khác :) –