Trong GL máy tính để bàn, các ánh xạ giữa các phiên bản GL và phiên bản GLSL là như sau:
GL version GLSL version
2.0 1.10
2.1 1.20
3.0 1.30
3.1 1.40
3.2 1.50
3.3 3.30
4.0 4.00
4.1 4.10
4.2 4.20
4.3 4.30
4.4 4.40
4.5 4.50
...
Vì vậy, bắt đầu với GL 3.3, các số phiên bản được "đồng bộ hóa" để làm cho cuộc sống dễ dàng hơn. Cũng lưu ý rằng không có phiên bản rõ ràng 1.00. Điều đó đã có sẵn khi các shaders được phát triển như một phần mở rộng cho GL 1.x. Tuy nhiên, điều đó không bao giờ là một tính năng cốt lõi của OpenGL, vì vậy phiên bản bắt đầu tại 1.10 ở đây (cũng là mặc định nếu bạn không có chỉ thị #version
trong trình đổ bóng của mình). Nếu bạn yêu cầu #version 100
, bạn sẽ nhận được GLSL 1.00 ES.
Lưu ý rằng ngoài việc được yêu cầu hỗ trợ các phiên bản GLSL được liệt kê, việc triển khai GL cũng được yêu cầu để hỗ trợ các phiên bản cũ hơn. Ví dụ, trong OpenGL 4.5 core profile specification, sau đây được nêu (tôi nhấn mạnh):
OpenGL 4.5 hiện thực được đảm bảo để hỗ trợ phiên bản 4.50 của OpenGL Shading Language. Tất cả các tham chiếu đến các phần của thông số đó tham chiếu đến phiên bản đó. Phiên bản được hỗ trợ mới nhất của ngôn ngữ tô bóng có thể được truy vấn như được mô tả trong phần 22.2. Tiểu sử cốt lõi của OpenGL 4.5 cũng được đảm bảo hỗ trợ tất cả các phiên bản trước đó của Ngôn ngữ đổ bóng OpenGL trở lại phiên bản 1.40. Trong một số triển khai cấu hình cốt lõi cũng có thể hỗ trợ các phiên bản trước của Ngôn ngữ Shading và có thể hỗ trợ các phiên bản hồ sơ tương thích của Ngôn ngữ Shading cho các phiên bản 1,40 trở về trước. Trong trường hợp này, lỗi sẽ được tạo khi sử dụng các tính năng ngôn ngữ như tích hợp hồ sơ tương thích không được API hồ sơ cốt lõi hỗ trợ.
Đối với OpenGL ES, mọi thứ tương tự được áp dụng:
GLES version GLSL version
2.0 1.00 ES
3.0 3.00 ES
3.1 3.10 ES
với GLES 3.1 spec nêu
OpenGL ES 3.1 hiện thực được đảm bảo để hỗ trợ các phiên bản 3.10, 3.00 và 1.00 của OpenGL ES Ngôn ngữ Shading.
Bây giờ bạn vẫn có thể muốn biết phiên bản GLSL ES nào bạn có thể sử dụng trong máy tính để bàn GL. Vì vậy, đối với GL hiện đại, điều này khá đơn giản. Để báo GL 4.5 spec lần nữa:
Triển khai OpenGL 4.5 được đảm bảo hỗ trợ các phiên bản 1.00, 3.00 và 3.10 của ngôn ngữ bóng mờ OpenGL ES.
Hỗ trợ cho tính năng đó là đặc trưng cho GLES trong GL máy tính để bàn (như các biến thể ES của GLSL) thường được xử lý thông qua "tương thích" phần mở rộng:
Hiện tại, việc triển khai của bạn có thể chỉ cung cấp GL 3.0 và vẫn hỗ trợ các phần mở rộng tương thích ES.
Kể từ GL 4.3, bạn có thể chỉ cần truy vấn danh sách tất cả của các phiên bản GLSL được hỗ trợ qua glGetStringi(GL_SHADING_LANGUAGE_VERSION,...)
. Đối với các phiên bản trước đó, bạn phải kiểm tra số phiên bản GL và chuỗi mở rộng để suy ra phiên bản nào được đảm bảo được hỗ trợ (nhưng việc triển khai có thể vẫn hỗ trợ nhiều hơn).
có ánh xạ 1-1 giữa phiên bản OpenGL và phiên bản GLSL được hỗ trợ tối đa –
Có, nhưng tôi chỉ có thể tìm phiên bản GLSL được hỗ trợ cho mỗi phiên bản OpenGL. Tôi không thể tìm thấy thư tương tự cho GLSL ES. –
@RhiakathFlanders: 1,00 ES tương ứng với OpenGL ES 2.0 và 3.00 ES tương ứng với OpenGL ES 3.0. Khi ES 3.0 được phát hành, nó đã trải qua quá trình renumbering phiên bản tương tự như máy tính để bàn GL trong 3.3 (_e.g._ GLSL 1.50 -> GL 3.2 nhưng bắt đầu bằng GL 3.3, GLSL 3.30 -> GL 3.3). Họ đang đồng bộ với phiên bản GL trong tất cả các triển khai hiện đại của GLSL (máy tính để bàn và ES). Trên thực tế, GL ES 3.1 đã được phát hành vào tháng 6 và theo đó phiên bản của GLSL ES mà nó giới thiệu là '3,10 es'. –