Phiên bản OpenGL nào tôi nên mã hóa, xem xét khả năng tương thích và hiệu suất? [đóng cửa]


19

Khi thông số OpenGL được cập nhật, họ chỉ thêm các tính năng. Vì vậy, về mặt lý thuyết, phần cứng mới nhất và lớn nhất có hỗ trợ cho cấu hình Core và Tương thích sẽ chạy mã OpenGL1.1 siêu cũ. Điều này đã trở thành sự thật. Tôi đã dành 12 tháng để học OpenGL1.1 và nắm bắt được nó.

Tôi đã đọc một vài chương của một trong những cuốn sách OpenGL4.2 mới lạ này. Hầu như tất cả các tính năng mà tôi dựa vào đã bị phản đối (như Danh sách hiển thị), cho phép tôi giả định rằng có nhiều cách tốt hơn để thực hiện tất cả những điều này.

Hãy xem xét rằng 1.1 có khả năng được hỗ trợ đầy đủ, bởi TẤT CẢ phần cứng hiện đại. 1.1 được phát hành vào năm 1992. Tôi không mã hóa một cách khó khăn chỉ để hỗ trợ các PC 20 tuổi. :-p Tôi nghĩ thật hợp lý khi cho rằng hầu hết các game thủ đang chạy phần cứng ở mức trung bình khoảng 5 tuổi.

Tôi nghĩ rằng các phương thức mới hơn được thiết kế để trở thành một trong hai điều sau: hiệu suất tốt hơn hoặc dễ viết mã hơn. Tôi đọc ở đâu đó rằng nó không bao giờ cả hai mặc dù! XD

Phiên bản OpenGL nào được hỗ trợ rộng rãi nhất bởi phần cứng ~ 5 tuổi? Phiên bản nào có ý nghĩa nhất để sử dụng, dựa trên những cân nhắc này?

Câu trả lời:


19

Sau khi cân nhắc, bạn đã xuất hiện để xem khi nào thông số kỹ thuật OpenGL cho từng phiên bản được phát hành và cũng được xem xét trong một số cái nhìn tổng thể từ những gì tôi đã thấy.

OpenGL 3, giới thiệu FBO, VAO và những thứ khác, đã được phát hành vào ngày 11 tháng 7 năm 2008, gần 5 năm trước. Tất nhiên, bạn không thể mong đợi tất cả các thẻ sau ngày đó sẽ có sẵn OpenGL 3.

Nhìn vào Khảo sát phần cứng của Steam , 40% là DirectX 10. Vì OpenGL 3 yêu cầu một card đồ họa tương tự, nên thường an toàn khi cho rằng hầu hết các thẻ DirectX 10 có thể chạy ít nhất OpenGL 3.

OpenGL 3 được hỗ trợ trên các thẻ quay trở lại dòng GeForce 8xxx, khá phổ biến nếu tôi nhớ chính xác. Một điều thú vị nữa là Intel HD 2000 và 3000 Graphics (Sandy Bridge) chỉ hỗ trợ tối đa OpenGL 3, vì vậy hãy ghi nhớ điều đó nếu bạn có kế hoạch nhắm mục tiêu vào những thứ đó.

Kết luận: OpenGL 3 là một lựa chọn tốt (cũng nên nhớ rằng hầu hết các game thủ, tùy thuộc vào đối tượng mục tiêu của bạn, có thể sẽ có phần cứng tốt hơn mức trung bình).


Đây là một câu trả lời tuyệt vời. Chính xác là loại hiểu biết mà tôi đang tìm kiếm.
Suds

3
"Một điều thú vị cần lưu ý là Intel HD 2000 và 3000 Graphics (Sandy Bridge) chỉ hỗ trợ tối đa OpenGL 3" Lưu ý: chúng chỉ hỗ trợ GL 3.1 (vì Intel chỉ không quan tâm). Và vì là Intel, "hỗ trợ" nên được thực hiện bằng một hạt muối. Phần cứng của họ có thể hỗ trợ 3.3, nhưng họ không phơi bày điều đó (vì một lần nữa, họ không quan tâm). Tôi sẽ tránh sử dụng OpenGL 3.x trên phần cứng Intel. Thật vậy, tôi sẽ tránh làm bất cứ điều gì dựa trên phần cứng của Intel.
Nicol Bolas

Câu hỏi sau đó được đưa ra; Làm thế nào bão hòa thị trường với phần cứng intel? Có đáng để không quan tâm đến đồ họa intel và sử dụng OpenGL3.x không? Hoặc có đủ phần cứng đồ họa intel ngoài kia để thực sự quan trọng?
Suds

1
Một vấn đề là OSX. Bản phát hành mới nhất 10.7.x chỉ hỗ trợ OpenGL 3.2 , 10.6.x chỉ hỗ trợ 3.0 (hoặc thậm chí là 2.x). 10.5.x thay đổi rất nhiều tùy thuộc vào thẻ, 1.3, 1.5 và 2.0 là các khả năng. Các hệ thống đó sẽ bị kẹt vĩnh viễn ở các phiên bản OpenGL đó trừ khi người dùng trả tiền cho Apple để cập nhật. Không có bản cập nhật trình điều khiển thẻ video hoặc như vậy cho OSX sẽ cập nhật OpenGL. Các vấn đề khác là một số chipset Intel nhúng dogey sử dụng trong netbook. Nhiều người trong số họ chỉ là OpenGL 2.0 hoặc tệ hơn.
David C. Giám mục

Và sau đó, bạn có 3DS, vẫn đang khuấy động OpenGL 1.1 ...
kirbyfan64sos

8

Tôi sẽ bắt đầu ở đây: http://store.steampowered.com/hwsurvey

Tôi sẽ không nhắm mục tiêu một khoảng thời gian nhiều như tỷ lệ phần trăm người dùng, ví dụ: nếu bạn nhắm mục tiêu 4cpus, bạn sẽ chỉ đạt 45% người dùng, nhưng nếu bạn làm việc đến 2, bạn sẽ đạt gần 90%


1
Bạn đã thấy OpenGL ở đâu? Tôi chỉ thấy DirectX (một điều thú vị cần lưu ý nếu bạn dự định chỉ nhắm mục tiêu Windows).
DMan

Tôi đoán bạn sẽ thực hiện các công việc dựa trên sự cố card đồ họa
Jimmy

Vâng - Tôi không thấy gì về OpenGL - nhưng bạn có thể lấy nó từ các mô hình thẻ, hoặc thực sự, tôi tin rằng sẽ có một số lượng tương quan hợp lý giữa các phiên bản DirectX và OpenGL.
salmonmoose

3

Câu trả lời phụ thuộc vào việc bạn có cần hay không muốn chạy trên đồ họa Intel được phát hành trong khung thời gian bạn đã đề cập.

Nếu bạn làm như vậy, thì hãy giới hạn bản thân ở OpenGL 2.1 (hoặc thậm chí 1.5), nếu bạn không thì 3.x có vẻ hợp lý.

Có, các phiên bản cũ hơn của OpenGL vẫn chạy, và vâng, từ một góc độ, chúng có vẻ đơn giản hơn. Nơi mà mọi thứ trở nên khó khăn là khi bạn cố gắng làm mọi thứ (và bạn sẽ) rằng họ không hỗ trợ quá dễ dàng. OpenGL 1.1 không chỉ là cách khó - thường là cách không thể nếu bạn muốn đạt được kết quả nhất định.


Nó xảy ra với tôi rằng tôi nên thêm một ví dụ về lý do tại sao 1.1 thường không thể. Một thứ có thể dễ dàng liên quan đến chức năng 1.1 là nhiều đường chuyền pha trộn. Vì bạn không có FBO và bạn hầu như bị giới hạn ở 8 bit cho mỗi kết cấu thành phần, bạn sẽ thấy rằng khi pha trộn chồng chất, bạn sẽ bắt đầu mất độ chính xác. Sử dụng 3/4/5 và kết quả cuối cùng sẽ bắt đầu giống như (hoặc tệ hơn) đồ họa 16 bit hoặc 8 bit. Tuy nhiên, nhiều đường chuyền thường được yêu cầu để mô phỏng các hiệu ứng cấp cao hơn (đa biến cơ bản sẽ là một hiệu ứng mà chúng ta đều quen thuộc) với bộ tính năng 1.1.
Maximus Minimus

Ngay cả đồ họa Intel HD (Sandy / Ivy Bridge) chỉ hỗ trợ OpenGL 3.1 và đã được một năm tuổi. Nó phụ thuộc vào việc bạn muốn hỗ trợ máy tính xách tay giá rẻ (hoặc năng lượng thấp).
Steve Howard

2
@SteveHoward: Đồ họa HD của Intel có thể hỗ trợ nguồn
Janus Troelsen

Bài viết đó là từ khoảng 3 tháng sau khi tôi đăng bình luận của mình.
Steve Howard

1

Thứ nhất là các công cụ OpenGL 1.1 như Danh sách hiển thị vẫn sẽ hoạt động trong ngữ cảnh mới miễn là bạn có hồ sơ tương thích (thường là trường hợp này). Vấn đề duy nhất là nếu bạn muốn chuyển sang OpenGL ES, một trong những thư viện đồ họa cụ thể của bảng điều khiển (chúng thường bị loại bỏ OpenGL tương tự như OpenGL ES) hoặc thậm chí là WebGL (dù sao cũng cần phải làm lại khá nhiều).

Cá nhân tôi khuyên bạn nên sử dụng các shader đỉnh / mảnh và VBO. Chúng đã tồn tại khá lâu và cung cấp những cải tiến hiệu suất tuyệt vời. Bạn thậm chí có thể cung cấp một dự phòng đơn giản nếu bạn bọc các chức năng trong một lớp.

Bạn cũng có thể mô phỏng những thứ như Vertex Array Object.


0

Với phần cứng 5 năm tuổi, một số người vẫn đang sử dụng XP. Và điều đó có nghĩa là bạn thậm chí không thể mã hóa bằng DirectX 10 hoặc OpenGL 3. Và OpenGL 3 có rất nhiều tính năng mà bạn thực sự được hưởng lợi, như bộ đệm khung, v.v. Thành thật mà nói, tôi sẽ tăng các yêu cầu hệ thống của bạn chỉ một chút để bạn có thể bao gồm các tính năng đó.


8
-1: "Với phần cứng 5 năm tuổi, một số người vẫn đang sử dụng XP. Điều đó có nghĩa là bạn thậm chí không thể viết mã bằng DirectX 10 hoặc OpenGL 3." Không đúng. OpenGL 3.x chỉ chạy tốt trong XP. Đó chỉ là D3D10 bị hạn chế từ XP, vì lý do API / trình điều khiển. Nó không có gì để làm với phần cứng.
Nicol Bolas

0

Thông thường phần mềm 3d có các đường dẫn mã cho cả phiên bản api đồ họa "cơ bản" và phiên bản api "mới nhất và lớn nhất".

Các phiên bản đồ họa cơ bản phổ biến là D3D9 và OpenGL 2.1 / GLSL 120 .. Cả hai đều thiếu các shader hình học đáng chú ý vì phần cứng cũ không hỗ trợ chúng.

Một tùy chọn cơ bản khác là ANGLE, đó là GLES 2.0 cộng với EGL chạy trên D3D9, OpenGL trên máy tính để bàn và GLES 2.0 di động. Nó là phần cuối của Google chrome và webgl trong chrome và Firefox.

http://code.google.com.vn/p/angleproject/

Đối với phiên bản "mới nhất và lớn nhất" mà bạn chọn, điều đó khó khăn hơn. Api và phần cứng gần đây bạn nhắm mục tiêu, các tính năng tìm kiếm tốt hơn bạn có thể hỗ trợ - nhưng chỉ trên phần cứng mới nhất và tốt nhất.

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.