Làm thế nào để đối phó với địa ngục D3DX?


16

Có một số lượng lớn các phiên bản của dll D3DX, từ mỗi bản cập nhật SDK, mỗi phiên bản có một tên duy nhất ( danh sách các tên dll D3DX ).

Tất cả quá thường xuyên, mọi người có phiên bản bị thiếu. Vì vậy, mặc dù họ có phiên bản DirectX tương thích, dự án dựa trên D3D của bạn sẽ không chạy trên máy của họ.

Tôi muốn có thể phân phối các trò chơi (các dự án ít thời gian rảnh rỗi, các mục gây nhiễu trò chơi, v.v.) dưới dạng tệp zip đơn giản mà không cần trình cài đặt. Nhưng một tỷ lệ đáng kể người dùng gặp phải lỗi D3DX. Và không có trình cài đặt, giải pháp chính thức của Microsoft (trình cài đặt / cập nhật DirectX) thực sự không phải là một giải pháp.

Thật không may, Microsoft vẫn sẽ không cung cấp cho chúng tôi tùy chọn liên kết tĩnh với D3DX (đây sẽ là một giải pháp sạch đẹp). Và việc tránh sử dụng D3DX không thực tế lắm, đặc biệt là nếu bạn đang làm việc với các trình đổ bóng (và không, tôi sẽ không chuyển sang OpenGL, ít nhất là bây giờ)

Có ai có giải pháp thông minh để tránh địa ngục DLL này?


2
Có thể nhận được phản hồi tốt hơn từ Stack Overflow ( stackoverflow.com ) - mặc dù điều này áp dụng cho các trò chơi của bạn, nó thực sự là lập trình. Trong thời gian chờ đợi ... Bạn có thể không đặt DLL vào cùng thư mục với tệp thực thi của mình không?
Ricket

Hmmm ... nó có phải là một ý tưởng ngớ ngẩn để trở lại phiên bản DX9 SDK lâu đời nhất mà tôi có thể nắm giữ, chỉ để giảm vấn đề này? Có vẻ là một cách làm việc điên rồ, nhưng MS đã thực sự tạo ra một vấn đề gây phiền nhiễu ở đây. Một lựa chọn không kém phần điên rồ khác là triển khai lại chức năng D3DX quan trọng nhất từ ​​đầu, nhưng tôi không thích phát minh lại hệ thống Hiệu ứng ...
bluescrn

Trong các SDK gần đây (tính đến một thời điểm năm ngoái tôi nghĩ), hệ thống con hiệu ứng phần lớn đã được chuyển ra khỏi SDK lõi và D3DX cho hơn 10. Thực tế, bạn có thể tự biên dịch nó - mã nằm trong SDK và có thể phân phối lại (cũng như các nhị phân được tạo ra từ nó). Có thể dễ dàng hơn để sao lưu hệ thống để hoạt động với 9 và hầu hết các phần còn lại của D3DX khá dễ thực hiện lại hoặc tìm giải pháp thay thế.

2
Đừng sử dụng d3dx. Nó gần như không nhanh như vậy / tốt / hiệu quả / mát mẻ.

Tôi có thể chuyển qua toán học DirectX, lưới, kết cấu và công cụ trợ giúp chung - nhưng thực sự không thể từ bỏ D3DXEffect. Và tôi bị mắc kẹt với DX9 ít nhiều mãi mãi. Và theo như tôi quan tâm, DX10 + không tồn tại, vì chúng không tồn tại trên XP
bluescrn

Câu trả lời:


17

Thật không may, không có giải pháp hợp pháp nào tốt cho việc này ngoại trừ việc tạo trình cài đặt, bởi vì tay của bạn bị ràng buộc bởi các quyền phân phối được cấp bởi DirectX SDK, nơi cung cấp D3DX DLL. Theo các điều khoản của thỏa thuận cấp phép, bạn bị ràng buộc bằng cách sử dụng SDK (được đặt trong (SDK Install Directory)/Documentation/License Agreements/bạn chỉ được phép phân phối lại các dạng nhị phân của các tập hợp con nhất định của SDK, cùng với một số mã mẫu và tiện ích.

Kể từ SDK tháng 6 năm 2010, bạn đã cho phép phân phối lại mọi thứ trong thư mục "Redist" và khi thực hiện, bạn phải bao gồm một số thành phần nhất định (DSetup32.dll, DSetup.dll, DXSetup.exe, DXupdate.cab và dxdllreg_x86.cab). Thư mục Redist bao gồm các tệp .cab cho các tệp D3DX, nhưng không phải là các tệp DLL để bạn không gặp may.

Thật không khó để xây dựng trình cài đặt, may mắn thay, chỉ chạy trình cài đặt web D3DX thích hợp hoặc không có gì thứ bạn phân phối lại. Trình cài đặt .msi đơn giản giúp người dùng dễ sử dụng (nhấp đúp thường là tất cả những gì cần thiết) và có thể được cấu hình để cho phép cài đặt vào các thư mục tùy ý, nếu bạn lo ngại vì một số lý do về việc "gây ô nhiễm" thư mục Tệp Chương trình với những chương trình vứt bỏ nhỏ này. Kích thước tải xuống của trình cài đặt được cấu hình phù hợp cũng có thể khá nhỏ, do đó không phải là quá nhiều vấn đề.

EDIT: Đây là một trang tốt về công cụ cài đặt DX .

EDIT 2: Tách bit "web" để phản hồi lại sự điều chỉnh trong các bình luận.


3
Bạn không được phép phân phối lại trình cài đặt web, chỉ cần trỏ chúng đến trang microsoft.com (không lý tưởng), và các thành phần có thể phân phối lại là tối thiểu 3Mb (không đáng kể so với kích thước của 'trò chơi thực sự', nhưng không cho các dự án ít thời gian rảnh rỗi)
bluescrn

Er, yup, bạn nói đúng, tôi nhớ về trình cài đặt web.

2

Bốn giải pháp chính mùa xuân đến tâm trí.

Đầu tiên là sử dụng phiên bản cũ hơn của DirectX SDK. Tôi dường như nhớ rằng các phiên bản từ bùng binh 2004 trở về trước được liên kết tĩnh (nhưng nếu kích thước thực thi lớn hơn sẽ khiến bạn sợ rằng đó không phải là một tùy chọn), và đó cũng là trường hợp nếu bạn sử dụng phiên bản từ 2006/2007 trở về trước DLL D3DX bạn cần sẽ có cơ hội cao hơn nhiều trên máy. Nhược điểm của điều này là bạn sẽ bỏ lỡ các lỗi, cải tiến hiệu suất và chức năng được cải thiện trong SDK mới hơn (nó cũng loại trừ bất kỳ phiên bản D3D nào ngoài 9).

Giải pháp thứ hai là sử dụng LoadL Library và GetProcAddress trên các hàm D3DX. Bạn chọn một phiên bản được hỗ trợ tối đa và tối thiểu (giả sử, từ _42 đến _34), sau đó đi vào một vòng lặp từ tối đa đến tối thiểu, xây dựng tên DLL và cố gắng tải thư viện. Nếu bạn tải nó ổn, sau đó bạn thực hiện một loạt các cuộc gọi GetProcAddress và sử dụng các con trỏ hàm của bạn thay vì các hàm D3DX thô. Kiểu như các phần mở rộng OpenGL, nếu bạn biết tôi đang nói về cái gì. Cái này có khả năng hơi nhiều lông và bạn vẫn có thể phải đối phó với trường hợp bạn không thể tìm thấy bất kỳ DLL nào trong phạm vi của mình. Nhưng tôi đã sử dụng cái này trong quá khứ và nó hoạt động đủ tốt.

Giải pháp thứ ba là không sử dụng D3DX. Có thể là một lựa chọn trong một số trường hợp, có thể không phải là một lựa chọn trong trường hợp của bạn.

Giải pháp thứ tư và cuối cùng là chỉ bảo người dùng của bạn nâng cấp Direct 3D của họ. Dù sao thì họ thực sự nên làm điều này, đó là một bản tải xuống nhỏ và nhanh từ Microsoft và đó là một cách giải quyết vấn đề tức thời. Người dùng của bạn có thể không muốn phải làm như vậy và bạn có thể phải xử lý các câu hỏi như "Tôi đã có D3D11, tại sao tôi cần nâng cấp D3D9 của mình", nhưng về mặt cân bằng, nó có thể hoạt động kinh tế tổng thể hơn nó trên mũi.

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.