2015-04-27 46 views
2

我想學習現代OpenGL,所以我必須使用3.2或更高版本。 我的驅動程序已更新,GPU Caps Viewer說我有4.3.0版本。 所以一切都應該沒問題。LWJGL無法使用OpenGL 3.2或更高版本

但是我無法在C++和Java中使用LWJGL訪問這些版本。

調用

System.out.println(glGetString(GL_VERSION)); 

打印 「2.1.0 - 構建8.15.10.2900」(同樣適用於C++)。

那麼,即使我的驅動程序使用GL4.3,爲什麼我不能使用GL3.2編程呢? 我該如何解決這個問題?

+0

你的系統規格是什麼?你爲GL_VENDOR和GL_RENDERER獲得什麼字符串? - 我懷疑你正在運行一個配備了Optimus的系統並放到板載圖形上。 – datenwolf

+0

你似乎是對的,對於GL_VENDOR我得到了「Intel」,對於GL_RENDERER我得到了「Intel(R)HD Graphics」。 – danielspaniol

+1

謝謝,你說的對。更改JVM的NVIDIA設置後,它可以正常工作。現在Eclipse不再使用我的板載圖形和OpenGL工程。 – danielspaniol

回答

2

好的,因爲這似乎是一個與Optimus相關的問題,而不是編程錯誤,您必須配置Optimus不要爲您的程序使用板載/ CPU集成圖形。如果這是寫在C/C++,你可以簡單地添加此沿着你mainWinMain功能,並用它做:

extern "C" { 
    _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; 
} 

但是,這被在JRE運行,這不是一個選項。我建議你閱讀NVidia關於這個問題的這篇應用筆記:http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf

+0

用「unsigned int」代替「DWORD」會一直工作嗎? – danielspaniol

+0

如果我在C++中使用此方法,Visual Studio仍然找不到像glShaderSource等方法。而且我無法更改Visual STudio的NVidia設置。 – danielspaniol

+0

@Exhauzt:'#include ','typedef uint32_t DWORDM'。像'glShaderSource'這樣的東西已經被引入了更高版本的OpenGL,它在Windows(和Linux)中必須在運行時使用'... GetProcAddress'類似的調用動態加載;因爲這很乏味,所以像GLEW這樣的裝載程序庫很繁重。 – datenwolf

相關問題