1

私はしばらくの間このマシンでopenglを開発してきましたが、突然、GLEWは、他のプロジェクトで機能していても、openglglslを実行するために必要な拡張機能がないと報告しました。面白い部分は、私も得る

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がサポートされているかどうかを確認する場所。

PS glewExperimentalを削除すると、コードがクラッシュしglGenVertexArraysます。

4

1 に答える 1

2

残念ながら、GLEWは、特にコアコンテキストまたは明示的なバージョンプロファイルが含まれている場合、現在のOpenGL開発と実際には同等ではありません。ごく最近、GLFWと関連して、まったく同じ問題が発生しました。OpenGLバージョンウィンドウのヒントを設定しないと、問題は解決しました。つまり、これら2つの呼び出しを無効にするか削除します。

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
于 2013-01-05T02:40:00.313 に答える