Sử dụng OpenGL hoặc GLSL thuần túy? [đóng cửa]


11

Tôi có hứng thú với việc học lập trình đồ họa nên mục đích rõ ràng là học OpenGL. Nhưng thu thập thông tin rải rác trên các diễn đàn và trang web, có vẻ như việc triển khai OpenGL thuần túy đang mờ dần vì hầu hết mọi thứ trước 3.0 đều bị phản đối và trích dẫn một đánh giá trên Amazon, "kể từ 3.0, tất cả là về các shader". Ngoài ra, trong số những cuốn sách mà tôi đã xem, có vẻ như chỉ có bản xuất sắc bao gồm phiên bản mới hơn, nhưng chỉ một phần vì một phần tốt của cuốn sách dạy các chức năng không dùng nữa, và có những cuốn sách dành riêng cho GLSL.

Đây là nơi tôi gặp phải vấn đề đầu tiên của mình, một số phần cứng không hỗ trợ GLSL, bao gồm cả máy tính xách tay có đồ họa tích hợp intel mà tôi đã lên kế hoạch sử dụng. Chức năng

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

gây ra lỗi phân đoạn và từ vẻ ngoài của nó, trình điều khiển của tôi không hỗ trợ trình đổ bóng

Vì vậy, câu hỏi của tôi là, khả năng tạo ra một trò chơi chỉ trong OpenGL là gì? Tôi sẽ bị thiếu các tính năng tốt không thể thay thế từ ngôn ngữ đổ bóng? Và loại phần cứng nào (gen i3, i5, i7, VGA cũ) tôi có thể mong đợi để chạy một trò chơi với shader đúng cách?


1
GLSL OpenGL, tôi nghĩ rằng câu hỏi của bạn có liên quan đến việc phần cứng bạn định sử dụng có tương thích OpenGL 3 không, không tương thích với GLSL.
deceleratedcaviar

@Daniel vậy nếu phần cứng / trình điều khiển tương thích OpenGL 3.0 thì nó có tương thích GLSL không?
ibrabeicker

1
GLSL là một phần của đặc tả OpenGL 3.0, vì vậy, đó là trường hợp.
giảm tốc

1
Bạn nói, "từ vẻ bề ngoài của nó, tài xế của tôi không hỗ trợ shader." Phiên bản OpenGL nào bạn nhận được? Bạn có đang tải chính xác tất cả các chức năng OpenGL có sẵn không?
Nicol Bolas

1
@Papavoikos: Nếu nó trả về NULL, bạn đã gặp vấn đề lớn hơn nhiều so với việc có nên sử dụng shader hay không. Bạn đang tạo chính xác bối cảnh OpenGL của bạn? Hãy nhớ rằng: bạn không thể gọi bất kỳ chức năng GL nào cho đến khi bạn có bối cảnh hợp lệ được tạo và hiện tại.
Nicol Bolas

Câu trả lời:


9

Mã Shader chắc chắn rõ ràng và dễ hiểu hơn một mớ hỗn độn của các cuộc gọi ma trận glTexEnv, glTexGen và kết cấu, và có phần thưởng mà bạn có thể diễn tả bất kỳ hoạt động toán học tùy ý nào hoặc ít hơn bằng cách sử dụng nó (mà bạn không thể thực hiện với cố định đường ống - thứ bạn đang gọi là "OpenGL thuần túy"). Nhược điểm tiềm năng duy nhất là bạn cần phải viết một số cơ sở hạ tầng hỗ trợ nhất định trong mã của mình trước khi bạn có thể bắt đầu sử dụng chúng, trong khi với cách cũ, bạn có thể lặn khá nhiều ngay. Tôi gọi đó là nhược điểm "tiềm năng" bởi vì tôi thực sự nghĩ rằng điều đó khiến bạn chuẩn bị mọi thứ và tìm hiểu trước một chút - OpenGL nổi tiếng là "dễ dàng" và đôi khi bạn thấy mọi người bị lừa bởi điều này và lặn ngay mà không thực sự biết họ đang làm gì trước tiên,

Thông minh về phần cứng, bạn có thể dựa vào hầu hết mọi thứ được phát hành trong 5/6/7 năm qua để có một số mức độ hỗ trợ đổ bóng, nhưng - trong trường hợp của Intels cũ (một số dòng 9xx) - nó sẽ không phải là GLSL, nhưng thay vào đó sẽ là các phần mở rộng GL_ARB_vertex_programGL_ARB_fragment_program cũ hơn . Chúng sử dụng ngôn ngữ shader giống như ngôn ngữ lắp ráp, nhưng - thời gian thú nhận - cá nhân tôi khá thích nó. Nó thực sự khá dễ sử dụng, nếu thiếu một số tính năng hiện đại hơn (như phân nhánh) và yêu cầu nhiều dòng mã shader hơn để làm điều tương tự. Cơ sở hạ tầng hỗ trợ cần có trong chương trình chính của bạn cho các tiện ích mở rộng này nhẹ hơn rất nhiều so với GLSL.

Tuy nhiên, điều đó không có nghĩa là tôi khuyên họ nên dùng GLSL, nhưng chúng là một tùy chọn có nếu bạn thực sự cần chạy trên lớp phần cứng này và thật hữu ích khi biết rằng chúng tồn tại, đưa tôi đến điểm cuối cùng . Bạn có thực sự chắc chắn rằng bạn thực sự cần phải chạy trên lớp phần cứng này (ví dụ trong trường hợp máy tính xách tay của bạn, bạn có thể đã bỏ qua để có được điểm vào)?


Tôi hoàn toàn bỏ qua thực tế rằng Mesa3d vẫn còn trên đặc điểm kỹ thuật opengl 2.1. Tôi sẽ sửa nó
ibrabeicker

6

Cũng cần lưu ý rằng không còn "OpenGL thuần túy" nữa.

OpenGL ES 2.0 đã bỏ tất cả những thứ không phải là shader và vì WebGL dựa trên nó, nó cũng chỉ hoạt động với các shader. OpenGL 3.0 không chấp nhận tất cả các công cụ chức năng cố định và 3.1 đã loại bỏ nó (trong các cấu hình cốt lõi. Hầu hết các triển khai đều hỗ trợ các cấu hình tương thích, nhưng MacOSX không cho triển khai 3.2 của chúng).

Vì vậy, tôi sẽ không đề xuất học OpenGL không shader.


6

Nếu bạn đã thực hiện bất kỳ chương trình nào trong quá khứ, viết mã shader của riêng bạn bằng GLSL sẽ thú vị hơn nhiều. Ban đầu tôi đã thử học OpenGL chức năng cố định và nó khó hơn đối với tôi vì nó không có ý nghĩa. Sau đó, tôi đã cố gắng học GLSL bằng cuốn sách màu cam và nó dễ dàng hơn nhiều và được thực hiện nhiều hơn kể từ đó. Chỉ 2 xu của tôi.

Tôi chắc chắn sẽ hướng tới GLSL vì khả năng viết chương trình cho GPU.

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.