Làm cách nào để tìm hiểu trong thời gian chạy nếu Vulkan và / hoặc hỗ trợ OpenGL có sẵn?


7

Tôi đang chế tạo một công cụ có Vulkan cho công cụ kết xuất chính của nó. Nhưng để có ít nhất một số khả năng tương thích ngược với các thiết bị không có trình điều khiển cho (Chủ yếu là thiết bị di động), tôi muốn triển khai dự phòng OpenGL. Bây giờ, làm cách nào để kiểm tra API nào có sẵn trong hệ thống hiện tại?

Tôi muốn kiểm tra xem hỗ trợ Vulkan có tồn tại không, nếu không thì nếu hỗ trợ GL tồn tại và nếu không thì sự cố đó sẽ sụp đổ.


Hãy thử đăng bài này lên computergraphics.stackexchange.com Bạn có thể sẽ nhận được câu trả lời ở đó.
Almo

Bạn cần một số loại thư viện để mở một cửa sổ cho ứng dụng của bạn và chấp nhận đầu vào từ nó. Cách chính xác để kiểm tra hỗ trợ API tùy thuộc vào thư viện bạn chọn.
HolyBlackCat

2
Ngoài ra, tại sao thậm chí sử dụng Vulkan? Không có quá nhiều thiết bị có hỗ trợ Vulkan và bạn đang gặp phải nhiều vấn đề chỉ để có thêm hiệu suất nhỏ. Bạn có thực sự cần hiệu suất này? OpenGL không đơn giản là đủ?
HolyBlackCat

Câu trả lời:


6

Kiểm tra đầu tiên của bạn có thể là một LoadLibrarycuộc gọi (hoặc tương đương với nền tảng của bạn) cho Vulkan DLL:

HMODULE vulkanDll = LoadLibrary("vulkan-1.dll");

Sau đó, bạn sẽ muốn có được con trỏ đến vkCreateInstance.

PFN_vkCreateInstance vkCreateInstance;
// ...
vkCreateInstance = GetProcAddress(vulkanDll, "vkCreateInstance");

Sau đó, bạn sẽ muốn điền các thông số thích hợp và gọi vkCreateInstance . Điều này có thể được tham gia, bạn sẽ muốn đọc tài liệu. vkCreateInstancesẽ trả về mã kết quả có thể chỉ ra rằng nó đã không tải được. Nếu thất bại hoặc nếu bất kỳ bước nào trước đó không thành công (với lỗi không phải là "bạn đã gọi hàm sai" hoặc tương tự), Vulkan không khả dụng, hãy quay lại OpenGL.

Trên đây là một cách tiếp cận bất khả tri của thư viện (nhưng không phải hệ điều hành); nếu bạn đang sử dụng các khung bổ sung, họ có thể tóm tắt một số công việc này cho bạn. Ví dụ, GLFW rõ ràng cung cấp một chức năng bạn có thể sử dụng để biết Vulkan có khả dụng hay không .


Đối với OpenGL, hầu hết mọi thứ đều có sẵn DLL hoặc tương đương, nhưng bạn có thể áp dụng các LoadLibrarybước et cetera tương tự nếu muốn. Khởi tạo OpenGL là một nhiệm vụ cụ thể hơn về nền tảng, dường như nằm ngoài phạm vi của câu hỏi này, nhưng nó có thể thất bại: nếu thất bại, OpenGL vì một số lý do không khả dụng.

Tuy nhiên, rất có thể nó sẽ thành công, nhưng bạn có thể đã quay lại phiên bản OpenGL mà bạn không muốn hoặc điều đó quá thô sơ cho trò chơi của bạn. Bạn có thể gọi glGetStringvới GL_VERSIONđể xác định phiên bản thực tế của OpenGL bạn đã có thể tải. Các giá trị khác, chẳng hạn như GL_VENDORhay GL_RENDERER, có thể cho bạn biết thông tin về người lái xe bạn đang quan tâm. Trên cơ sở đó, bạn có thể xác định nếu tải OpenGL tổng thể của bạn là "thành công" cho mỗi số liệu của riêng bạn và xử lý đó phù hợp (đâm, trong trường hợp của bạn).

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.