1. 起因:
紅寶書上的例子在電腦上運行后沒有效果,但是怎么也找不到原因,反復對看了書上的源碼和代碼發現沒有任何問題,但是就是沒有樹上寫的效果
2. 思路:查看函數的說明,這里推薦使用docs.gl,這個網站會列出函數在OpenGL中哪些版本中有效.
查看后發現函數是OpenGL 4以后才有效,結合自己電腦比較老,所有想到了是不是自己電腦的OpenGL core版本比較低,不支持這個函數
3. 通過OpenGL函數glGetString
來獲取我電腦的OpenGL core版本
const char * version = (const char *)glGetString(GL_VERSION);
log("OpenGL version : %s\n", version); /// log是我封裝的一個輸出函數
//printf("OpenGL version : %s\n", version);
輸出結果:OpenGL version : 3.3.12618 Core Profile Context 13.251.9001.1001,看到這個我認為應該是我電腦OpenGL 版本不支持這個函數,目前不知道怎么解決如何才能使用到新版OpenGL版本的函數,留待以后思考(注:我有猜測是不是可以通過升級顯卡驅動,但是今天沒試),
4. 今天發現了一個新的查看方法判斷自己電腦OpenGL是否支持我們寫的版本(前提使用GLFW庫)
/// 錯誤日志接收函數
static void error_callback(int error, const char *description)
{
log("%s", description); // 輸出錯誤
}
glfwSetErrorCallback(error_callback); /// 關聯上面的函數
一旦OpenGL操作函數發生錯誤,就會自動回調這個函數,讓我們知道發生了什么錯誤
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow(512, 512, "Hello World", NULL, NULL);
上述例子會輸出如下錯誤:"WGL: Failed to create OpenGL context"
- 后記:我們可以通過OpenGL的函數
glGetString
的不同參數來獲取很多OpenGL相關的信息,譬如:上面的版本,顯卡名稱等等