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 window1
hiện tại. Sau đó, nó cho phép đơn vị kết cấu 2D và liên kết texture1
với nó.
Tiếp theo nó làm cho bối cảnh window2
hiện tại. Nếu bạn kiểm tra trạng thái kích hoạt của GL_TEXTURE_2D
nó sẽ là sai (trừ khi trước đó bạn đã bật nó trên window2
ngữ 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 texture1
bị 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.