Chính xác thì Make makeContextC Hiện tại làm gì?


12

Tôi khá bối rối về chức năng đó. GLFW Tham chiếu bối cảnh nói như sau:

Hàm này làm cho bối cảnh OpenGL hoặc OpenGL ES của cửa sổ được chỉ định hiện hành trên luồng gọi. Một bối cảnh chỉ có thể được tạo hiện tại trên một luồng tại một thời điểm và mỗi luồng chỉ có thể có một bối cảnh hiện tại duy nhất tại một thời điểm.

Nhưng nó không giúp tôi nhiều.
Nó có thể làm việc như glBind-phương pháp? (glBindBuffer, glBindVertexArray, v.v.)

Câu trả lời:


19

OpenGL là một máy trạng thái. Một bối cảnh OpenGL giữ trạng thái đó. Trạng thái chứa thông tin như kết cấu nào được liên kết với đơn vị kết cấu nào, phần đính kèm mà FBO hiện tại có và những thứ tương tự.

Khi bạn đặt bối cảnh hiện tại, bạn đang chuyển tất cả trạng thái từ bối cảnh cũ sang bối cảnh mới. Đây là một ví dụ:

glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);

glfwMakeContextCurrent(window2);

Những gì nó làm là làm cho bối cảnh window1hiện tại. Sau đó, nó cho phép đơn vị kết cấu 2D và liên kết texture1với nó.

Tiếp theo nó làm cho bối cảnh window2hiện tại. Nếu bạn kiểm tra trạng thái kích hoạt của GL_TEXTURE_2Dnó sẽ là sai (trừ khi trước đó bạn đã bật nó trên window2ngữ cảnh). Tương tự, nếu bạn kiểm tra kết cấu nào được liên kết với đơn vị kết cấu 2D, bạn có thể sẽ thấy không có kết cấu nào bị ràng buộc hoặc một số kết cấu khác ngoài texture1bị ràng buộc.

Về cơ bản tất cả các bản vẽ xảy ra trong bối cảnh hiện tại. Nếu bạn tạo một bối cảnh khác hiện tại, thì tất cả các bản vẽ sẽ xảy ra trong bối cảnh đó.

Thông thường có một ngữ cảnh duy nhất cho mỗi luồng trong ứng dụng OpenGL đa luồng. Bằng cách đó, mỗi luồng được vẽ vào bối cảnh riêng của nó và không làm rối loạn trạng thái bối cảnh trên các luồng khác.


1
Tôi không có nhiều hơn 15 điểm nên tôi không thể bỏ phiếu cho câu trả lời tuyệt vời của bạn. Cảm ơn!!!
Adrian

1
Đừng lo lắng. Rất vui vì tôi có thể giúp.
dùng1118321

Tôi đọc bình luận này vì vậy tôi đã tham gia máy tính và đưa ra câu trả lời này.
J MADISON
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.