2013-07-23 31 views
22

Được rồi, vì vậy tôi đã biết tại sao tôi cần GLEW, nhưng chỉ đến một điểm.GLEW làm gì và tại sao tôi cần nó?

Nếu tôi đang sử dụng công cụ OpenGL hiện đại, có thể từ phiên bản 3.0 trở đi và/hoặc đang sử dụng Cấu hình cốt lõi, thì GLEW là bắt buộc vì không có lỗi biên dịch được tạo ra như glGenVertexArrays.

Vì vậy, GLEW thực hiện một số thao tác nền bao gồm các chức năng OpenGL hiện đại mà chúng tôi muốn sử dụng, có thể.

Ngoài ra, nó có làm gì khác không? Ngoài ra, nó hoạt động như thế nào.

Ví dụ: nó có cải tiến việc biên dịch nền tảng không? (Yêu cầu ít sửa đổi hơn đối với mã nếu di chuyển từ Linux sang Windows hoặc OS X chẳng hạn?

Nó cũng cải thiện phần mềm "đa nền tảng" của phần cứng đồ họa? Ví dụ, chúng ta có hai máy tính giống hệt nhau, bao gồm cả Một chương trình được biên dịch bằng cách sử dụng OpenGL 4.3 lệnh trên một hệ thống.Nếu hệ thống khác có một card đồ họa hoặc trình điều khiển mà chỉ hỗ trợ OpenGL 3.3, GLEW giúp với điều đó? (Biên dịch shaders cho một phiên bản cũ của OpenGL, có lẽ?)

vì vậy, bạn có thể thấy tôi không thực sự biết những gì GLEW không hoặc làm thế nào nó có phải nó

một điểm cuối cùng;.? không ai biết làm thế nào để sử dụng GLEW với GLFW tôi có thể gửi đó như là một ques riêng tion thực sự.

Trả lời

11

GLEW không phải là 'bắt buộc', khi bạn đặt nó. Bạn có thể sử dụng tiêu đề glcorearb.h, hoặc bất cứ thứ gì như thế. Tuy nhiên, nếu bạn liên kết với một số chức năng - nó phải tồn tại trên nền tảng đích hoặc chương trình của bạn sẽ không khởi chạy. GLEW và những người khác là chính xác để xử lý điều đó - bạn không liên kết trực tiếp với các hàm GL, mà thay vào đó nhận được các con trỏ hàm sau giai đoạn khởi tạo. Nó cho phép bạn kiểm tra thời gian chạy mà các phần mở rộng có mặt và các chức năng nào có thể được sử dụng.

Điều duy nhất nó giúp với tính di động là nhận được con trỏ hàm - nó có thể là wglGetProcAddress/glxGetProcAddress và nó tương tự cho hệ điều hành Apple. Vì vậy không, nó không phải là một trường hợp. Tuy nhiên, sự đa dạng của các phần mở rộng GL có sẵn là.

GLEW không yêu cầu phải có điểm tiếp xúc với thư viện khởi tạo GL ưa thích của bạn - chỉ cần gọi glewInit sau khi tạo ngữ cảnh GL.

+0

Nếu tôi tạo một cửa sổ và sau đó gọi glewInit() tôi gặp lỗi segfault? – user3728501

+0

@EdwardBird: Bạn đã tạo ngữ cảnh OpenGL trên cửa sổ đó chưa? Ngữ cảnh OpenGL có hoạt động khi gọi glewInit không? – datenwolf

+0

Vâng tôi đã làm, nhưng tôi đã khắc phục vấn đề ngay bây giờ - cảm ơn anyway (: – user3728501

5

Để chính xác init glew một bối cảnh OpenGL phải được tạo ra wglMakeCurrent() phải được gọi trước khi gọi glewInit();

tôi sẽ đặt này vào ý kiến ​​của các câu trả lời keltar, nhưng tôi không thấy như thế nào.

+0

Cảm ơn bạn đã bổ sung - upvoted – user3728501