2013-05-29 23 views
8

Tôi là thành viên của nhóm phát triển một ứng dụng sử dụng C++ với SDL và OpenGL.Buộc máy sử dụng Card đồ họa chuyên dụng?

Trên máy tính xách tay khi ứng dụng được chạy card đồ họa chuyên dụng không được sử dụng và ngữ cảnh GL không tạo được vì card đồ họa tích hợp không hỗ trợ phiên bản GL mà chúng tôi muốn.

Tôi có cảm giác rằng sự cố này dành riêng cho máy tính xách tay được đề cập và không phải là thứ chúng tôi có thể giải quyết thông qua mã. Nhưng, nếu có ai biết nếu có một giải pháp tuyệt vời.

+0

Bạn có nghĩa là máy tính xách tay có thẻ đồ họa kép không? Không tự chuyển sang trợ giúp thẻ chuyên dụng (trong cài đặt nvidia hoặc bất cứ nơi nào nó được)? – riv

+0

Bạn có thể sử dụng (các) API cụ thể của nền tảng đích để truy cập vào những thiết bị nào có sẵn, sau đó chọn một thiết bị để tạo bối cảnh hoạt động. Mặc dù tôi có cảm giác bạn đúng và thiết bị đồ họa không hoạt động sẽ không hiển thị cho đến khi được bật trong cài đặt cho máy tính xách tay như được đề xuất bởi @riv. – kc7zax

+1

@riv có nó là một máy tính xách tay với card đồ họa kép. Tất nhiên chúng ta có thể thêm ứng dụng vào danh sách các ứng dụng sử dụng thẻ chuyên dụng trong cài đặt nvidia/ati nhưng đối với người dùng cuối, chúng tôi muốn họ không phải làm điều đó. –

Trả lời

3

Ứng dụng có sử dụng đồ họa chuyên dụng của NVidia không? AFAIK, quá trình tự động chuyển từ tích hợp sang chuyên dụng dựa trên hồ sơ ứng dụng. Ứng dụng của bạn không nằm trong danh sách các ứng dụng 3D đã biết của trình điều khiển và do đó người dùng phải tự chuyển sang GPU chuyên dụng.

Hãy thử thay đổi tên thực thi của ứng dụng của bạn thành nội dung mà trình điều khiển tìm kiếm. Ví dụ "Doom3.exe". Nếu nó hoạt động, thì bạn đã tìm thấy vấn đề của mình.

Nếu điều đó đã không giúp đỡ, hãy thử theo các hướng dẫn trong video này về cách làm cho người lái xe chèn ứng dụng của bạn trong danh sách các ứng dụng 3D:

http://www.frequency.com/video/how-to-whitelist-game-with-nvidias/24814032

Nhưng trên chỉ là xác minh nếu điều này thực sự là vấn đề của bạn. Đối với một giải pháp thực tế cho điều này, bạn nên kiểm tra với các nhà cung cấp trình điều khiển đồ họa (AMD và NVidia) trên cách tốt nhất để chèn một hồ sơ cho ứng dụng của bạn vào danh sách của họ. NVidia cung cấp NVAPI và AMD có ADLAGS. Chúng chắc chắn đáng để nghiên cứu.

+0

Mục đích là để ngăn người dùng cuối phải thêm ứng dụng vào danh sách các ứng dụng sử dụng cạc đồ họa chuyên dụng. Điều này cũng có thể xảy ra trên các thiết bị không phải nvidia. Tôi sẽ xem xét liên kết bạn đã gửi. Có giải pháp tương tự cho thẻ ATI không? –

+1

@ConnorHollis: Những nơi mà các hồ sơ ứng dụng được lưu trữ nổi tiếng.Các giải pháp straigtforward là để có trình cài đặt thêm một hồ sơ ứng dụng cho các trình điều khiển của AMD và NVidia. – datenwolf

+0

Nhưng bạn nên sử dụng Nvapi từ Nvidia để tạo hồ sơ ứng dụng thay vì tự viết cho những địa điểm đó vì vị trí của thông tin đó đã thay đổi trong quá khứ và có thể thay đổi lại bất cứ lúc nào. –

10

Cách đơn giản nhất từ ​​C++ để đảm bảo rằng card đồ họa chuyên dụng được sử dụng thay cho đồ họa có thể chuyển đổi chipset trong môi trường Windows là để xuất khẩu các biểu tượng sau (MSVC mẫu mã):

Enable dedicated graphics for NVIDIA:

extern "C" 
{ 
    __declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001; 
} 

Enable dedicated graphics for AMD Radeon:

extern "C" 
{ 
    __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; 
} 

Lưu ý: Nếu người dùng đã tạo hồ sơ cho ứng dụng để sử dụng chip tích hợp t, sau đó những điều này sẽ không hoạt động.

Tôi không chắc liệu điều này có hoạt động tương tự dưới Linux/MacOS (không).

+0

Bạn có '__declspec' cho một biến và' _declspec' cho một biến khác. Typo hay tôi thiếu gì đó? – HolyBlackCat

+0

Cảm ơn vì đã chú ý điều đó! Hai dấu gạch dưới là chính xác hơn, nhưng _declspec đang làm việc như mong đợi: http://stackoverflow.com/questions/1399215/difference-between-declspec-and-declspec –

+0

Hey, Làm thế nào tôi có thể sử dụng nó trong một dự án C#? (WPF) – user2088807