2014-12-10 29 views
12

Trong khi phát triển trên một máy tính xách tay với một card đồ họa intel, khi biên dịch một vertex shader, tôi đã nhận này:Nhận được hỗ trợ các phiên bản GLSL

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES 

ok, vì vậy tôi thích ứng đổ bóng sử dụng phiên bản 300 ES. Trong khi đó, tôi muốn kiểm tra những gì các phiên bản trình điều khiển/thẻ hỗ trợ hiện tại GLSL, vì vậy tôi sử dụng này:

glGetString (GL_SHADING_LANGUAGE_VERSION) 

nào, để mất tinh thần của tôi, sẽ chỉ trả lại "1.30".

Tôi làm cách nào để có được danh sách đầy đủ? Hoặc thậm chí nếu nó không phải là danh sách đầy đủ, làm thế nào tôi có thể nhận được các phiên bản được hỗ trợ GL tiêu chuẩn, và các phiên bản được hỗ trợ GLES?

+0

có ánh xạ 1-1 giữa phiên bản OpenGL và phiên bản GLSL được hỗ trợ tối đa –

+0

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. –

+2

@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'. –

Trả lời

17

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).

+1

Vì vậy, cơ bản, tôi phải "giả định" phiên bản GLSL có sẵn, dựa trên bảng đó, mặc dù một số phiên bản mới hơn có thể có sẵn ... (Làm thế nào để nhập một dòng mới trong nhận xét này ???) Vì vậy, nếu Tôi đang ở trên GL> = 4.3, có một cách dễ dàng, nhưng nếu không, tôi sẽ phải hardcode bảng? Argh! –

Các vấn đề liên quan