2013-01-05 57 views
1

我一直在這臺機器上開發opengl一段時間了,突然,GLEW報告我沒有獲得運行opengl glsl所需的擴展,即使它在其他項目。有趣的是,我甚至得到在OpenGL中無法獲得GLSL着色器

OpenGL Vendor: NVIDIA Corporation 
OpenGL Renderer: GeForce 610M/PCIe/SSE2 
OpenGL Version: 3.3.0 

OpenGL 2.0 is available! 
[FAILED] OpenGL Shading Language is not available... 

我用glsllib 0.9.4裝載的擴展,又使用GLEW。我的代碼如下:

bool Jogo::init() { 
    if(glfwInit() != GL_TRUE) return false; 

    glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3); 
    glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE); 

    if(glfwOpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) return false; 

    glewExperimental = true; 
    if(initGLExtensions() != true) return false; 

    glm::mat4 matrizModel = glm::mat4(1.0f); 
    glm::mat4 matrizView = glm::lookAt(glm::vec3(0, 0, 3), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0)); 
    glm::mat4 matrizProjecao = glm::perspective(45.0f, 9.0f/16.0f, -1.0f, 1.0f); 

    m_matrizMVP = matrizProjecao * matrizView * matrizModel; 

    m_shader = m_gerenciadorShader.loadfromFile("vshader.glsl", "fshader.glsl"); 
    char *x = m_shader->getLinkerLog(); 

    m_shader->setUniformMatrix4fv("mvp", 1, GL_FALSE, &(m_matrizMVP[0][0])); 

    m_world = new World(); 

    glClearColor(0.0f, 0.2f, 0.5f, 0.0f); 
    glClearDepth(0.0f); 

    return true; 
} 

glsllib的代碼加載擴展爲:

bool GLSLAPI initGLExtensions(void) { 
    if (extensions_init) return true; 
    extensions_init = true; 

    GLenum err = glewInit(); 

    if (GLEW_OK != err) { 
     cout << "Error:" << glewGetErrorString(err) << endl; 
     extensions_init = false; 
     return false; 
    } 

    cout << "OpenGL Vendor: " << (char*) glGetString(GL_VENDOR) << "\n"; 
    cout << "OpenGL Renderer: " << (char*) glGetString(GL_RENDERER) << "\n"; 
    cout << "OpenGL Version: " << (char*) glGetString(GL_VERSION) << "\n\n"; 

    checkGLSL(); 

    return true; 
} 

凡CheckGLSL查找glewGetExtension("GL_ARB_fragment_shader")glewGetExtension("GL_ARB_vertex_shader"),看是否支持GLSL。

P.S.如果我刪除glewExperimental,代碼崩潰glGenVertexArrays

回答

2

不幸的是,GLEW與當前的OpenGL開發並不相符,尤其是在涉及核心上下文或顯式版本配置文件的情況下。直到最近,我也遇到了同樣的問題,與GLFW一起。忽略設置OpenGL版本窗口提示確實爲我解決了這個問題。即禁用或刪除這兩個電話:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3); 
+0

嗯似乎完成了,現在我得到OpenGL 4.3.0,但出現了另一個錯誤。我會看看它是否相關並回報 –

+0

哦,這是glsllib中的一個錯誤...它有錯誤的長度:-0謝謝! :D –

+0

在我的一個項目中;我沒有使用任何第三方庫,必須爲OpenGL設置所有API調用,創建Windows類,設置OpenGL上下文等。在我當前的項目中,我剛剛在一個體面的教程網站上介紹給GLEW,並且目前我們正在使用OpenGL 3.3核心。我沒有任何問題,我正在使用VS2015。所以,在我決定移植到4.4或4.5之前,這是事先知道的事情。如果GLEW給我帶來問題;我會回到我的另一個項目。無論如何;感謝您提前領導! :) –