2013-05-29 17 views
8

我是使用C++與SDL和OpenGL開發應用程序的團隊的一員。強制機器使用專用圖形卡?

在運行應用程序的筆記本電腦上,未使用專用圖形卡,並且GL上下文無法創建,因爲集成顯卡不支持所需的GL版本。

我有一種感覺,這個問題是特定於筆記本電腦的問題,而不是我們可以通過代碼解決的。但是,如果有人知道是否有一個好的解決方案。

+0

你的意思是雙顯卡的筆記本電腦?是否手動切換到專用卡幫助(在nvidia設置或任何地方)? – riv

+0

您可能可以使用目標平臺特定的API來訪問可用的設備,然後選擇要在哪個設備上創建活動上下文。儘管我有一種感覺,你是對的,並且在@riv建議的筆記本電腦設置中打開之前,不活動的圖形設備不會顯示出來。 – kc7zax

+1

@riv是的,它是一個雙顯卡的筆記本電腦。我們當然可以將應用程序添加到在nvidia/ati設置中使用專用卡的應用程序列表中,但對於最終用戶,我們寧願他們不必這樣做。 –

回答

3

它使用NVidia專用圖形嗎? AFAIK,從集成自動切換到專用的過程基於應用程序配置文件。您的應用程序不在已知3D應用程序的驅動程序列表中,因此用戶必須手動切換到專用GPU。

嘗試將應用程序的可執行文件名更改爲驅動程序查找的內容。例如「Doom3.exe」。如果這有效,那麼你已經發現你的問題。

如果沒有幫助,請嘗試以下這個視頻就如何使駕駛員在3D的列表中插入應用的指令的應用:

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

但以上只是用於驗證如果這確實是你的問題。對於實際的解決方案,您應該向圖形驅動程序供應商(AMD和NVidia)詢問如何將您的應用程序的配置文件插入其列表的最佳方式。 NVidia提供NVAPI,AMD有ADLAGS。他們絕對值得一讀。

+0

目標是防止最終用戶不得不將應用程序添加到使用專用圖形卡的應用程序列表中。 這也可能發生在非NVIDIA設備上。我會看看你發送的鏈接。 ATI卡是否有類似的解決方案? –

+1

@ConnorHollis:存儲應用程序配置文件的地方是衆所周知的。最直接的解決方案是讓安裝程序爲AMD和NVidia的驅動程序添加應用程序配置文件。 – datenwolf

+0

但是,您應該使用Nvidia的Nvapi創建應用程序配置文件,而不是自己寫入這些位置,因爲該信息的位置在過去已經發生變化,並且可能隨時會再次發生變化。 –

10

從C++,以確保專用的圖形卡是用來代替Windows下芯片組切換圖形最簡單的方法是要導出的下列符號(MSVC示例代碼):

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; 
} 

警告:如果用戶已經創建了一個配置文件使用集成chipse應用噸,那麼這些將無法正常工作。

我不確定這是否會在Linux/MacOS(不太可能)下工作類似。

+0

你有一個變量有'__declspec',另一個有'_declspec'。錯字還是我錯過了什麼? – HolyBlackCat

+0

感謝您的注意!兩個下劃線更正確,但_declspec工作正常:http://stackoverflow.com/questions/1399215/difference-between-declspec-and-declspec –

+0

嘿,我怎麼能在一個C#項目中使用它? (WPF) – user2088807

相關問題